2016-02-28 108 views
2

我在nodejs中實現了tcp服務器,它接受來自gps設備的連接並永久監視代碼。代碼不會崩潰,但是在某些時間之後,服務器不接受任何新連接。一旦我重新啓動服務器,它再次正常工作。我不知道什麼是錯的。 OS Ubuntu 14.04。任何幫助表示讚賞。Tcp服務器在一定時間後不接受連接

編輯:

時間之後,服務器不接受連接是6天左右。

net.createServer(function(sock){ 
    sock.on('data',function(data){ 
     //converting data to ascii. 
     //parsing data,doing calculation 
     //fetching user_id from redis.(i will get device id from gps device, there are user_id associated to device ids). 
     //posting to api using rest-client 

    }); 
}); 

編輯2: 是否有任何與虛擬內存的大小。虛擬內存大小約爲940mb。 ?

+0

'特定時間'是什麼?你能用更簡單的代碼示例重現這個問題嗎?你可以發佈嗎?很難找到解決方案,因爲我們知道的比你更少 –

+0

@Matteo增加了代碼和時間信息的輸出行,之後連接正在接受 – user3508612

回答

0

我一直在研究相同類型的系統,所以這個問題對我有些懷念。你的問題是文件描述符:

在Unix和相關的計算機操作系統,文件描述符(FD, 不經常菲爾德斯)是用於 訪問的文件或其他輸入一個抽象的指標(手柄) /輸出資源,如管道或網絡連接。

然後,你需要增加這個文件描述符限制在你的Linux服務器如下:

編輯內核參數/etc/sysctl.conf文件。添加行fs.file-max = [新值]。

vim /etc/sysctl.conf 

fs.file-max = 500000 

應用更改:

sysctl -p 

更改ulimit設置,編輯/etc/security/limits.conf文件並設置硬性和軟性限制。

vi /etc/security/limits.conf 
* soft nofile 90000 
* hard nofile 90000 

應用更改:

reboot 

使用下面的命令現在測試新系統設置:

#ulimit -a 
open files (-n) 90000 

檢查當前打開的文件描述符限制:

# more /proc/sys/fs/file-max 
500000 

tip1:到找出多少文件描述符當前正在使用的

# more /proc/sys/fs/file-nr 

提示2:添加conjob您重新啓動socket服務器(Node.js的應用程序),每星期。 希望它有幫助。

+0

謝謝@hector。沒有任何解決方法,無需重新啓動服務器。 – user3508612

+0

你的意思是更改文件描述符的限制?很不幸的是,不行 – HCarrasko