GNU/Linux >> Linux の 問題 >  >> Linux

Linux で特定のプロセスのオープン FD 制限を確認する

lsof -p {PID} を定期的に呼び出すスクリプトを作成してみてください。 指定された pid で。


プロセスを使用した上位 20 個のファイル ハンドルを表示するには:

for x in `ps -eF| awk '{ print $2 }'`;do echo `ls /proc/$x/fd 2> /dev/null | wc -l` $x `cat /proc/$x/cmdline 2> /dev/null`;done | sort -n -r | head -n 20

出力はファイル ハンドル カウント、pid、プロセスのコマンドラインの形式です

出力例

701 1216 /sbin/rsyslogd-n-c5
169 11835 postgres: spaceuser spaceschema [local] idle
164 13621 postgres: spaceuser spaceschema [local] idle
161 13622 postgres: spaceuser spaceschema [local] idle
161 13618 postgres: spaceuser spaceschema [local] idle

/proc/<pid>/fd/ のエントリを数えます .プロセスに適用されるハード制限とソフト制限は、/proc/<pid>/limits にあります。 .


リソース制限を取得するために Linux カーネルが提供する唯一のインターフェースは getrlimit() です と /proc/ pid /limits . getrlimit() 呼び出しプロセスのリソース制限のみを取得できます。 /proc/ pid /limits 同じユーザー ID を持つプロセスのリソース制限を取得でき、RHEL 5.2、RHEL 4.7、Ubuntu 9.04、および 2.6.24 以降のカーネルを使用するディストリビューションで利用できます。

古い Linux システムをサポートする必要がある場合は、プロセス自体で getrlimit() を呼び出す必要があります。 .もちろん、これを行う最も簡単な方法は、プログラムまたはそれが使用するライブラリを変更することです。プログラムを実行している場合は、 LD_PRELOAD を使用できます 独自のコードをプログラムにロードします。これらのいずれも可能でない場合は、gdb を使用してプロセスにアタッチし、プロセス内で呼び出しを実行させることができます。 ptrace() を使用して同じことを自分で行うこともできます プロセスにアタッチしたり、呼び出しをメモリに挿入したりしますが、これを正しく行うのは非常に複雑であり、お勧めできません。

適切な特権があれば、これを行う他の方法として、カーネル メモリを調べたり、カーネル モジュールをロードしたり、カーネルを変更したりする必要がありますが、これらは問題外だと思います。


Linux
  1. Linux プロセス管理用の Python ライブラリ

  2. Linux でプロセスのヒープ サイズを確認する方法

  3. プロセスが実行されているかどうかを確認し、結果に基づいて処理する Linux スクリプト

  1. Linux :最後の 1 秒間のプロセスによる CPU 使用率を確認する

  2. Linux サーバーでポートが開いているか閉じているかを確認しますか?

  3. 特定のプロセスの .pid ファイルを見つける方法

  1. Linux –単一のLinuxプロセスのメモリ使用量を制限しますか?

  2. Linux –特定のポートを使用してプロセスのPidを見つけますか?

  3. CからLinuxでPIDによってプロセスのCPU使用率を計算する方法は?