大家好,又见面了,我是全栈君。
背景:收到报警,系统的内存使用率触发阈值(部分图是后补的)
1,登陆系统,使用命令查看内存分配
top 按M
free -m
atop
看下内存分配(cat /proc/meminfo 也可以看到一些细化的内存使用信息)
2,发现cache才1.7g,slab非常高,4.4g ,slab内存简单理解为是系统占用的
使用slabtop继续分析
3,看到proc_inode_cache使用的最多,这个代表是proc文件系统的inode的占用的。
4,查进程,但是进程不多,再查线程,可以通过如下命令进行检查。
ps -eLf
得到如下的结果:(没有原图了,这里补得图,用云盾做介绍)
计算socket
ll /proc/22360/task/*/fd/ |grep socket |wc -l
ll /proc/22360/task/*/fd/ |wc -l
计算一下有多少fd
5,每个socket的inode也不一样
当时看到的现场有几万个fd,基本全是socket,每个inode都是占用空间的,且proc文件系统是全内存的。 所以我们才会看到slab中proc_inode_cache内存占用高
后续:
优化相关的server端~
用云栖社区APP,舒服~
详情请点击
转载于:https://www.cnblogs.com/jzy996492849/p/7307777.html
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/108258.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...