清理系统缓存(快速释放可用内存)
CentOS会利用空闲内存作为页面缓存(Page Cache)、目录项缓存(dentry)和inode缓存(inode cache),提升文件读写性能。当需要回收内存时,可通过以下命令清理缓存:
sync命令将未写入磁盘的缓存数据强制写入,避免数据丢失;echo 3 > /proc/sys/vm/drop_caches(同时清理页面缓存、目录项缓存、inode缓存);echo 2 > /proc/sys/vm/drop_caches(不影响页面缓存,适合频繁访问文件的场景);echo 1 > /proc/sys/vm/drop_caches(保留目录项和inode缓存,适合需要快速读取文件的场景)。终止高内存占用进程(精准释放内存)
若某进程长期占用大量内存(如内存泄漏的应用),可通过以下步骤终止:
ps aux --sort=-%mem | head -n 10(按内存使用率降序排列,显示前10个进程);kill -9 <PID>(替换<PID>为进程的实际ID,强制终止进程)。systemd、sshd)可能导致系统崩溃,需确认进程用途后再操作。调整Swappiness参数(减少交换空间使用)
swappiness参数(范围0-100)控制系统使用交换空间(Swap)的倾向,默认值通常为60(内存使用率达40%时开始使用Swap)。降低该值可让系统优先使用物理内存,减少Swap占用,间接回收内存:
sudo sysctl vm.swappiness=10(设置为10,表示内存使用率达90%时才使用Swap);vm.swappiness=10添加到/etc/sysctl.conf文件中,执行sudo sysctl -p使配置生效。重启占用内存的服务(释放服务内存)
部分服务(如数据库、Web服务器、缓存服务)可能因配置不当或内存泄漏占用大量内存。重启服务可强制释放其占用的内存:
systemctl status <service_name>(如httpd、mysqld、tomcat);sudo systemctl restart <service_name>(重启指定服务);sudo systemctl stop <service_name>(如不需要图形界面,可停止gdm或lightdm服务)。优化内核与内存管理策略
通过调整内核参数,可优化内存分配和回收行为:
/etc/sysctl.conf中添加vm.vfs_cache_pressure=50(默认值通常为100,降低该值可减少内核回收目录项和inode缓存的频率,但会增加内存占用;设置为50可平衡性能与内存使用),执行sudo sysctl -p生效;my.cnf)中的innodb_buffer_pool_size参数,限制其内存使用量(如设置为物理内存的50%-70%);对于Java应用,可通过-Xmx(最大堆内存)和-Xms(初始堆内存)参数限制内存。使用内存监控工具(实时掌握内存状态)
通过工具实时监控内存使用情况,可快速定位内存瓶颈:
M键按内存排序);top,支持颜色显示和鼠标操作(需安装:sudo yum install htop);free -h以人类可读格式显示);vmstat 1每秒刷新一次,显示内存、交换空间、IO等指标)。自动定时清理内存(长期维护)
通过crontab设置定时任务,定期清理缓存(避免缓存占用过高):
/root/clean_cache.sh):#!/bin/bash
echo "$(date): 开始清理缓存" >> /var/log/clean_cache.log
sync && echo 3 > /proc/sys/vm/drop_caches
echo "$(date): 缓存清理完成" >> /var/log/clean_cache.log
chmod +x /root/clean_cache.sh;crontab -e,添加*/30 * * * * /root/clean_cache.sh(每30分钟清理一次,可根据需求调整频率,如每天凌晨0点清理:00 00 * * * /root/clean_cache.sh);systemctl restart crond(确保定时任务生效)。增加物理内存(根本解决内存不足)
若系统频繁出现内存不足(如free -h显示可用内存接近0,且Swap使用率过高),增加物理内存是最有效的解决方案。可根据应用需求选择合适的内存容量(如数据库服务器建议配置大内存),从根本上提升系统内存承载能力。