RHEL7/CentOS7上で開発や運用をしていると「Too many open files」「ファイルを開きすぎています」といったエラーが出ることがあります。これはファイルディスクリプタの枯渇が原因であり、その上限値を調整することが対策法となります。
さて調査の結果、ファイルディスクリプタの上限値はulimit -n
により設定できることが分かったのですが――ulimit
による設定は一時的な効力しかなく、reboot
やshutdown
をすると、もともとの値に戻ってしまいます。
[root@localhost ~]# ulimit -n
1024
[root@localhost ~]# ulimit -n 4096
[root@localhost ~]# ulimit -n
4096
[root@localhost ~]# reboot
=== 再起動後 ===
[root@localhost ~]# ulimit -n
1024
shutdown
/reboot
後も設定を維持したいという場合/etc/security/limits.conf
という設定ファイルに以下のような記述をくわえます。
* soft nofile 4096
* hard nofile 4096
/etc/security/limits.conf
には詳細な説明と凡例が掲載されているので、説明は割愛します。
[root@localhost ~]# vi /etc/security/limits.conf
[root@localhost ~]# tail -n 5 /etc/security/limits.conf
* soft nofile 4096
* hard nofile 4096
# End of file
[root@localhost ~]# reboot
=== 再起動後 ===
[root@localhost ~]# ulimit -n
4096