Ubuntu

程序的 ulimit 值不變

  • March 14, 2017

我們有一個 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 執行它,那麼您可能需要找到正確的配置。

引用自:https://unix.stackexchange.com/questions/351464