如何在 Linux 中查找哪些进程正在使用交换空间?
linuxoperating systemopen source更新于 2026/2/15 0:52:17
交换空间在 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 [选项]
运行以下命令,我们将获得不同的进程及其 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
相关文章
有用资源
linux 参考教程 - 该教程包含有关 linux 的更多信息:https://www.cainiaomax.com/linux/

