Linux 找出哪些进程正在使用交换空间
教程详细信息 | |
---|---|
难度等级 | 中间的 |
Root 权限 | 是的 |
要求 | Linux 终端 |
类别 | 流程管理 |
先决条件 | /proc/ 和 smem |
操作系统兼容性 | Alma • Alpine • Arch • CentOS • Debian • Fedora • Linux • Mint • openSUSE • Pop!_OS • RHEL • Rocky • Stream • SUSE • Ubuntu |
预计阅读时间 | 4 分钟 |
- /proc/meminfo– 此文件报告系统内存使用情况的统计信息。free 使用它来报告系统上可用和已用内存(物理内存和交换内存)的数量以及内核使用的共享内存和缓冲区。您还可以使用free、vmstat 和其他工具来查找相同的信息。
- /proc/${PID}/smaps、、/proc/${PID}/status和/proc/${PID}/stat:使用这些文件来查找有关每个使用其 PID 的进程所使用的内存、页面和交换的信息。
smem – 此命令(python 脚本)报告按比例划分的共享内存的内存使用情况。
查找进程 ID 和交换使用情况
键入以下pidof 命令来查找名为 memcached 的正在运行的程序的进程 ID:
# pidof memcached
或者,使用 pgrep 命令来查找进程 PID,输入:
# pgrep memcached
示例输出(记下 PID 编号 #1):
48440
要查看 memcached (PID # 48440 )使用的交换空间,请输入(编号 #2):
示例输出(编号 #4):
# grep --color VmSwap /proc/48440/status
VmSwap: 900 kB
或者以下 awk 命令(编号 #3):
示例输出(编号 #4):
# awk '/VmSwap/{print $2 " " $3}' /proc/48440/status
图 01:查找 Linux 上的 memcached 进程交换使用情况
列出所有进程交换空间使用情况
键入以下bash for loop命令来查看每个进程的交换空间使用情况:
## bash for loop example to list what processes are using swap space## for file in /proc/*/status do awk '/VmSwap|Name/{printf $2 " " $3}END{ print ""}' $file done
键入以下命令,使用 sort 命令和 less 命令的组合对输出进行排序:
## Get swap space in Linux using bash for loop ## for file in /proc/*/status; do awk '/VmSwap|Name/{printf $2 " " $3}END{ print ""}' $file; done | sort -k 2 -n -r | less
示例输出:
php-cgi 11964 kB php-cgi 11016 kB php-cgi 10392 kB php-cgi 10336 kB php-cgi 9844 kB php-cgi 9780 kB php-cgi 8584 kB php-cgi 7996 kB php-cgi 7960 kB php-cgi 7956 kB php-cgi 7796 kB php-cgi 7540 kB php-cgi 6884 kB squid 6864 kB php-cgi 6640 kB php-cgi 6556 kB php-cgi 5848 kB php-cgi 5744 kB php-cgi 5636 kB php-cgi 5592 kB php-cgi 5488 kB php-cgi 5132 kB php-cgi 4584 kB php-cgi 4508 kB php-cgi 4388 kB lighttpd 4100 kB php-cgi 3984 kB php-cgi 3644 kB php-cgi 3616 kB php-cgi 3604 kB rpc.mountd 3580 kB .... ..
向 smem 问好
smem 命令报告物理内存使用情况,其中考虑了共享内存页面。非共享内存报告为 USS(唯一集大小)。共享内存在共享该内存的进程之间平均分配。非共享内存 (USS) 加上进程的共享内存比例报告为 PSS(比例集大小)。USS 和 PSS 仅包括物理内存使用情况。它们不包括已交换到磁盘的内存。可以按进程、用户、映射或系统范围报告内存。文本模式和图形输出均可用。
默认情况下,您的系统可能未安装smeme命令。因此,请使用Alpine Linux 上的apk 命令、 RHEL 等上的dnf 命令/ yum 命令、Debian、Ubuntu 等上的apt 命令/ apt-get 命令、SUSE/OpenSUSE 上的 zypper 命令、Arch Linux 上的 pacman 命令来安装smeme。
安装
要安装 smem [2 ]在Debian / Ubuntu Linux下输入apt命令或apt-get命令
$ sudo apt-get install smem
:
RHEL / CentOS Linux用户输入以下wget命令(或使用curl下载文件)
$ wget https://www.selenic.com/smem/download/smem-1.4.tar.gz
$ tar xvf smem-1.4.tar.gz
# cp /tmp/smem-1.2/smem /usr/local/bin/
# chmod +x /usr/local/bin/smem
如何使用 smem 命令?
语法是:
# smem [option]
这让 smem 在系统范围 (-w) 输出中包含内核代码和静态分配数据的大小:
# smem -K /path/to/kernel/image/on/disk [option]
物理 RAM 量。这让 smem 在系统范围 (-w) 输出中检测固件/硬件使用的内存量。如果提供,它还将用作百分比所依据的总内存大小。例如:
# smem -R REALMEMSIZE [option]
要查看基本进程信息,请输入:
# smem
示例输出:
PID User Command Swap USS PSS RSS 53369 xxxxxxx /usr/bin/php-cgi 2788 0 0 8 53387 xxxxxxx /usr/bin/php-cgi 2796 0 0 8 36227 xxxxxxx /usr/bin/php-cgi 2324 0 1 8 36232 xxxxxxx /usr/bin/php-cgi 2324 0 1 4 36233 xxxxxxx /usr/bin/php-cgi 2324 0 1 4 46733 xxxxxxx /usr/bin/php-cgi 2904 0 2 8 46739 xxxxxxxx /usr/bin/php-cgi 2904 0 2 4 3623 root ssh-agent 576 4 4 4 53378 xxxxxxx /usr/bin/php-cgi 2788 4 4 8 53396 vivek /usr/bin/php-cgi 2788 4 4 8 7855 root rpc.rquotad 144 4 6 116 7480 root ssh-agent 604 4 7 112 34832 root ssh-agent 576 4 7 92 7334 root /sbin/mingetty /dev/tty1 76 4 19 436 7336 root /sbin/mingetty /dev/tty2 76 4 19 436 7338 root /sbin/mingetty /dev/tty3 76 4 19 436 7340 root /sbin/mingetty /dev/tty4 80 4 19 436 7346 root /sbin/mingetty /dev/tty5 80 4 19 436 7350 root /sbin/mingetty /dev/tty6 76 4 19 436 7332 root /sbin/agetty /dev/ttyS1 192 80 4 22 460 53405 raj /usr/bin/php-cgi 2760 32 32 36 7780 rpcuser rpc.statd 3568 4 41 668
要查看面向库的视图,请输入:
# smem -m
要查看面向用户的视图,请输入:
# smem -u
示例输出:
User Count Swap USS PSS RSS rpcuser 1 3568 4 41 668 vivek 4 7300 44 73 564 xxxxxxxx 3 6120 56 77 524 rpc 1 200 68 104 596 raj 1 468 272 300 892 ntp 1 316 324 367 1036 cdnnginx 1 420 572 603 1216
要查看系统范围的内存使用情况摘要,请传递-w选项:
# smem -w
示例输出:
Area Used Cache Noncache firmware/hardware 0 0 0 kernel image 0 0 0 kernel dynamic memory 5302144 5137920 164224 userspace memory 2692196 240828 2451368 free memory 126228 126228 0
要查看系统视图
# smem -R 8G -K /path/to/vmlinux/on/disk -w
要查看总数和百分比,请输入:
# smem -t -p
示例输出:
PID User Command Swap USS PSS RSS 53369 xxxxxxx /usr/bin/php-cgi 0.04% 0.00% 0.00% 0.00% 53387 xxxxxxx /usr/bin/php-cgi 0.04% 0.00% 0.00% 0.00% 36227 xxxxxxx /usr/bin/php-cgi 0.04% 0.00% 0.00% 0.00% 36232 xxxxxxx /usr/bin/php-cgi 0.04% 0.00% 0.00% 0.00% 36233 xxxxxxx /usr/bin/php-cgi 0.04% 0.00% 0.00% 0.00% 46733 xxxxxxxy /usr/bin/php-cgi 0.05% 0.00% 0.00% 0.00% 46739 xxxxxxxy /usr/bin/php-cgi 0.05% 0.00% 0.00% 0.00% 3623 root ssh-agent 0.01% 0.00% 0.00% 0.00% 53378 xxxxxxx /usr/bin/php-cgi 0.04% 0.00% 0.00% 0.00% 53396 xxxxxxx /usr/bin/php-cgi 0.04% 0.00% 0.00% 0.00% 7855 root rpc.rquotad 0.00% 0.00% 0.00% 0.00% 7480 root ssh-agent 0.01% 0.00% 0.00% 0.00% 34832 root ssh-agent 0.01% 0.00% 0.00% 0.00% 7334 root /sbin/mingetty /dev/tty1 0.00% 0.00% 0.00% 0.00% 7336 root /sbin/mingetty /dev/tty2 0.00% 0.00% 0.00% 0.00% 7338 root /sbin/mingetty /dev/tty3 0.00% 0.00% 0.00% 0.00% ..... .. ... 65304 vivek /usr/bin/php-cgi 0.00% 0.16% 0.27% 0.61% 33931 vivek /usr/bin/php-cgi 0.00% 0.14% 0.28% 0.44% 47933 squid (squid) -f /etc/squid/squid 0.11% 2.69% 2.69% 2.71% 28410 mysql /usr/libexec/mysqld --based 0.01% 3.67% 3.67% 3.68% 48440 memcached memcached -d -p 11211 -u me 0.01% 4.41% 4.41% 4.41% ------------------------------------------------------------------------------- 191 24 5.36% 16.08% 19.43% 27.24%
选项
传递 --help 选项如下来查看所有其他支持的选项:
$ smem --help
-h, --help show this help message and exit -H, --no-header disable header line -c COLUMNS, --columns=COLUMNS columns to show -t, --totals show totals -R REALMEM, --realmem=REALMEM amount of physical RAM -K KERNEL, --kernel=KERNEL path to kernel image -m, --mappings show mappings -u, --users show users -w, --system show whole system -P PROCESSFILTER, --processfilter=PROCESSFILTER process filter regex -M MAPFILTER, --mapfilter=MAPFILTER map filter regex -U USERFILTER, --userfilter=USERFILTER user filter regex -n, --numeric numeric output -s SORT, --sort=SORT field to sort on -r, --reverse reverse sort -p, --percent show percentage -k, --abbreviate show unit suffixes --pie=PIE show pie graph --bar=BAR show bar graph -S SOURCE, --source=SOURCE /proc data source
关于 top 命令的说明
以 root 身份输入 top 命令:
# top
要根据交换页面使用情况对进程进行排序(SWAP = VIRT – RES),请输入大写O(选项),然后输入p(小写p)并按 [Enter] 键:
图 02 top 命令 – 根据交换使用情况对进程进行排序(点击放大)
参考:
- ^来自 htop 常见问题解答页面:
无法获取进程已用交换空间的确切大小。top 命令通过使 SWAP = VIRT – RES 伪造此信息,但这不是一个很好的指标,因为其他内容(例如视频内存)也依赖于 VIRT(例如:top 说我的 X 进程正在使用 81M 的交换空间,但它还报告我的整个系统仅使用了 2M 的交换空间。因此,我不会在 htop 中添加类似的 Swap 列,因为我不知道获取此信息的可靠方法(实际上,由于共享页面,我认为不可能获得确切的数字)。
- ^可以通过访问此页面下载 smem 内存报告工具。
- 使用 man 命令/info 命令或 help 命令查看以下手册页:
$ man top
$ man free
$ man htop
$ man vmstat
$ man smem
$ man 'proc(5)'
- Linux 添加交换文件
- FreeBSD 添加交换文件
- Ubuntu 创建并添加交换文件
- 检查 Linux 中的交换使用大小和利用率
- Linux 找出哪些进程正在使用交换空间
- 将交换空间从一个位置移动到另一个位置
- Solaris 为数据库添加新的交换文件