nodejs的一些局限

       这段时间nodejs在国内发展是相当迅速的。这门语言“非阻塞,异步,事件驱动”的特点使其非常适合用于高并发量的web服务中。但正所谓“人无完人”,虽然nodejs有很多优点,但依然存在一些问题和缺陷。了解一门语言的优点很重要,但了解它的局限,并在现实开发中尽量规避,更加重要。

       一. 内存限制 

      nodejs是基于google的v8引擎 ,而v8对单个node实例做了内存限制,在32位的系统中默认限制为512m,在64位的系统中则是1g。在游览器端,javascript有1G的内存肯定够了,但在web服务器端,1G就可能不够。以1G为例,每个连接都要占用100M的内存,这样服务最多只能建立10个连接,这显然是不行的。

     据说nodeje为我们提供了一个执行参数用来改变这一个限制,执行语句:    

node test.js –max-old-space-size=1000 

     但这样仍然是有限制的,32位是1g,64位为1.7g。

     

     解决方案:

    1. 开始更多nodejs进程

    2. 限制连接数

  3. 使用buffer。比如:http://zheye.org/asks/4da05d30fd503c24f9000001

 

    二.GC(垃圾回收) 

      和java一样,nodejs的V8引擎是有系统进行垃圾回收的,而这是程序员所无法控制的,程序员只能标志这个对象不再使用(obj=null),使得下次gc回收该对象的内存。更加可怕地是,v8在进行gc时,nodejs程序会暂停运行,这时向该程序发起的请求都会被忽略掉,造成服务不能访问。

    解决方案:

     1. 写程序时尽量复用对象,而不是新生成对象。

 

 

posted @ 2011-11-27 21:29 lengyuhong 阅读(...) 评论(...) 编辑 收藏