プロセスの 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

一部の起動スクリプトではこれを読むことができるため、変更は再起動後にのみ適用されます...(systemd-sysctl.serviceDebianには従来のスクリプトがあります)/etc/init.d/procps

要点は、これらのファイルのいずれもすぐに読み取られず、ulimitへの変更が実行中のプロセスには適用されないことです。

このRubyプロセス/アプリケーションの「最大オープンファイル」値をどのように増やすことができますか?

開始された原因を見つけ、そこでulimitを変更してプロセスを再起動します。コマンドラインから起動した場合は、シェルの制限を変更して再起動すると機能します。 init/systemd/whatで実行している場合は、正しい設定を見つける必要があります。

関連情報