记一次linux 内存异常的处理

摘要:
最近,我收到一个反馈,说Linux系统的内存使用率非常高。我并没有看到顶部有任何异常服务。我使用free命令检查内存使用率是否很高。操作系统内存为49G,直接占用40G。几乎没有可用的。此外,反馈称重启后主机直接占用40G空间。一般来说,在分析开始时,我觉得这是一个应用程序异常(当我不太了解它并直接重新启动时,也会出现类似的问题),在顶部之后,没有发现异常进程(我们计划稍后使用每个工具和perf来分析它们)。我们了解到,直接启动后,它将达到40G,并且

最近一次接到一个反馈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

免责声明:文章转载自《记一次linux 内存异常的处理》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇GitHub使用手册3——使用其他开发者的仓库问题解决-Plugin with id 'com.github.dcendents.android-maven' not found下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

CentOS安装

目前,我们安装Linux操作系统的主要目的是为了更好地了解和学习它。如果条件允许,最好把Linux操作系统安装在一台PC机上;如果条件不允许也没有关系,阿铭会教你使用虚拟机来安装Linux操作系统。 大多数读者朋友比较习惯使用Windows操作系统,所以建议你使用虚拟机来学习Linux。阿铭相信,如果在Windows系统里安装一个虚拟机,然后在虚拟机上安装...

zookeeper集群(linux)和单机(windows)搭建

Zookeeper集群(linxu)搭建 环境要求:必须要有jdk环境,本次讲课使用jdk1.8 3.1结构 一共三个节点集群的服务器数量一般为2n+1个,(zk服务器集群规模不小于3个节点),要求服务器之间系统时间保持一致。 3.2上传zk并且解压进行解压: tar -zxvf zookeeper-3.4.6.tar.gz重命名: mv zookeep...

Linux SO_KEEPALIVE属性,心跳

对于面向连接的TCP socket,在实际应用中通常都要检測对端是否处于连接中,连接port分两种情况: 1、连接正常关闭,调用close() shutdown()连接优雅关闭,send与recv立刻返回错误,select返回SOCK_ERR; 2、连接的对端异常关闭,比方网络断掉,突然断电. 对于另外一种情况,推断连接是否断开的方法有一下几种: 1、自...

Linux下如何批量转码iconv

来源:http://hi.baidu.com/curioz/blog/item/2555863514f9491d90ef390d.html 下载了不少文本txt,如verycd上的致纯书苑,解压看看是GBK编码。我用的Ubuntu Linux默认编码用UTF8(估计大部分Linux发行版都是),这样用grep等命令就很不方便,需要转码。有iconv可用:用...

Linux系统下安装JDK及环境配置

第一种属于傻瓜式安装,一键安装即可(yum安装); 第二种手动安装,需要自己去Oracle官网下载需要的jdk版本(需官网注册登录才可以下载),然后解压并配置环境。 一、yum一键安装1.首先执行以下命令查看可安装的jdk版本: yum -y list java* 执行成功后可看到如下界面: 2.选择自己需要的jdk版本进行安装,比如这里安装1.8,执行...

Linux下find一次查找多个指定类型文件,指定文件或者排除某类文件,在 GREP 中匹配多个关键 批量修改文件名等

http://blog.sina.com.cn/s/blog_62e7fe670101dg9d.html linux下二进制文件查找: strings 0000.ts | grep -o "T" | wc -l grep _initcall_.*1$ ./aa > a1 2982 find . -regex '.*.c|.*.cxx|.*.cpp|....