Ubuntu 清理内存碎片的实用方法
一、先判断是否存在内存碎片
cat /proc/buddyinfocompact_zone、try_to_compact_pages 等函数,这是碎片引起分配大块连续内存时的典型表现。二、立即可用的缓解动作
echo 1 | sudo tee /proc/sys/vm/compact_memorysudo sync && echo 3 | sudo tee /proc/sys/vm/drop_caches三、降低碎片率的系统参数调优
sysctl -w vm.min_free_kbytes=$(($(grep MemTotal /proc/meminfo | awk '{print $2}') * 2 / 100))sysctl -w vm.watermark_scale_factor=<value>(可按需逐步调大,观察效果)sudo sysctl vm.swappiness=10/etc/sysctl.conf 或 /etc/sysctl.d/*.conf,执行 sudo sysctl -p 生效。四、应用层与运维建议
free -h、htop、/proc/buddyinfo,结合业务指标定位是否因碎片导致 延迟升高/分配失败。五、常见误区与说明
drop_caches 仅清理可回收的缓存(PageCache、dentries、inodes),不会释放应用程序正在使用的内存,也不等同于传统“磁盘碎片整理”;频繁使用会影响文件系统性能。compact_memory 频繁触发且影响明显,优先从“预留更高水位 + 异步规整 + 业务低峰期维护窗口”的组合入手,必要时再考虑重启服务或主机。