开发者社区> 问答> 正文

明明没安装什么软件,内存使用率却很高了,很奇怪

只是安装了mongodb + jdk 环境而已~

展开
收起
dian-kido 2018-10-27 17:45:29 994 0
1 条回答
写回答
取消 提交回答
  • 阿里云问答专家、阿里云认证云计算工程师、Java研发工程师
    推荐回答
    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单位。
    6. 分析slab列的内存占用情况,核实内存占用是否较高。
      注:分析slab内存详细占用情况,常用为atop工具。
    7. 运行atop命令即可观察详细信息,如下图所示,根据显示信息,验证为slab占用内存过高导致的问题。
      注:
      • CentOS版本安装atop工具的 命令为 yum install atop
      • Ubuntu版本安装atop工具的 命令为 apt-get install atop
    8. 更详细的slab占用分析,需要执行slabtop命令观察,执行结果如下图所示。通过命令结果,定位原因为slab中的dentry占用大量内存。
    9. dentry占用内存较高,常见原因是程序频繁的创建、删除不同名称的文件。针对此问题执行如下步骤即可解决问题,执行如下命令,手动清除slab缓存临时释放内存空间。
      echo 2>/proc/sys/vm/drop_caches
      
      注:建议操作之前执行sync命令,将内存里的数据写入到磁盘里。
    10. 检查 /etc/sysctl.conf 文件中的如下字段,并设定合适的阈值。当系统内存达到阈值时,触发自动回收。
      vm.min_free_kbytes
      
    11. 最后需要排查业务中的大量IO操作逻辑,并尝试优化。
    2018-10-27 17:49:14
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
内存取证与IaaS云平台恶意行 为的安全监控 立即下载
云服务器ECS内存增强型实例re6全新发布 立即下载
低代码开发师(初级)实战教程 立即下载