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).