web-dev-qa-db-ja.com

Linuxで特定のユーザーに対して実行されている各プロセスの開いているファイルの数

LinuxでApacheとJbossを実行していると、サーバーが予期せず停止し、問題が開いているファイルが多すぎることが原因であると表示されることがあります。

開いているファイルの問題を修正するために、nprocおよびnofile/ etc/security/limits.confの上限を設定する可能性があることを知っています。しかし、watchを使用してリアルタイムで監視するなど、より良い出力を得ようとしています。

このコマンドラインを使用すると、PIDごとに開いているファイルの数を確認できます。

lsof -u Apache | awk '{print $2}' | sort | uniq -c | sort -n

出力(列1はユーザーApacheの開いているファイルの数です):

1     PID
1335  13880
1389  13897
1392  13882

Watchコマンドを追加するだけで十分ですが、以下のコードは機能しません。

watch lsof -u Apache | awk '{print $2}' | sort | uniq -c | sort -n
12
tesla-rules

次のように、コマンドを引用符で囲みます。

watch 'lsof -u Apache | awk '\''{print $2}'\'' | sort | uniq -c | sort -n'

または、コマンドをtest.shなどのシェルスクリプトに入れてから、watchを使用することもできます。

chmod +x test.sh
watch ./test.sh
5
reader_1000

このコマンドは、Apacheが開いたファイルの数を示します。

ps -A x |grep Apache | awk '{print $1}' | xargs -I '{}' ls /proc/{}/fd  | wc -l

プロセスのfdディレクトリにアクセスするには、rootとして実行する必要がある場合があります。これは、ファイル記述子を閉じていないWebアプリケーションがあるようです。私はその分野に力を注いでいきます。

3
Gearoid Murphy