阿里云Linux系统服务器内存消耗过高的排查

客户问题描述:
阿里云Linux系统服务器的内存持续消耗过高,重启后可以恢复正常,但业务运行后问题依旧存在,而且没有明显高消耗内存进程存在。

阿里云技术回复:
排查方案如下
1、登录问题阿里云Linux服务器。
2、执行free和top命令确认不存在占用大量内存的进程。
3、执行如下命令,统计所有进程占用的物理内存,相加后与free命令结果进行核对,确认是否有偏差。
ps aux|awk ‘{sum+=$6} END {print sum/1024}’
4、如果确认无偏差后,为了进一步排查进程消耗内存,可执行如下命令,根据rss列排序结果,核实最大消耗内存进程。
ps -eo pid,rss,pmem,pcpu,vsz,args –sort=rss
5、如上述步骤中,均未查找出异常进程,则继续执行以下操作,检测slab内存分配器占用情况,执行如下命令。
cat /proc/meminfo | awk ‘{sum=$2/1024} {print $1 sum ” MB”}’
注:以上命令执行过程中将默认的KB单位换算为了MB单位。
分析slab列的内存占用情况,核实内存占用是否较高。
注:分析slab内存详细占用情况,常用为atop工具。
运行atop命令即可观察详细信息,如下图所示,根据显示信息,验证为slab占用内存过高导致的问题。


注:
CentOS版本安装atop工具的命令为yum install atop。
Ubuntu版本安装atop工具的命令为apt-get install atop。
更详细的slab占用分析,需要执行slabtop命令观察,执行结果如下图所示。通过命令结果,定位原因为slab中的dentry占用大量内存。

dentry占用内存较高,常见原因是程序频繁的创建、删除不同名称的文件。针对此问题执行如下步骤即可解决问题,执行如下命令,手动清除slab缓存临时释放内存空间。
echo 2>/proc/sys/vm/drop_caches
注:建议操作之前执行sync命令,将内存里的数据写入到磁盘里。
检查/etc/sysctl.conf文件中的如下字段,并设定合适的阈值。当系统内存达到阈值时,触发自动回收。
vm.min_free_kbytes
最后需要排查业务中的大量IO操作逻辑,并尝试优化。

本文适用于:
阿里云服务器ECS

不知道如何办理开通阿里云服务器?让凯铧互联专业的工程师帮您。我们提供免费的技术咨询,方案建议,让您的企业上云变得更容易,更有效,更安全!

看完上述说明如果您还有疑问,或者是需要咨询阿里云产品相关折扣、优惠或者是技术问题,请加下面的微信!我们是阿里云/腾讯云/华为云代理商联系我更有折上折优惠,新老用户均有!微信(电话):158-0160-3153。

为什么选择凯铧互联:北京凯铧互联科技有限公司(简称凯铧互联)由多名前阿里云资深技术专家创立,核心员工来自阿里巴巴、腾讯服务器运维团队,公司90%成员均是超过10年具备专业运维经验的精英。作为阿里云,腾讯云,百度云,金山云,华为云重要的合作伙伴,专业从事互联网应用服务、云计算、大数据、人工智能、企业信息化建设,为企业用户提供基于大数据的企业上云解决方案。公司总部设在北京,并在内蒙设有办事处,服务全国各地企业,与互联网专业公司及主流服务商建立了良好合作关系。公司官网:www.bjkaihua.com; 腾讯云网站www.bjkaihua.net.cn; 阿里云业务网站:www.alibjyun.com。

目前像阿里云、腾讯云、华为云之类的云计算厂家后期续费,复购,升级是很贵的。而且推出的很多活动都是要求新用户购买的。推荐大家从节省成本考虑,尽量买的配置高一点的云服务器,时长尽量选3年。你现在选择高配,选择3年的差价比不过到时候续费、升级、复购时一半的费用。

为什么现在很多老用户都在想尽办法想买新用户活动下的云服务器,因为当他们业务起来了,环境熟悉了,想升级配置,想扩容业务,想续费云服务器结果发现再也买不到这么便宜的云服务器了。免费的才是最贵的就是这个道理。