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. 写程序时尽量复用对象,而不是新生成对象。