服务器内存告警

服务器内存告警

运维的一台线上数据库服务器,抛出内存过高的告警,上去看了下,大概是内存used显示满了总16G内存,used16G内存,其实大部分是在缓存cache中,也就是问题所在是cache缓存占用过高在这里插入图片描述

解决办法

开始着手考虑,内存偏高先找出是哪些程序在占用cache,但是linux没有带这样的工具,废了九牛二虎之力在网上找到了hcache这个工具,这个是编译过可以直接用,这里贴上

wget https://silenceshell-1255345740.cos.ap-shanghai.myqcloud.com/hcache
chmod +x hcache
mv hcache /usr/local/bin/

在这里插入图片描述
经过分析可以看出大部分都是在数据库使用,也不好动。

清空cache

大致步骤是先执行sync保存缓存数据,然后清空
#sync; echo 1 > /proc/sys/vm/drop_caches #释放 pagecache
sync; echo 2 > /proc/sys/vm/drop_caches #释放 dentries 和 inodes:
#sync; echo 3 > /proc/sys/vm/drop_caches #释放 pagecache,dentries 和 inodes:
sync; echo 0 > /proc/sys/vm/drop_caches #默认0为不释放,让系统自己调节
发现作用比较小,隔一会缓存就上来了

限制cache

既然不能删除某些程序,就想了个办法,如何去限制这个cache,给free留点空间
网上找的办法有一下几种
1.ulimit(不管用)
2.cgroups(6.5系统不自带,安装不了)
3.sysctl,修改内核资源参数的,管用
执行sysctl -w vm.min_free_kbytes=2400000,这个是临时修改,永久生效的办法是写入/etc/sysctl.conf里
执行后发现确实有效
在这里插入图片描述

总结

经过这次事件
1.了解到linux的cache机制,会把大部分free里的内存拿出去,做高速缓存使用,例如使用了第一次find第二次find就会很快,内存有一个avaliable概念,就是free+buffers+cached就是可用的内存,cache里的内存是可以被强制征用的,不会影响实际使用
2.sysctl限制内核和一些内核调优参数对服务器影响比较有效

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值