Linux SWAP 占用情况排查 - smem
最近发现 ArchLinux 的 32G 内存经常出现 OOM,分配 SWAP 后分多少就占多少,很奇怪,就想办法排查一下,找到了 smem.
smem 是一款能提供大量 Linux 系统内存使用报告的工具。与现有工具不同,smem 可以报告比例集大小 (PSS),这对虚拟内存系统中库和应用程序使用的内存量来说更有意义。 -- smem memory reporting tool
安装
# Debian/Ubuntu sudo apt install smem # CentOS/RHEL sudo yum install smem # Archlinux yay -S smem查看 SWAP 占用排行
$ smem -r -k -s swap PID User Command Swap USS PSS RSS 1634 songtianlun /usr/bin/remmina -i 1.9G 623.9M 625.1M 634.9M 1260193 songtianlun /usr/bin/pycharm-profession 749.4M 2.0G 2.0G 2.0G 1166595 songtianlun /opt/goland/bin/goland 417.3M 2.8G 2.8G 2.8G 1665 songtianlun /usr/lib/firefox/firefox -- 244.0M 610.8M 637.9M 801.6M 1327 songtianlun /usr/bin/plasmashell --no-r 181.6M 293.4M 300.9M 353.5M 62871 songtianlun /usr/lib/firefox/firefox -c 136.3M 121.5M 122.6M 166.4M 2636 songtianlun /usr/lib/electron32/electro 131.4M 410.7M 417.2M 433. ...其他用法
使用
pmap查看特定进程的内存映射如果您已经知道某个特定进程的 PID,并想查看它的具体内存使用情况,包括 Swap 使用量,可以使用
pmap: 使用pmap命令:pmap -x <PID>其中
<PID>是进程的 ID。输出将显示该进程的内存映射情况,包括每个映射的大小。使用
grep直接查看/proc/[pid]/smaps您还可以通过查看
/proc文件系统中的信息来获取某个特定进程的详细信息: 获取进程的 PID,假设为1234,使用:grep -i swap /proc/1234/smaps这将输出关于这个进程的 Swap 使用情况。
总结
通过使用 smem 和 pmap 等工具,可以快速确认哪些进程正在使用 Swap,从而帮助深入分析和排查问题。