node.js Error: connect EMFILE 或者 getaddrinfo ENOTFOUND


Error: getaddrinfo ENOTFOUND] code: 'ENOTFOUND', errno: 'ENOTFOUND', syscall: 'getaddrinfo'

Error: connect EMFILE

本人在中心服上向800多個ip上發請求,發兩次就不行了出現如上報錯。

原因是文件句柄不夠用了,修改  ulimit 即可,步驟如下:

1.vim /etc/security/limits.conf

2.添加兩行內容: 
* soft nofile 65536 
* hard nofile 65536

3.退出當前終端,再進  ulimit -a 查看。

雖然顯示對了,經過node.js測試仍報錯,懷疑沒立即生效,指令: grep "Max open files" /proc/39629/limits   顯示還是1024,說明沒生效。

解決辦法:轉自  https://blog.csdn.net/shootyou/article/details/6579139

主要是因為linux在文件句柄的數目上有兩個級別的限制。一個是系統級別的總數限制,一個是針對用戶的限制。

默認情況下每個用戶所能使用的句柄數是1024。一般情況下1024也夠用了,但是在大容量的系統上,特別是會頻繁使用網絡通信和文件IO的系統上,1024很快就被耗光了。所以首先我們要調整這個值。修改方法如下:

1. ulimit -a 查看當前用戶的文件句柄限制
2. 用戶級別的句柄數限制修改。
修改 /etc/security/limits.conf 增加下面的代碼:
用戶名(或者用*表示所有用戶) soft nofile 65535
用戶名 hard nofile 65535
有兩種限制,一種是soft軟限制,在數目超過軟限制的時候系統會給出warning警告,但是達到hard硬限制的時候系統將拒絕或者異常了。
修改之后可能需要重啟shell生效。
3. 系統級別的句柄數限制修改。
sysctl -w fs.file-max 65536
或者
echo "65536" > /proc/sys/fs/file-max
兩者作用是相同的,前者改內核參數,后者直接作用於內核參數在虛擬文件系統(procfs, psuedo file system)上對應的文件而已。
可以用下面的命令查看新的限制
sysctl -a | grep fs.file-max
或者
cat /proc/sys/fs/file-max
修改內核參數
/etc/sysctl.conf
echo "fs.file-max=65536" >> /etc/sysctl.conf
sysctl -p
查看系統總限制 命令:cat /proc/sys/fs/file-max
查看整個系統目前使用的文件句柄數量命令:cat /proc/sys/fs/file-nr
查看某個進程開了哪些句柄 :lsof -p pid
某個進程開了幾個句柄 :lsof -p pid |wc -l
也可以看到某個目錄 /文件被什么進程占用了,顯示已打開該目錄或文件的所有進程信息 :lsof path/filename


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM