この投稿では、各プロセスのスワップ使用量を確認する方法を示し、「どのプロセスが最大のスワップ領域を消費するかを知るにはどうすればよいですか?」
すべてのカーネルの場合
スワップの使用状況は「スワップ」と表示されます 」 /proc/[PID]/smaps の列 .これは、各メモリ範囲のスワップされたメモリ サイズを示します。したがって、これらすべての値の合計は、プロセスの合計スワップ使用量を示します。
たとえば、以下の単純なスクリプトは、PID =1027 のプロセスの合計スワップ使用量を計算します:
# echo $((`grep Swap /proc/1027/smaps | awk '{ print $2; }' | tr '\n' '+'`0))
UEK2(2.6.39) 以降のカーネルの場合
特定のプロセスのスワップの使用状況を確認する方が簡単です。「VmSwap」をチェックするだけです 」列 /proc/[PID]/status .これは、スワップ領域の合計使用量を 1 つの値として示します。この列は、カーネルが 2.6.39 より前の /proc/[PID]/status には存在しません。たとえば、スワップの使用量が大きいプロセスからプロセスをソートするには、以下のスクリプトを実行します:
# for file in /proc/*/status ; do awk '/VmSwap|Name/{printf $2 " " $3}END{ print ""}' $file; done | sort -k 2 -n -r | more
この投稿で表示/計算された値は、使用されているスワップ領域の正確なサイズを示すものではなく、おおよその値を示しているだけです。一部 (共有ライブラリなど) は二重にカウントされる可能性があり、他のもの (スワップ キャッシュなど) は実際にはスワップされません。