GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara mengetahui proses mana yang menggunakan ruang swap di Linux?

Skrip terbaik yang saya temukan ada di halaman ini:http://northernmost.org/blog/find-out-what-is-using-your-swap/

Ini salah satu varian skrip dan tidak perlu 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"

Gunakan smem

smem -s swap -r

Berikut ini tautan yang memberi tahu Anda cara menginstal dan cara menggunakannya:http://www.cyberciti.biz/faq/linux-which-process-is-using-swap/


Ini varian lain dari skrip, tetapi dimaksudkan untuk memberikan hasil yang lebih mudah dibaca (Anda perlu menjalankan ini sebagai root untuk mendapatkan hasil yang tepat):

#!/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}/";

Jalankan atas lalu tekan O p Masuk . Sekarang proses harus diurutkan berdasarkan penggunaan swap mereka.

Ini pembaruan karena jawaban asli saya tidak memberikan jawaban pasti untuk masalah seperti yang ditunjukkan di komentar. Dari FAQ htop:

Tidak mungkin untuk mendapatkan ukuran yang tepat dari ruang swap yang digunakan dari suatu proses. Top memalsukan informasi ini dengan membuat SWAP =VIRT - RES, tetapi itu bukan metrik yang baik, karena hal-hal lain seperti memori video juga menghitung VIRT (misalnya:top mengatakan proses X saya menggunakan swap 81M, tetapi juga melaporkan sistem saya secara keseluruhan hanya menggunakan swap 2Mof. Oleh karena itu, saya tidak akan menambahkan kolom Swap serupa ke htopkarena saya tidak tahu cara yang dapat diandalkan untuk mendapatkan informasi ini (sebenarnya, menurut saya tidak mungkin untuk mendapatkan angka pastinya, karena dari halaman yang dibagikan).


Linux
  1. Cara Mengetahui Direktori dan File Teratas (Ruang Disk) di Linux

  2. Linux – Bagaimana Cara Mengetahui Hard Disk Apa yang Ada di Sistem?

  3. Cara Menemukan Shell Yang Anda Gunakan di Linux

  1. Temukan Proses Orphan Linux

  2. Cara menambah ruang swap di Linux

  3. Bagaimana cara mengetahui antarmuka mana yang saya gunakan untuk terhubung ke internet?

  1. Bagaimana Mengetahui Distribusi Linux Yang Anda Gunakan?

  2. Linux:bagaimana cara mengetahui proses mana yang disematkan ke inti mana?

  3. Bagaimana cara menemukan file mana yang menghabiskan 80% ruang di server web Linux?