温馨提示×

centos缓存占用过高

小樊
42
2025-10-04 19:39:24
栏目: 智能运维

一、先确认缓存占用情况

在清理缓存前,需先明确系统内存及缓存的使用状态,避免过度清理影响系统性能。常用命令:

  • free -h:查看内存使用情况(重点关注“buff/cache”列,即缓冲区与缓存的总和);
  • vmstat 1 5:查看虚拟内存统计信息(cache列表示文件缓存占用,“si/so”列表示交换分区读写,若数值过高可能需清理);
  • top/htop:实时查看进程内存占用,定位高内存消耗的进程。

二、清理不同类型的缓存

1. 清理YUM/DNF包管理器缓存

YUM(CentOS 7及以下)/DNF(CentOS 8及以上)会缓存下载的软件包以加快后续安装速度,定期清理可释放磁盘空间。

  • YUM清理sudo yum clean all(清理所有YUM缓存,包括下载的软件包、元数据等);
  • DNF清理sudo dnf clean all(功能同YUM,适用于CentOS 8+)。

2. 清理系统文件缓存

Linux系统会自动利用空闲内存作为页面缓存(Page Cache,用于加速文件读写)、目录项缓存(dentry,用于快速查找目录)和索引节点缓存(inode,用于存储文件元数据)。可通过以下命令手动清理:

  • 清理页面缓存(不影响正在运行的程序):sync; echo 1 > /proc/sys/vm/drop_caches
  • 清理目录项和索引节点缓存sync; echo 2 > /proc/sys/vm/drop_caches
  • 清理所有缓存(彻底释放,但可能导致后续文件操作变慢):sync; echo 3 > /proc/sys/vm/drop_caches
    注意sync命令用于将内存中的数据同步到磁盘,避免数据丢失,建议每次清理前执行。

3. 清理临时文件

系统临时文件(如/tmp目录下的文件)可能占用大量空间,尤其是长期运行的服务器。可通过以下命令清理:

  • 清理/tmp目录sudo rm -rf /tmp/*(删除/tmp下所有文件,需谨慎操作,避免删除正在使用的临时文件);
  • 清理旧日志文件sudo journalctl --vacuum-time=3d(保留最近3天的系统日志,减少日志占用);或手动删除/var/log下旧日志(如sudo rm -rf /var/log/*.log.1)。

4. 清理Slab分配器缓存

Slab分配器用于管理内核对象(如进程描述符、文件对象等),过度占用可能导致内存浪费。可通过以下命令查看和清理:

  • 查看Slab缓存sudo slabtop(实时查看Slab缓存占用排名,重点关注“OBJS active”列);
  • 清理Slab缓存echo 1 > /proc/sys/vm/slub_debug(标记需要清理的缓存),sync; echo 0 > /proc/sys/vm/slub_debug(执行清理)。

三、调整内核参数优化缓存

通过调整内核参数,可减少缓存过度占用或优化缓存回收策略:

  • 调整swappiness(控制使用交换分区的倾向,默认值60,值越小越倾向于使用物理内存):
    • 临时调整:sudo sysctl vm.swappiness=10
    • 永久生效:在/etc/sysctl.conf中添加vm.swappiness=10,然后执行sudo sysctl -p
  • 调整vfs_cache_pressure(控制内核回收目录项和索引节点缓存的倾向,默认值100,值越大回收越积极):
    • 临时调整:sudo sysctl vm.vfs_cache_pressure=50
    • 永久生效:在/etc/sysctl.conf中添加vm.vfs_cache_pressure=50,然后执行sudo sysctl -p

四、定期维护与监控

  • 创建定时任务:通过cron定期清理缓存(如每月1号凌晨清理),避免手动操作遗忘。示例:在/etc/crontab中添加0 0 1 * * root echo 3 > /proc/sys/vm/drop_caches
  • 使用监控工具:通过htop(实时监控内存、缓存使用)、vmstat(查看缓存变化趋势)、iostat(监控磁盘I/O与缓存关系)等工具,及时发现缓存异常。

注意事项

  • 生产环境谨慎清理:频繁清理缓存可能导致系统性能下降(如文件读写变慢),建议在系统空闲时操作;
  • 备份重要数据:清理前备份关键日志或配置文件,防止误删;
  • 定位根本原因:若缓存频繁占用过高,需检查是否有内存泄漏的进程(通过top查看RES列持续增长),或优化应用程序的内存使用。

0