Ubuntu内存碎片处理指南
一、先判断是否需要处理
free -h、cat /proc/vmstat,关注 available(可用内存)与 compact_fail/compact_success(碎片整理失败/成功计数)。当可用内存充足但分配大块连续内存失败时,更可能是外部碎片问题。cat /proc/sys/vm/extfrag_threshold(取值 0–1000,默认 500)、cat /proc/sys/vm/compact_unevictable_allowed(1 允许移动被 mlock 的页)。这些指标可帮助你决定是否需要触发主动碎片整理。二、内核层面的主动措施
echo 1 | sudo tee /proc/sys/vm/compact_memory。适合在维护窗口或性能异常时使用。sudo sysctl vm.extfrag_threshold=600(默认 500;数值越高压缩越积极)。sudo sysctl vm.compact_unevictable_allowed=1(默认 1)。三、应用与配置层面的优化
/etc/sysctl.conf:echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf && sudo sysctl -p。/etc/sysctl.conf 并 sysctl -p 生效。四、不要与“清理缓存”混淆
sync && echo 1 | sudo tee /proc/sys/vm/drop_caches(仅 PageCache)sync && echo 2 | sudo tee /proc/sys/vm/drop_caches(仅 dentries 和 inodes)sync && echo 3 | sudo tee /proc/sys/vm/drop_caches(全部三类缓存)五、实用命令清单
free -h、cat /proc/vmstat | egrep "compact_fail|compact_success"、cat /proc/sys/vm/{extfrag_threshold,compact_memory,compact_unevictable_allowed}echo 1 | sudo tee /proc/sys/vm/compact_memorysudo sysctl vm.extfrag_threshold=600、sudo sysctl vm.compact_unevictable_allowed=1、sudo sysctl vm.swappiness=10、sudo sysctl vm.min_free_kbytes=262144(按需调整并持久化)