进程的 ulimit 值不会改变

进程的 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​​ 进程/应用程序的“最大打开文件”值?

答案1

我已更新/etc/security/limits.conf如下

这是由pam_limits.so,因此它仅对通过 PAM 的任何内容生效,例如用户登录。

更新 /etc/sysctl.conf

这可能会被某些启动脚本读取,因此更改仅在重新启动后生效...(我的 Debian 上有systemd-sysctl.service一个旧式脚本。)/etc/init.d/procps

关键是,这些文件都不会立即读取,并且 ulimit 的更改永远不会应用于正在运行的进程。

如何增加此 ruby​​ 进程/应用程序的“最大打开文件”值?

找出启动它的内容,更改那里的 ulimit,然后重新启动该进程。如果您从命令行启动它,更改 shell 上的限制并重新启动它应该可以,如果您从 init/systemd/whatever 运行它,那么您可能需要找到正确的配置。

相关内容