Linuxのファイルディスクリプタ―に関するメモ

投稿者: | 9月 12, 2016

ファイルディスクリプタ―は、ある程度の負荷があるWebサイトを運用すると遭遇する問題です。

エラーログなどに「Too many open files」と記録されて、正常に動作しない状態に遭遇するのがLinuxのファイルディスクリプタ―です。
これに対応しようと思って、googleで検索すると、いろいろ記事が出てくるけど、知りたいことズバリと答えてくれる記事がなかなかヒットしない。

ulimit や /etc/security/limits.conf について案内されているけど、反映されないケースがあって、/etc/init.d/の起動スクリプトにも書けetcなどと。

結論

nginx や mysql などのミドルウェアであれば、それぞれのconfigファイル内で定義することで設定をきかせることが可能。

nginx

worker_rlimit_nofileで設定する。ワーカプロセスが開くファイル数の最大限界値(RLIMIT_NOFILE)を変更します。RLIMIT_NOFILEは、プロセスが開くことができるファイルディスクリプタ―数を指定するものです。

worker_rlimit_nofile 10240;

mysql

open_files_limitで設定する。オペレーティングシステムで mysqld が開くことを許可するファイル数。実際の open_files_limit の値は、システム起動時に指定された値 (ある場合) と、max_connections および table_open_cache の値に基づき、式を使用します。

[mysqld_safe]
open_files_limit = 8192

Linux全体

OS全体のファイルディスクリプタ―数は、「/etc/sysctl.conf」で設定する。

設定されている値の確認
cat /proc/sys/fs/file-nr

設定値
fs.file-max = 1232457

参考

外道父の匠:ulimitが効かない不安を無くす設定

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください