目次
ファイルディスクリプタ(file descriptor)とは、プログラムがアクセスするファイルや標準入出力などをOSが識別するために用いる識別子です。
/etc/security/limits.conf
user1 soft nofile 102400 user1 soft hard 102400
# *で、すべてのユーザが対象 * soft nofile 102400 * soft hard 102400
$ ulimit -n 102400
$ ulimit -a |grep file core file size (blocks, -c) 0 file size (blocks, -f) unlimited open files (-n) 102400 file locks (-x) unlimited
# cat /proc/プロセスID/limits # cat /proc/プロセスID/limits |grep "open files"
今、プロセスが開いているファイル数の確認
# ls /proc/プロセスID/fd | wc -l
PAM認証を介さないdaemon系のプロセスについては、systemdで設定を行います。
LimitNOFILE=60000
を追加します。
/lib/systemd/system/nginx.service
[Unit] Description=A high performance web server and a reverse proxy server Documentation=man:nginx(8) After=network.target nss-lookup.target [Service] Type=forking PIDFile=/run/nginx.pid ExecStartPre=/usr/sbin/nginx -t -q -g 'daemon on; master_process on;' ExecStart=/usr/sbin/nginx -g 'daemon on; master_process on;' ExecReload=/usr/sbin/nginx -g 'daemon on; master_process on;' -s reload ExecStop=-/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid TimeoutStopSec=5 KillMode=mixed LimitNOFILE=60000 [Install] WantedBy=multi-user.target
$ cat /proc/<PID>/limits |grep "Max open files" Max open files 60000 524288
サービスごとの個別設定ではなくsystemdを利用するサービス全てでデフォルト値を底上げするパターンです。
変更前
#DefaultLimitNOFILE=1024:524288
変更後
DefaultLimitNOFILE=60000:524288
システム全体の上限はkernelパラメータのfs.file-max
$ cat /proc/sys/fs/file-max 1636820
$ cat /proc/sys/fs/file-nr 1504 0 1636820
次の3つの情報を確認することが可能です。
1. 今までにオープンしたことのあるファイルの最大数
(割り当て済みのファイルハンドル数 )
2. 現在オープンしているファイルの総数
(使用中のファイルハンドル数 )
3. オープン可能なファイル数の上限
(/proc/sys/fs/file-max と同じ値)
/etc/sysctl.conf
fs.file-max = 25172
# /sbin/sysctl -p
設定の反映
一般向けサイト
ITエンジニア向けサイト
英語サイト
Portfolio
Copyright (c) 2024 システムパフォーマンス入門 All Rights Reserved.