どのアプリケーション/プロセスがスワップを使用しているかを確認する最善の方法は何ですか?

どのアプリケーション/プロセスがスワップを使用しているかを確認する最善の方法は何ですか?

buff/cache私は 16G の RAM と 8G のスワップ パーティションを持っています。Unity 17.04 を実行しています。私のが11M になり、私のが約 3500 になるという問題が発生しています。swap used以前はスワップ領域をほとんど使用したことがなく、バッファ/キャッシュを監視したこともありません。

メモリリークのあるアプリケーションだと信じていますが、間違っている可能性もあります。

簡単な質問です。アプリケーション/プロセスがスワップを使用しているか、使用していたかを判断する簡単な方法はありますか?

ここに画像の説明を入力してください

答え1

次のコマンドで、特別なプロセスが swap パーティションをどれだけ使用しているかを確認できます。

cat /proc/"PID"/status | grep "^VmSwap"

PID次のコマンドで見つけることができます:

ps -A | grep "Application_name"

ただし、どのプロセスがスワップ パーティションを使用しているかを確認したい場合は、次のスクリプトを使用できます。

#!/bin/bash
for i in /proc/*/status ; do
    vmswap=$(cat $i | grep "^VmSwap")
    echo "$vmswap" | grep -qv ' 0 kB'
    if [ $? == 0 ] && [ "$vmswap" != "" ] ; then
        echo "$i : $vmswap"
    fi
done

次に、スクリプトによって返される PID からアプリケーション名を見つけることができます。

アップデート: このスクリプトを変更して、10 秒ごとにログ ファイルを作成するようにしました (時間は変更できます)。そのファイルでは、このスクリプトを実行した瞬間から現在までの多くのプロセスを確認できます。

#!/bin/bash
counter=1
touch ~/swap_process_usage.log
while true ; do
    echo -e "************************************\nSwap's process in count $counter " >> ~/swap_process_usage.log
    for i in /proc/*/status ; do
        vmswap=$(cat $i | grep "^VmSwap")
        echo "$vmswap" | grep -qv ' 0 kB'
        if [ $? == 0 ] && [ "$vmswap" != "" ] ; then
            pid=$(echo "$i" | tr -d /proc/ | tr -d status)
            proc_name=$(ps -p $pid -o comm=)
            echo "$proc_name : $pid : $vmswap" >> ~/swap_process_usage.log
        fi
    done
    sleep 10s
    counter=$((counter+1))
done

このスクリプトを次のように実行するように設定できます。起動するそのため、毎回ログが作成されます。

関連情報