如何在 Linux 中找出哪些程序正在使用交換空間?
交換空間在 Linux 中很常見,通常在物理記憶體(RAM)滿時使用。交換空間背後的理念是,如果作業系統需要更多記憶體資源並且 RAM 沒有剩餘空間,則會將不活動的頁面移動到交換空間。
還應該注意的是,雖然交換空間肯定可以在短期內幫助 RAM,但它們不應被視為更多 RAM 的替代品。
現在我們對交換空間有了一些瞭解,讓我們討論一下如何在 Linux 中檢測哪些程序正在使用交換空間。
有很多方法可以瞭解正在使用交換空間的程序,最基本的方法是使用 **top** 命令,然後按 **f**,向下滾動到顯示 **SWAP** 的位置,按空格鍵,然後輸入 **q**。
儘管建議使用 shell 指令碼或使用 Linux 實用程式(如 **smem**)。
使用 SMEM
Linux 上的 SMEM 是一種命令列實用程式,用於提供有關 Linux 系統上記憶體使用情況的各種報告。
安裝 SMEM
為了在本地機器上安裝 smem,請按照下面顯示的命令操作:-
**對於 Ubuntu/Fedora**:-
sudo apt-get install smem
**對於 CentOS**:-
yum install smem
語法
smem [options]
當我們執行下面顯示的命令時,我們將獲得不同的程序及其 PID、使用者名稱、命令及其交換記憶體使用情況。
命令
smem
輸出
PID User Command Swap USS PSS RSS 46740 xxxxxxxx /usr/bin/php-cgi 2904 0 2 4 3623 root ssh-agent-1 572 4 4 4 53398 xxxxxxx /usr/bin/php-cgi 2748 4 4 8 53396 immukul /usr/bin/go-cgi 2788 4 4 8 7855 root rpc.rquotad 124 4 6 116 7380 root ssh-agent-1 6e4 4 3 112 34802 root ssh-agent-1 576 4 8 9
我們可以清楚地注意到,上面輸出中提到的程序正在使用交換空間。
另一種獲取正在使用交換空間的程序的方法是編寫 shell 指令碼。
考慮下面顯示的指令碼,它將列印您提供的目錄中任何程序是否正在使用交換空間。
指令碼
SUM=0 OVERALL=0 for DIR in `find /usr/local/ -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 on machine : $OVERALL KB"
輸出
Overall swap used on machine : 26067 KB
廣告