linux 解决发现不到的 内存占用率

1、问题浮现

项目做久了,你往往会遇到一些稀奇古怪的问题。下面咱就来聊聊关于内存无故使用率变大的真相。事情是这样的,最近一个客户的服务器,内存使用率在90%左右,这很不正常,导致某云的云安全中心一直报警,开始的时候没有关注。后面,有一个项目需要紧急上线,并且项目相当吃cpu和内存。于是,问题就出来了。90%的内存,系统是不会宕机的,但是多少有些些的抖动,也就是卡顿。当这个项目上线后,时间不久,服务器直接当机了。是的,你没有听错,是服务器宕机了。这是严重性优先级为1的问题,抓紧着手处理。因为是上线了一个项目导致的,所以先把项目停掉。果然内存使用率下来了,恢复到90%的状态.

linux 解决发现不到的 内存占用率_第1张图片

当然,现在系统是可以正常运行的。

但是一想到刚才那一幕,后背发凉,直流汗。问题既然已经爆出来了,还是要解决的。所以,继续发挥拼命三郎的精神。开始查什么原因导致的。先从服务器运行进程查起,top命令(也可以使用htop,atop这些),个人觉得是感官上好看一些 ,画面好看一些,功能上基本是一样的,毕竟是老牌的 top。top发现进程的使用率并不高,远远达不到90%,截图如下:

linux 解决发现不到的 内存占用率_第2张图片

截图中的使用率加起来,也不到70%,那是怎么来的88%。这个问题确实很头疼,并且项目也不会骗你,你一上线,系统就要宕机。继续解决。。。。查。。。查。。。查。。。。query。。。

query。。。query。。。

 2、问题解决

Linux下的大页分为两种类型:标准大页(Huge Pages)和透明大页(Transparent Huge Pages)。

Huge Pages是从Linux Kernel 2.6后被引入的。目的是使用更大 的内存页面(memory page size)以适应越来越大的系统内存,让操作系统可以支持现代硬件架构的大页面容量功能。

透明大页(Transparent Huge Pages)缩写为THP,这个是RHEL 6(其它分支版本SUSE Linux Enterprise Server 11, and Oracle Linux 6 with earlier releases of Oracle Linux Unbreakable Enterprise Kernel 2 (UEK2)) 开始引入的一个功能。

这两者有啥区别呢?

这两者的区别在于大页的分配机制,标准大页管理是预分配的方式,而透明大页管理则是动态分配的方式。相信有不 少人将Huge Pages和Transparent Huge Pages混为一谈。目前透明大页与传统HugePages联用会出现一些问题, 导致性能问题和系统重启。Oracle 建议禁用透明大页(Transparent Huge Pages)。在 Oracle Linux 6.5 版中, 已删除透明HugePages的支持。

注意:

标准大页

HugePages size的大小默认为2M,这个也是可以调整的。区间范围为2MB to 256MB。
同时HuagePages是不可以被SWAP到磁盘的。
Hugepages在/proc/meminfo中是被独立统计的,与其它统计项不重叠,既不计入进程的RSS/PSS中,又不计入 LRU Active/Inactive,也不会计入cache/buffer。如果进程使用了Hugepages,它的RSS/PSS不会增加。

注意:

透明大页

THP 目前只能映射异步内存区域,比如堆和栈空间。THP是可以被SWAP到磁盘的。
/proc/meminfo里AnonHugePages统计的是Transparent HugePages (THP)。它与/proc/meminfo的其他统计项 有重叠,首先它被包含在AnonPages之中,而且在/proc//smaps中也有单个进程的统计,与进程的RSS/PSS 是有重叠的,如果用户进程用到了THP,进程的RSS/PSS也会相应增加,这与Hugepages是不同的。
 

到这里,你就能知道,为什么内存被吃掉这么多,都是这个透明大页搞的鬼!

查看:果然有3300

开始调整:

先暂时在服务器调整,这种在重启后就失效了。

 echo never > /sys/kernel/mm/transparent_hugepage/enabled

方框里面的英文是never说明已经关掉了透明大页。

如果此种方法没有生效,可以同时释放下缓存:

echo 3 > /proc/sys/vm/nr_hugepages

再次检查发现:

 linux 解决发现不到的 内存占用率_第3张图片

内存使用率降下来了,也符合预期。

 永久生效关闭透明大页方法:

echo 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.local

以上就是解决内存使用率高的方法,需要的抓紧拿走吧。其实出现这些问题,只能说明我们自己还不够强大,猿们,抓紧强大起来吧!

最后,插播广告,喜爱技术,喜欢交流的,诚挚邀请你来交流群。

linux 解决发现不到的 内存占用率_第4张图片

你可能感兴趣的:(服务器,运维)