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