オープンできるファイル制限を変更する

調べるきっかけ

  • Zend Studio for Eclipse 6.1でワークスペースをビルドしていると、エラーダイアログが表示されていました。
RSEG1058
Connect to <hostname> was cancelled
  • 状況は、client=windows、ソースはlinux(CentOS)内にあり、RSE(Remote System Explorerプラグイン)を使用し、SSH(sftp)経由で参照。

怪しそうなログを確認

# cat /var/log/secure
Jun  2 11:52:00 <host> last message repeated 74 times
Jun  2 11:52:00 <host> sshd[26706]: Disconnecting: Could not create socket pairs: Too many open files
Jun  2 11:52:00 <host> sshd[26704]: pam_unix(sshd:session): session closed for user <user>
Jun  2 11:52:00 <host> sshd[17740]: Accepted password for <user> from 192.168.40.102 port 2401 ssh2
Jun  2 11:52:00 <host> sshd[17740]: pam_unix(sshd:session): session opened for user <user> by (uid=0)
Jun  2 11:52:00 <host> sshd[17742]: subsystem request for sftp
  • 「Disconnecting: Could not create socket pairs: Too many open files」というのが怪しいです。

プロセスが開いているファイル数を確認する

  • Zend Studioでワークスペースをビルド中に、接続しているsshdプロセスが開いているファイル数をチェック。
# ls /proc/19697/fd | wc -w
489
# ls /proc/19697/fd | wc -w
502
  • 原始的に繰り返して監視してみると、どうやら1020~ぐらいになると「Too many open files」になって切断してしまう(プロセスが落ちる?)ようです。

リミットを確認

# 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) 4096
max locked memory       (kbytes, -l) 32
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 4096
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

  • 「open files (-n) 1024」が怪しい

リミット設定を変更

  • 2行追記。
# vi /etc/security/limits.conf

*                hard   nofile           10240
*                soft   nofile           10240

ログインし直して、リミット設定の変更を確認

# ulimit -n
10240
  • 上記でビルド中のエラーは発生しなくなりました。
  • ちなみにプロジェクトのビルド中に開いたファイル数は3500ぐらいでした。一気にファイルを開いてソースの検査をするようなので、制限値に達するようです。

facebook slideshare rubygems github qiita