美文网首页linux设置
Linux中Cache内存占用过高清理

Linux中Cache内存占用过高清理

作者: 岑吾 | 来源:发表于2020-06-02 17:25 被阅读0次

    在Linux中每次用free查看的时候,发现free的空间都只有500M左右。同样的环境32G只剩下这点,64G的也只剩下这么一点。后来发现都被Cache占用了,因为服务器上运行了Kafka环境,每周的日志文件都有一二百G的,估计就是他占用了page cache吧。

    Free中的buffer和cache:(它们都是占用内存):
      buffer : 作为buffer cache的内存,是块设备的读写缓冲区
      cache: 作为page cache的内存, 文件系统的cache
      如果 cache 的值很大,说明cache住的文件数很多。如果频繁访问到的文件都能被cache住,那么磁盘的读IO bi会非常小。

    Linux内核会在内存将要耗尽的时候,触发内存回收的工作,以便释放出内存给急需内存的进程使用。也可以用动释放,释放的时候需要对cache中的数据跟对应文件中的数据一致。

    释放的方式有下以几种

    echo 1 > /proc/sys/vm/drop_caches  # 表示清除pagecache
    echo 2 > /proc/sys/vm/drop_caches # 表示清除回收slab分配器中的对象(包括目录项缓存和inode缓存)。slab分配器是内核中管理内存的一种机制,其中很多缓存数据实现都是用的pagecache。
    echo 3 > /proc/sys/vm/drop_caches  # 表示清除pagecache和slab分配器中的缓存对象。
    

    一般情况下释放pagecache就可以了。这样可以写一个sh脚本来在服务器空闲的时候定时执行

    #!/bin/bash
    echo  "Clean Begin..."
    
    #写入硬盘,防止数据丢失
    sync;sync;sync
    
    #延迟10秒,等待磁盘写入
    sleep 10
    
    # 开始清理
    echo 1 > /proc/sys/vm/drop_caches
    
    echo "Clean Finish !"
    

    使用crontab来设置定时任务,如每天4点开始清理

    crontab -e
    
    0 0 4 * * ? /root/cleanbuff.sh
    

    本文参考:https://www.jianshu.com/p/9b9f4917fb2e

    相关文章

      网友评论

        本文标题:Linux中Cache内存占用过高清理

        本文链接:https://www.haomeiwen.com/subject/nwbuzhtx.html