特定のユーザーのulimitの使用状況を確認する方法はありますか?起動時に単一のプロセスまたは実行時に単一のシェルのulimitを変更できることはわかっていますが、ユーザーが制限に達したかどうかを「監視」できるようにしたいと考えています。現在の使用率をstatsdに報告するbash
スクリプトを書くことを計画しています。具体的には、以下を追跡します。
ulimit -n
)ulimit -u
)ulimit -i
)私が欲しいのは使用率(0-100)です。
多分これは最初の質問に役立ちます:
特定のユーザーのプロセスID(PID)がわかっている場合は、次のコマンドを使用して各プロセスの制限を取得できます。
cat /proc/<PID>/limits
次のコマンドを使用して、各PIDの開いているファイルの数を取得できます。
ls -1 /proc/<PID>/fd | wc -l
次に、Max open files
の値を2番目のコマンドからのオープンファイル記述子の数と比較して、割合を取得します。
いくつかの不便な方法と標準ツールによって、現在のユーザーの開いているファイル、プロシージャ、および保留中のシグナルの割合を出力します。
paste <(grep 'open files\|processes\|pending signals' /proc/self/limits |
cut -c27-38) \
<(i=`whoami` ; lsof -u $i | tail -n +2 | awk {'print $9'} | wc -l;
ps --no-headers -U $i -u $i u | wc -l ;
ps -u $i -o pid= | xargs printf "/proc/%s/status\n" |
xargs grep -s 'SigPnd' |
sed 's/.*\t//' | paste -sd+ | bc ; ) |
while read a b ; do echo $((${b}00/a))%; done
私のシステムでの出力:
59%
9%
0%
これらの数値が適切であると仮定すると、この答えが示すのは、シェルで実行できるということですが、はるかに優れたシェルメソッドがない限り、そうすべきではないでしょう。むしろ、このQはgcc
またはpython
、etc。を使用する方が適切です。