如何在 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+ 浏览量

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告