如何在 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

更新於: 2021-07-29

2K+ 瀏覽量

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告