Ubuntu
程序的 ulimit 值不變
我們有一個 ruby 應用程序,它開始拋出很多“無法創建新套接字:打開的文件太多”錯誤最近我更新了“etc/security/limits.conf”,如下所示
root soft nofile 6553600 root hard nofile 6553600 nobody soft nofile 655360 nobody soft nofile 655360 mysql hard nofile 655360 mysql hard nofile 655360 * soft nofile 81920 * hard nofile 65000 * - nofile 102400
也在
fs.file-max = 90000
/etc/sysctl.conf 中更新ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 62459 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited open files (-n) 10240 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited max user processes (-u) 62459 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited
ulimit -n
10240
但仍然打開 ruby 程序的文件限制是 1024
cat /proc/13765/limits (pid of ruby app) Limit Soft Limit Hard Limit Units Max cpu time unlimited unlimited seconds Max file size unlimited unlimited bytes Max data size unlimited unlimited bytes Max stack size 8388608 unlimited bytes Max core file size 0 unlimited bytes Max resident set unlimited unlimited bytes Max processes 62459 62459 processes Max open files 1024 4096 files Max locked memory 65536 65536 bytes Max address space unlimited unlimited bytes Max file locks unlimited unlimited locks Max pending signals 62459 62459 signals Max msgqueue size 819200 819200 bytes Max nice priority 0 0 Max realtime priority 0 0 Max realtime timeout unlimited unlimited us
ruby 程序正在使用超過 1024 個文件
lsof -p 13765 | wc -l 1070
如何增加此 ruby 程序/應用程序的“最大打開文件”值?
我已經更新
/etc/security/limits.conf
如下這是由pam_limits.so讀取的,因此它僅對通過 PAM 的任何內容生效,例如在使用者登錄中。
更新
/etc/sysctl.conf
這可能會被一些啟動腳本讀取,所以這些更改只有在重新啟動後才會生效……(我的 Debian 上有
systemd-sysctl.service
一個舊式腳本。)/etc/init.d/procps
關鍵是,這些文件都不會立即讀取,並且 ulimits 的更改永遠不會應用於正在執行的程序。
如何增加此 ruby 程序/應用程序的“最大打開文件”值?
找出啟動它的任何東西,在那裡更改 ulimit,然後重新啟動該過程。如果您從命令行啟動它,更改 shell 的限制並重新啟動它應該可以,如果您從 init/systemd/whatever 執行它,那麼您可能需要找到正確的配置。