オープンできるファイル制限を変更する
調べるきっかけ
- 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」が怪しい
リミット設定を変更
# vi /etc/security/limits.conf
* hard nofile 10240
* soft nofile 10240
ログインし直して、リミット設定の変更を確認
# ulimit -n
10240
- 上記でビルド中のエラーは発生しなくなりました。
- ちなみにプロジェクトのビルド中に開いたファイル数は3500ぐらいでした。一気にファイルを開いてソースの検査をするようなので、制限値に達するようです。