1、清理Buffer/cache缓存文件

https://blog.csdn.net/u011066470/article/details/125510817

sync
sysctl -w vm.drop_caches=1
sysctl -w vm.drop_caches=2
sysctl -w vm.drop_caches=3

定时脚本清理

#!/bin/bash
Mem=$(free -m | awk 'NR==2' | awk '{print $4}')
if [ $Mem -gt 10240 ];
then
echo "Service memory capacity is normal!" > /dev/null
else
##空闲内存小于10G,释放内存的Buffer/cache
sync;sync;sync
##等待五分钟
sleep 5m
echo 1 > /proc/sys/vm/drop_caches
#echo 2 > /proc/sys/vm/drop_caches
#echo 3 > /proc/sys/vm/drop_caches
sync
fi

 

 

2、限制Buffer/cache缓存文件使用量

限制Buffer/cache可以使用的内存大小或者大小比例

 

Linux Vm 内核相关参数调优:

https://blog.csdn.net/weixin_45413603/article/details/123311250

Vm 内核调优 默认参数 与 调优参数

vm.admin_reserve_kbytes = 8192   系统为root用户的操作而保留的内存。为了避免系统内存完全用光导致root用户都无法登陆到机器进行trouble shooting,操作系统为root用户保留了一部分内存

 vm.overcommit_memory= 0       0 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。1 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。2 表示内核允许分配超过所有物理内存和交换空间总和的内存

vm.drop_caches= 0                      0 表示不做任何清理选项, 清理 pagecache:   echo 1 > /proc/sys/vm/drop_caches ,清理 dentries and inodes: echo 2 > /proc/sys/vm/drop_caches 清理 pagecache, dentries and inodes: echo 3 > /proc/sys/vm/drop_caches

vm.zone_reclaim_mode= 0          0 表示意味着关闭zone_reclaim模式,可以从其他zone或NUMA节点回收内存,1 表示打开zone_reclaim模式,这样内存回收只会发生在本地节点内。2 表示在本地回收内存时,可以将cache中的脏数据写回硬盘,以回收内存。

vm.dirty_background_bytes = 0   0  表示不生效,如果设置了8192,  vm.dirty_background_ratio 就不生效。(内存都是不固定的,最好还是走百分比模式)

vm.dirty_background_ratio = 10    表示10%百分比,超过就写硬盘,释放内存cache ,是内存可以填充“脏数据”的百分比,还是通过百分比好控制。这个参数指定了当文件系统缓存脏页数量达到系统内存百分之多少时(如10%)就会触发pdflush/flush/kdmflush等后台回写进程运行,将一定缓存的脏页异步地刷入硬盘;

vm.dirty_bytes = 0                          0  表示不生效,如果设置了8192, vm.dirty_ratio 就不生效。(内存都是不固定的,最好还是走百分比模式)

vm.dirty_ratio = 20                          而这个参数则指定了当文件系统缓存脏页数量达到系统内存百分之多少时(如20%),系统不得不开始处理缓存脏页(因为此时脏页数量已经比较多,为了避免数据丢失需要将一定脏页刷入硬盘);在此过程中很多应用进程可能会因为系统转而处理文件IO而阻塞。

vm.dirty_expire_centisecs = 3000   pdflush是读取1/100秒。缓存页里数据的过期时间(旧数据),指定脏数据能存活的时间。在这里它的值是30秒

vm.dirty_writeback_centisecs = 500  控制内核的脏数据刷新进程pdflush的运行间隔。单位是 1/100 秒。缺省数值是500,也就是 5 秒, 指定多长时间 pdflush/flush/kdmflush 这些进程会起来一次。

vm.dirtytime_expire_seconds = 43200 这个主要是给 lazytime inode 设置的过期时间,比如 inode 只是更新了 atime,这种更新非常频繁的数据就没必要短时间就更新,而且负责刷盘的是另外一个专门的 dirtytime writeback 进程,因此这个的默认时间比较长:12 小时,这个就不建议调整了,作用不大

vm.page-cluster=3

vm.swappiness=30                                 

调优参数

vm.admin_reserve_kbytes =   16384     如果系统内存足够大,可以调整最大值,可以是默认值8192的4倍到8倍

vm.overcommit_memory = 1                 不检查内存状态和是否够用

vm.drop_caches= 0                                不做任何清理选项

vm.zone_reclaim_mode= 2                    云主机就无需开为0,如果是物理机最好是 2

vm.dirty_background_bytes = 0

vm.dirty_background_ratio = 5 

vm.dirty_bytes = 0

vm.dirty_expire_centisecs = 3000         保持默认值

vm.dirty_ratio = 10 

vm.dirty_writeback_centisecs = 300       如果你的系统是持续地写入动作,那么实际上还是降低这个数值比较好,这样可以把尖峰的写操作削平成多次写操作。

vm.dirtytime_expire_seconds = 43200   保持默认值

vm.page-cluster=3  

vm.swappiness=0                                    针对K8S集群,禁止使用swap空间,只有当系统OOM 才用到

 重新加载

sysctl -p

3、影响

清理时,会短暂让磁盘IO升高

 

posted on 2024-05-17 10:44  小油2018  阅读(1266)  评论(0编辑  收藏  举报