记一次linux 内存异常的处理

最近一次接到一个反馈linux系统内存占用很高,通过top没看到异常的服务,使用free 命令查看内存
占用就是很高,操作系统内存在49G,直接就占用了40G,可用的很少,而且反馈说主机重启之后
直接也就占用了40G的空间

大致分析

在刚开始的时候感觉是应用异常(没了解少直接重启也出现类似问题),top之后没发现异常进程(后边
打算使用per-tools 以及perf 分析的),再了解到直接启动之后就40G,而且free 对于内存的计算是基于
/pro/memeinfo 理论上不会出问题的,还是很比较准确的(有一次分析问题,大概看了下计算算法),然后就
感觉不太正常,可能是内核配置是有问题(因为应用业务都是正常的,没有什么异常服务),查看之后发现了
一个不太多的内核参数配置(关于巨页的)

 
vm.nr_hugepages=20480 

然后在查看cat /proc/memeinfo, 的确是巨页占用了大部分内存的使用,按照默认巨页2M的计算刚好是40G
内存占用的大小刚好对上

解决方法

直接禁用巨页的使用(业务可以不用巨页),删除内核关于巨页的配置就可以了

说明

关于linux 内核参数的配置还是需要谨慎点,了解系统的需求以及业务场景,合理的调优内核参数

参考资料

https://www.kernel.org/doc/Documentation/vm/hugetlbpage.txt