温馨提示×

centos缓存如何减少

小樊
47
2025-10-19 13:40:56
栏目: 智能运维

一、清理现有缓存(手动/自动)
清理缓存是快速减少系统缓存占用的直接方法,适用于临时释放内存或解决缓存过多导致的性能问题。

  1. 清理页面缓存(Page Cache):仅清除用于加速文件读取的页面缓存,对系统影响较小。
    命令:sync && echo 1 > /proc/sys/vm/drop_cachessync用于将未写入磁盘的数据同步到磁盘,避免数据丢失)。
  2. 清理目录项和inode缓存:清除用于加速目录查找和文件元数据访问的缓存,适合目录操作频繁的场景。
    命令:sync && echo 2 > /proc/sys/vm/drop_caches
  3. 清理所有缓存:同时清除页面缓存、目录项缓存和inode缓存,释放最多内存,但可能导致系统短暂卡顿(因需重新加载缓存)。
    命令:sync && echo 3 > /proc/sys/vm/drop_caches
  4. 定时自动清理:通过cron任务定期清理缓存(如每月1日凌晨),避免缓存长期积累。
    示例:创建/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

二、调整内核参数(优化缓存行为)
通过修改内核参数,可从根源上控制缓存的生成和使用,适合长期优化。

  1. 调整swappinessswappiness控制内核使用交换分区(Swap)的倾向,默认值60(较高),降低该值可减少Swap使用,优先使用物理内存。
    临时设置:sudo sysctl vm.swappiness=10(10表示更倾向于使用物理内存);
    永久设置:编辑/etc/sysctl.conf,添加vm.swappiness=10,然后执行sudo sysctl -p使更改生效。
  2. 调整vfs_cache_pressurevfs_cache_pressure控制内核回收目录项和inode缓存的倾向,默认值100(较高),增大该值可加快缓存回收。
    临时设置:sudo sysctl vm.vfs_cache_pressure=50
    永久设置:编辑/etc/sysctl.conf,添加vm.vfs_cache_pressure=50,然后执行sudo sysctl -p
  3. 调整脏页参数:脏页是尚未写入磁盘的内存页,调整其阈值可减少缓存占用。
    编辑/etc/sysctl.conf,添加:
    vm.dirty_ratio=10(脏页占总内存10%时触发回写)、
    vm.dirty_background_ratio=5(后台回写脏页的阈值)、
    vm.dirty_writeback_centisecs=3000(每30秒检查一次脏页);
    然后执行sudo sysctl -p

三、清理包管理器缓存
包管理器(如YUM、DNF)会缓存下载的软件包,占用磁盘空间和部分内存,定期清理可释放资源。

  1. 清理YUM缓存
    命令:sudo yum clean all(清除所有YUM缓存,包括下载的软件包和元数据)。
  2. 清理DNF缓存(适用于CentOS 8及以上):
    命令:sudo dnf clean all

四、禁用或限制不必要的缓存服务
部分缓存服务(如dnsmasqnscd)可能占用大量内存,若无需使用可禁用或限制其缓存大小。

  1. 禁用缓存服务
    示例:禁用dnsmasq(DNS缓存服务),命令:sudo systemctl stop dnsmasq && sudo systemctl disable dnsmasq
  2. 限制缓存大小
    若需保留服务,可通过配置文件限制其缓存大小(如dnsmasq--cache-size参数),具体配置取决于服务类型。

五、优化应用程序缓存配置
应用程序(如数据库、Web服务器)自身的缓存可能占用大量内存,调整其缓存设置可减少系统缓存压力。

  1. 数据库缓存
    以MySQL为例,调整innodb_buffer_pool_size(InnoDB缓冲池大小)为物理内存的70%左右(如innodb_buffer_pool_size=8G,适用于8GB内存服务器),避免缓冲池过大占用过多内存;若使用Redis作为缓存,可调整maxmemory参数限制其最大内存使用。
  2. Web服务器缓存
    以Nginx为例,调整proxy_cache_pathmax_size参数限制代理缓存大小(如max_size=1G),避免缓存过多文件。

六、监控缓存使用情况
定期监控缓存使用情况,可及时发现异常并采取措施。

  1. 使用free命令:查看内存使用概况(包括buff/cache和available内存),命令:free -h
  2. 使用top/htop命令:实时查看进程内存占用,按M键按内存排序,找出占用内存高的进程。
  3. 使用vmstat命令:查看系统内存、缓存、Swap等统计信息,命令:vmstat 1 5(每1秒刷新一次,共5次)。

0