システムパフォーマンス入門

パフォーマンスに詳しいインフラに憧れて

ユーザ用ツール

サイト用ツール


· 最終更新: 2021/05/19 by kurihara


Linuxのファイルディスクリプタの確認・設定

ファイルディスクリプタとは

ファイルディスクリプタ(file descriptor)とは、プログラムがアクセスするファイルや標準入出力などをOSが識別するために用いる識別子です。

ファイルディスクリプタ枯渇の例

  • Apacheでコネクション数が多く、ファイルディスクリプタが不足する。
  • 1サーバで大量の常時接続コネクションを維持するにはlinuxのfile descriptorの上限がボトルネックになる
  • 枯渇すると、ログに「~Too many open files…」と表示されます。


ユーザが開けるファイルディスクリプタの上限

設定

/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


1プロセスが開けるファイルディスクリプタの上限

プロセスのファイルディスクリプタを確認

# cat /proc/プロセスID/limits
# cat /proc/プロセスID/limits |grep "open files"

今、プロセスが開いているファイル数の確認

# ls /proc/プロセスID/fd | wc -l


システム全体のファイルディスクリプタの上限(fs.file-max)

システム全体の上限は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設定の反映


参考


· 最終更新: 2021/05/19 by kurihara

ページ用ツール