Linux服务器内存消耗过高 发布日期:2019-10-24 17:20:25     博主推荐★

问题描述

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

问题原因

slab消耗内存过多。

解决方案

    登录问题Linux服务器。
    执行free和top命令确认不存在占用大量内存的进程。
    执行如下命令,统计所有进程占用的物理内存,相加后与free命令结果进行核对,确认是否有偏差。
    ps aux|awk '{sum+=$6} END {print sum/1024}'
    如果确认无偏差后,为了进一步排查进程消耗内存,可执行如下命令,根据rss列排序结果,核实最大消耗内存进程。
    ps -eo pid,rss,pmem,pcpu,vsz,args --sort=rss
    如上述步骤中,均未查找出异常进程,则继续执行以下操作,检测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操作逻辑,并尝试优化。

博文地址:https://blog.ahamu.cn/blog/detail.html?id=320
   
推荐文章
  • 1
    Linux服务器内存消耗过高
    2019/10/24
  • 2
    讲的比较好的B+树执行原理的文章
    2019/10/17
  • 3
    解决现有问题的方式方法
    2019/10/15
  • 4
    PHP对象的深克隆方法
    2019/10/12
  • 5
    ES演示文稿【二】
    2019/09/23
  • 6
    ES演示文稿
    2019/09/23
  • 7
    kibana正则表达式demo
    2019/09/23
  • 8
    聊天有序集合
    2019/09/23
  • 9
    分销员授权登陆逻辑思维导图
    2019/09/18
  • 10
    logstash配置记录
    2019/09/02
  • 11
    比较好用的过滤表情的正则
    2019/08/13
  • 12
    Linux中的screen命令使用
    2019/08/12
  • 13
    网站开发神奇【图片视频压缩网站】
    2019/07/24
  • 14
    windows安装sqlsrv遇到的问题
    2019/07/05
  • 15
    遇到服务空间有一部分没有使用的情况怎么扩展
    2019/06/20
  • 16
    阿里云磁盘空间扩容遇到的问题
    2019/06/20
  • 17
    关于用xhell连接linux虚拟机频繁出现Soc
    2019/06/15
  • 18
    nginx重置多级默认页
    2019/06/12
  • 19
    nginx完整日志记录笔记
    2019/06/10
  • 20
    HTTPS NGINX SSL_PROTOCOL
    2019/04/28
最喜标签
NYOJ 面试 AJAX ping CentOS 灰度算法 YII2