如何找出 Linux 中哪些进程正在使用交换空间?
交换空间在 Linux 中很常见,通常在物理量memory(RAM)已满时使用。交换空间背后的想法是,如果操作系统需要更多的内存资源而 RAM 没有任何剩余空间,那么不活动的页面将被移动到交换空间。
还应该注意的是,虽然交换空间肯定会在短期内帮助 RAM,但不应将它们视为更多 RAM 的替代品。
现在我们对交换空间有了一些了解,让我们来谈谈如何检测 Linux 中哪些进程正在使用交换空间。
有很多方法可以了解正在使用交换空间的进程,最基本的方法是使用top命令,然后按f,,向下滚动到显示SWAP press space 的位置,然后键入q。
虽然建议使用 shell 脚本或使用 Linux 实用程序,如smem。
使用 SME
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 RSS46740 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
以上是 如何找出 Linux 中哪些进程正在使用交换空间? 的全部内容, 来源链接: utcz.com/z/341431.html