ubuntu swap内存泄漏怎么办
导读:Ubuntu 出现 Swap 占用持续增长的处理步骤 一、先判断是真泄漏还是正常换出 观察整体内存与交换:运行 free -h,关注 available 是否持续下降、Swap 是否被动增长。 查看是否触发 OOM:运行 journalc...
Ubuntu 出现 Swap 占用持续增长的处理步骤
一、先判断是真泄漏还是正常换出
- 观察整体内存与交换:运行
free -h,关注 available 是否持续下降、Swap 是否被动增长。 - 查看是否触发 OOM:运行
journalctl -k | grep -i oom,若出现 “Out of memory: Kill process …”,说明内存压力已触发内核 oom‑killer。 - 观察换入换出:运行
vmstat 1 10,若 si/so(swap in/out)持续不为 0,说明系统正在频繁换页。 - 快速确认是否“内存还有很多但 Swap 很高”:
free -h中 available 充足而 Swap 占用高,常见于“进程把不活跃页换出”或“部分进程占用 Swap 较多”。
二、定位占用 Swap 的进程
- 一键列出占用 Swap 最多的进程(单位 MB):
sudo sh -c 'for i in /proc/[0-9]*; do pid=${ i##*/} ; if [ "$pid" -gt 100 ]; then awk -v pid="$pid" "/Swap:/{ a+=$2} END { if (a> 0) print pid, a/1024 \"M\"} " /proc/"$pid"/smaps 2> /dev/null; fi; done | sort -k2nr | head -n 10' - 实时观察可疑进程:
watch -n 1 "ps aux | grep < PID> "。 - 查看进程详细内存映射与脏页:
pmap -x < PID>,关注 RSS 与 [ anon ] 段是否持续增长。 - 若怀疑内核或驱动:
slabtop -o与cat /proc/meminfo观察 Slab 等内核缓存是否异常增长。 - 辅助工具:用
smem -P < 进程名>按 PSS 聚合更直观;lsof -p < PID>辅助排查文件映射与资源占用关联。
三、应急处理与止损
- 温和方式(优先):重启“问题进程”以释放其占用的 Swap(对无状态服务尤为有效)。
- 快速清理 Swap(会短时增加 I/O):先
sync落盘,再echo 3 | sudo tee /proc/sys/vm/drop_caches清理页缓存,随后执行sudo swapoff -a & & sudo swapon -a。若swapoff报 “Cannot allocate memory”,说明空闲内存不足以回收 Swap,先停占用最高的进程或扩容内存/增加 Swap 后再执行。 - 临时抑制换页倾向(治标不治本):
sudo sysctl -w vm.swappiness=10(范围 0–100,默认多为 60;数值越低越倾向少用 Swap)。 - 应急扩容 Swap(避免立刻 OOM):例如新增 16GB 交换文件:
sudo fallocate -l 16G /swapfile & & sudo chmod 600 /swapfile & & sudo mkswap /swapfile & & sudo swapon /swapfile,并在/etc/fstab加入/swapfile none swap sw 0 0持久化。
四、根因修复与长期优化
- 应用层定位:
- C/C++ 程序用 Valgrind(memcheck)定位泄漏:
valgrind --leak-check=full ./your_app;编译时建议带 -g 便于定位。 - Java/容器等场景注意“堆外内存”(DirectBuffer、MappedByteBuffer、JNI、线程栈、Metaspace)泄漏,结合 JVM 工具与系统级工具(如
pmap/smem)交叉验证。
- C/C++ 程序用 Valgrind(memcheck)定位泄漏:
- 内核与数据库场景:
- 数据库等大内存服务可评估 HugePages 与 Transparent HugePages(THP):必要时关闭 THP 以减少延迟抖动(
echo never > /sys/kernel/mm/transparent_hugepage/enabled与defrag),并按需配置 vm.nr_hugepages。 - 结合监控(如 Prometheus + node_exporter)建立内存与 Swap 的基线告警,持续观察 available、Swap、si/so 的趋势。
- 数据库等大内存服务可评估 HugePages 与 Transparent HugePages(THP):必要时关闭 THP 以减少延迟抖动(
- 重要提示:清理缓存与重启进程只能“止血”,要彻底解决需修复应用或配置的内存问题;在性能敏感型服务上,应合理设置 vm.swappiness、规划 Swap 容量,并谨慎使用/调优 HugePages/THP。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: ubuntu swap内存泄漏怎么办
本文地址: https://pptw.com/jishu/789307.html
