标签归档:swap

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>

其中 `

` 是进程的 ID。输出将显示该进程的内存映射情况,包括每个映射的大小。 ### 使用 `grep` 直接查看 `/proc/[pid]/smaps` 您还可以通过查看 `/proc` 文件系统中的信息来获取某个特定进程的详细信息: 获取进程的 PID,假设为 `1234`,使用: “` grep -i swap /proc/1234/smaps “` 这将输出关于这个进程的 Swap 使用情况。

总结

通过使用 smempmap 等工具,可以快速确认哪些进程正在使用 Swap,从而帮助深入分析和排查问题。

References

Linux 禁用 SWAP

在服务器和容器平台建议关闭 SWAP,避免内存交换影响服务器性能,甚至引发数据丢失。

一、不重启电脑,禁用启用swap,立刻生效

# 禁用命令

sudo swapoff -a

# 启用命令

sudo swapon -a

# 查看交换分区的状态
sudo free -m

二、重新启动电脑,永久禁用Swap

把根目录文件系统设为可读写

sudo mount -n -o remount,rw /

用vi修改/etc/fstab文件,在swap分区这行前加 # 禁用掉,保存退出

vi /etc/fstab

i      #进入insert 插入模式

:wq   #保存退出
mount -a
# 使 fstab 文件生效

重新启动电脑,使用free -m查看分区状态

reboot

sudo free -m

参考文献