現在のプロセス数については、 getrlimit
を使用できます ファイル記述子の制限を取得するには、0 からその制限までのすべての整数を繰り返し、fcntl
を呼び出してみてください F_GETFD
で 指図。実際に開いているファイル記述子でのみ成功し、それらを数えることができます。
編集: 私は今、それを行うためのより良い方法を持っています。 rlimit
を取得した後 、 struct pollfd
の大きな配列を作成します (可能であれば制限と同じ大きさ。それ以外の場合は、複数の実行/呼び出しに分割できます)範囲内の各 fd と events
メンバーを 0 に設定します。poll
を呼び出します。 タイムアウトが 0 のアレイで、POLLNVAL
を探します。 revents
のフラグ メンバーごとに。これにより、fd ごとに 1 つの syscall ではなく、1 つの syscall で潜在的に巨大な fd のセットのどれが無効であるかがわかります。
/proc/sys/fs/file-nr
を読むことができます 割り当てられたファイル システム ハンドルと空きファイル システム ハンドルの合計数と、許可されている最大数を確認します。
[[email protected] proc]# cat /proc/sys/fs/file-nr
3853 908 53182
| | |
| | |
| | max: maximum open file descriptors
| free: total free allocated file descriptors
allocated: total allocated file descriptors since boot
現在使用されている数を計算するには、単に allocated - free
を実行します . ((allocated - free) / max) * 100
を実行して、使用された記述子の割合を計算することもできます
プロセスごとについては、プログラムで実行できる方法がわかりません。
lsof
でそれを行う方法のチュートリアルは次のとおりです。 とにかく:http://linuxshellaccount.blogspot.com/2008/06/finding-number-of-open-file-descriptors.html
Linux を使用しているとのことなので、フォルダー /proc/self/fd/
を開くことができます。 開いているすべてのファイル記述子へのシンボリック リンクを含む必要があります .