GNU/Linux >> Linux の 問題 >  >> Linux

Linux でスワップ領域を使用しているプロセスを見つける方法は?

私が見つけた最高のスクリプトはこのページにあります:http://northernmost.org/blog/find-out-what-is-using-your-swap/

これはスクリプトの 1 つの変形であり、root は必要ありません:

#!/bin/bash 
# Get current swap usage for all running processes
# Erik Ljungstrom 27/05/2011
# Modified by Mikko Rantalainen 2012-08-09
# Pipe the output to "sort -nk3" to get sorted output
# Modified by Marc Methot 2014-09-18
# removed the need for sudo

SUM=0
OVERALL=0
for DIR in `find /proc/ -maxdepth 1 -type d -regex "^/proc/[0-9]+"`
do
    PID=`echo $DIR | cut -d / -f 3`
    PROGNAME=`ps -p $PID -o comm --no-headers`
    for SWAP in `grep VmSwap $DIR/status 2>/dev/null | awk '{ print $2 }'`
    do
        let SUM=$SUM+$SWAP
    done
    if (( $SUM > 0 )); then
        echo "PID=$PID swapped $SUM KB ($PROGNAME)"
    fi
    let OVERALL=$OVERALL+$SUM
    SUM=0
done
echo "Overall swap used: $OVERALL KB"

smem を使用

smem -s swap -r

これは、インストール方法と使用方法の両方を説明するリンクです:http://www.cyberciti.biz/faq/linux-which-process-is-using-swap/


これはスクリプトの別の変形ですが、より読みやすい出力を提供することを目的としています (正確な結果を得るには、これを root として実行する必要があります):

#!/bin/bash

    # find-out-what-is-using-your-swap.sh
    # -- Get current swap usage for all running processes
    # --
    # -- rev.0.3, 2012-09-03, Jan Smid          - alignment and intendation, sorting
    # -- rev.0.2, 2012-08-09, Mikko Rantalainen - pipe the output to "sort -nk3" to get sorted output
    # -- rev.0.1, 2011-05-27, Erik Ljungstrom   - initial version


SCRIPT_NAME=`basename $0`;
SORT="kb";                 # {pid|kB|name} as first parameter, [default: kb]
[ "$1" != "" ] && { SORT="$1"; }

[ ! -x `which mktemp` ] && { echo "ERROR: mktemp is not available!"; exit; }
MKTEMP=`which mktemp`;
TMP=`${MKTEMP} -d`;
[ ! -d "${TMP}" ] && { echo "ERROR: unable to create temp dir!"; exit; }

>${TMP}/${SCRIPT_NAME}.pid;
>${TMP}/${SCRIPT_NAME}.kb;
>${TMP}/${SCRIPT_NAME}.name;

SUM=0;
OVERALL=0;
    echo "${OVERALL}" > ${TMP}/${SCRIPT_NAME}.overal;

for DIR in `find /proc/ -maxdepth 1 -type d -regex "^/proc/[0-9]+"`;
do
    PID=`echo $DIR | cut -d / -f 3`
    PROGNAME=`ps -p $PID -o comm --no-headers`

    for SWAP in `grep Swap $DIR/smaps 2>/dev/null| awk '{ print $2 }'`
    do
        let SUM=$SUM+$SWAP
    done

    if (( $SUM > 0 ));
    then
        echo -n ".";
        echo -e "${PID}\t${SUM}\t${PROGNAME}" >> ${TMP}/${SCRIPT_NAME}.pid;
        echo -e "${SUM}\t${PID}\t${PROGNAME}" >> ${TMP}/${SCRIPT_NAME}.kb;
        echo -e "${PROGNAME}\t${SUM}\t${PID}" >> ${TMP}/${SCRIPT_NAME}.name;
    fi
    let OVERALL=$OVERALL+$SUM
    SUM=0
done
echo "${OVERALL}" > ${TMP}/${SCRIPT_NAME}.overal;
echo;
echo "Overall swap used: ${OVERALL} kB";
echo "========================================";
case "${SORT}" in
    name )
        echo -e "name\tkB\tpid";
        echo "========================================";
        cat ${TMP}/${SCRIPT_NAME}.name|sort -r;
        ;;

    kb )
        echo -e "kB\tpid\tname";
        echo "========================================";
        cat ${TMP}/${SCRIPT_NAME}.kb|sort -rh;
        ;;

    pid | * )
        echo -e "pid\tkB\tname";
        echo "========================================";
        cat ${TMP}/${SCRIPT_NAME}.pid|sort -rh;
        ;;
esac
rm -fR "${TMP}/";

top を実行 次に O を押します p 入る .プロセスはスワップの使用状況でソートされるようになりました。

コメントで指摘されているように、私の元の回答では問題に対する正確な回答が得られないため、ここに更新があります。 htop FAQ から:

<ブロック引用>

プロセスの使用済みスワップ領域の正確なサイズを取得することはできません。 Top は SWAP =VIRT - RES を作成することでこの情報を偽造しますが、ビデオ メモリなどの他の要素も VIRT でカウントされるため、これは適切なメトリックではありません (たとえば、top は X プロセスが 81M のスワップを使用していると言いますが、システムも報告します)。全体として 2Mof スワップのみを使用しています. したがって、この情報を取得する信頼できる方法がわからないため、同様の Swap 列を htop に追加しません (実際には、正確な数を取得することはできないと思います.共有ページの数)


Linux
  1. Linux –システムに搭載されているハードディスクを確認する方法は?

  2. Linuxで使用しているシェルを見つける方法

  3. Linux の孤立したプロセスを見つける

  1. Linux –シリアルポートを使用してプロセスを見つける方法は?

  2. Linux でスワップ領域を追加する方法

  3. Linux:どのプロセスがどのコアに固定されているかを知る方法は?

  1. Linux でスワップ領域を増やす方法

  2. Linuxでファイルを使用しているプロセスを見つける方法は?

  3. / パーティションのすべてのスペースを使い果たしているものを見つけるにはどうすればよいですか?