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
次のように、コマンドを引用符で囲みます。
watch 'lsof -u Apache | awk '\''{print $2}'\'' | sort | uniq -c | sort -n'
または、コマンドをtest.shなどのシェルスクリプトに入れてから、watchを使用することもできます。
chmod +x test.sh
watch ./test.sh
このコマンドは、Apacheが開いたファイルの数を示します。
ps -A x |grep Apache | awk '{print $1}' | xargs -I '{}' ls /proc/{}/fd | wc -l
プロセスのfdディレクトリにアクセスするには、rootとして実行する必要がある場合があります。これは、ファイル記述子を閉じていないWebアプリケーションがあるようです。私はその分野に力を注いでいきます。