CentOS内存占用高时,首先检查是否为系统缓存占用。Linux会主动利用空闲内存缓存文件以提升性能,但这可能导致free命令显示内存"耗尽"。通过执行sync && echo 3 > /proc/sys/vm/drop_caches
可立即释放缓存(1对应页缓存,2对应目录项,3为全部),释放后可用free -h
验证效果。注意此操作不影响运行中的进程,但频繁清理可能降低IO性能,建议仅在内存紧张时使用。
2、排查异常进程
若缓存清理后问题依旧,需定位具体进程。使用top -o %MEM
或ps aux --sort=-%mem | head
按内存排序进程,重点关注RSS(实际物理内存占用)高的应用。对于Java等易泄漏的程序,可通过jmap -histo:live [PID]
分析对象分布;C/C++程序可用valgrind --leak-check=full
检测内存泄漏。若发现kswapd进程CPU占用过高,可能是内存回收压力大,需调整/proc/sys/vm/inactive_clean_percent
值加速回收。
3、优化系统配置
长期优化需调整内核参数:①降低vm.swappiness
(默认60)至10-30,减少交换空间使用;②增大vm.vfs_cache_pressure
让内核优先回收inode缓存;③对于数据库等应用,限制其缓冲池大小(如MySQL的innodb_buffer_pool_size
)。CentOS 6等老版本建议升级内核,新版内核的内存管理更高效。关闭非必要服务(如systemctl stop [service]
)也能释放内存。
4、扩展Swap空间
当物理内存不足时,合理配置Swap可避免OOM(内存溢出)杀死进程。通过dd if=/dev/zero of=/swapfile bs=1G count=4
创建交换文件,再执行mkswap /swapfile && swapon /swapfile
激活。建议Swap大小为物理内存的1-2倍(内存≤4GB时)或内存+2GB(内存>4GB时)。同时调整vm.swappiness
控制交换频率,SSD硬盘更适合用作Swap。
5、监控与预防
部署vmstat 1
或htop
实时监控内存波动,关注si/so(交换频率)和buff/cache变化。对于生产环境,可配置日志监控/var/log/messages
中的OOM记录,分析被杀进程的内存占用模式。长期高负载场景建议:①升级物理内存;②使用NUMA架构优化内存本地化访问;③对关键服务设置cgroup内存限制。定期维护脚本(如每周清理缓存)也能减少突发性内存压力。创新科技网 WwW.ZqCyZG.com