2016-01-27 103 views
2

我使用節點v4.2.1與socket.io(我甚至測試過websocket/ws得到「更好」的結果,但仍然不夠)。目前幾乎沒有打開的連接(hundreads),內存的使用百分比是38%(我在AWS t2.small Ubuntu 14.04.2 LTS(GNU/Linux 3.13.0-48-generic x86_64)上運行) 。Websocket nodejs內存泄漏

服務器代碼(只是用於測試)embarrising簡單:

... declaration ... 
io.on('connection', function(socket){ 
    socket.send("hi"); 
}); 

至於客戶端代碼來講,我使用相應的socket.io版本。 套接字如何佔用內存中的所有空間?

而且,我在下面的這篇文章:

http://www.jayway.com/2015/04/13/600k-concurrent-websocket-connections-on-aws-using-node-js/

和我運行--expose-GC標誌的服務器,但似乎並沒有工作(每30秒我強制垃圾收集global.gc),有什麼猜測?

回答

0

nodejs GC大多是懶惰的,在進入內存之前一直在吃它,直到它達到1.4Gb的極限。在重載應用程序中,看到節點進程高達〜1.4Gb,然後回退到200Mb的模式是正常的。

GC是懶惰的,因爲它是同步的(阻止循環,停止整個過程,壞東西...)。

這是可配置的*與--max-old-space-size這裏與800Mb。

node --max-old-space-size=800 app.js 

爲了減少(或增加)此限制。

  • --max-old-space-size實際配置節點的最大內存空間,默認情況下是1400左右,而不是說每個GC。但是當舊的太空尺寸達到極限時,它會觸發完整的GC。