一、清理现有缓存(手动/自动)
清理缓存是快速减少系统缓存占用的直接方法,适用于临时释放内存或解决缓存过多导致的性能问题。
sync && echo 1 > /proc/sys/vm/drop_caches(sync用于将未写入磁盘的数据同步到磁盘,避免数据丢失)。sync && echo 2 > /proc/sys/vm/drop_caches。sync && echo 3 > /proc/sys/vm/drop_caches。/usr/local/bin/cleanup_cache.sh脚本,内容为#!/bin/bash; sync && echo 3 > /proc/sys/vm/drop_caches; echo "$(date) 缓存清理完成" >> /var/log/cache_clean.log,然后执行chmod +x /usr/local/bin/cleanup_cache.sh并添加cron任务0 0 1 * * /usr/local/bin/cleanup_cache.sh。二、调整内核参数(优化缓存行为)
通过修改内核参数,可从根源上控制缓存的生成和使用,适合长期优化。
swappiness值:swappiness控制内核使用交换分区(Swap)的倾向,默认值60(较高),降低该值可减少Swap使用,优先使用物理内存。sudo sysctl vm.swappiness=10(10表示更倾向于使用物理内存);/etc/sysctl.conf,添加vm.swappiness=10,然后执行sudo sysctl -p使更改生效。vfs_cache_pressure值:vfs_cache_pressure控制内核回收目录项和inode缓存的倾向,默认值100(较高),增大该值可加快缓存回收。sudo sysctl vm.vfs_cache_pressure=50;/etc/sysctl.conf,添加vm.vfs_cache_pressure=50,然后执行sudo sysctl -p。/etc/sysctl.conf,添加:vm.dirty_ratio=10(脏页占总内存10%时触发回写)、vm.dirty_background_ratio=5(后台回写脏页的阈值)、vm.dirty_writeback_centisecs=3000(每30秒检查一次脏页);sudo sysctl -p。三、清理包管理器缓存
包管理器(如YUM、DNF)会缓存下载的软件包,占用磁盘空间和部分内存,定期清理可释放资源。
sudo yum clean all(清除所有YUM缓存,包括下载的软件包和元数据)。sudo dnf clean all。四、禁用或限制不必要的缓存服务
部分缓存服务(如dnsmasq、nscd)可能占用大量内存,若无需使用可禁用或限制其缓存大小。
dnsmasq(DNS缓存服务),命令:sudo systemctl stop dnsmasq && sudo systemctl disable dnsmasq。dnsmasq的--cache-size参数),具体配置取决于服务类型。五、优化应用程序缓存配置
应用程序(如数据库、Web服务器)自身的缓存可能占用大量内存,调整其缓存设置可减少系统缓存压力。
innodb_buffer_pool_size(InnoDB缓冲池大小)为物理内存的70%左右(如innodb_buffer_pool_size=8G,适用于8GB内存服务器),避免缓冲池过大占用过多内存;若使用Redis作为缓存,可调整maxmemory参数限制其最大内存使用。proxy_cache_path的max_size参数限制代理缓存大小(如max_size=1G),避免缓存过多文件。六、监控缓存使用情况
定期监控缓存使用情况,可及时发现异常并采取措施。
free命令:查看内存使用概况(包括buff/cache和available内存),命令:free -h。top/htop命令:实时查看进程内存占用,按M键按内存排序,找出占用内存高的进程。vmstat命令:查看系统内存、缓存、Swap等统计信息,命令:vmstat 1 5(每1秒刷新一次,共5次)。