记一次因为内存过消耗过大的排查
环境
阿里云服务器学生机,ubuntu16.4
排查过程
先看看阿里云的控制端显示的内存占用情况
![14899865-7c8cebc1d94842de.png](https://i-blog.csdnimg.cn/blog_migrate/598940f3a3ed2d99c75e20307055f072.webp?x-image-process=image/format,png)
内存情况
![14899865-96c4ca2797db32a2.png](https://i-blog.csdnimg.cn/blog_migrate/ab995d83e742b6aca837cc44adafd95e.webp?x-image-process=image/format,png)
top排查
并没有发现异常的程序。也没有显示内存有占用过大。
使用指令查看占用的物理内存,
ps aux|awk '{sum+=$6} END {print sum/1024}'
使用指令,核实进程的最大使用内存量
ps -eo pid,rss,pmem,pcpu,vsz,args --sort=rss
![14899865-12800e07523bf967.png](https://i-blog.csdnimg.cn/blog_migrate/8e5478e34725a54ab65ad6f4cefc101a.webp?x-image-process=image/format,png)
rss
发现最大的内存占用进程最大瞬间只是使用了百分之18,并未达到1.8G的占用情况,还是未找到异常
使用slabtop指令,看到dentry占用过大。
![14899865-f6c96da5b4ce7fa0.png](https://i-blog.csdnimg.cn/blog_migrate/ee5c1d242048c839ab07a7b27ee4e1ee.webp?x-image-process=image/format,png)
slabtop
排查到的可能是因为,在我跟打器服务中使用的tcp协议,有可能是频繁的进行创建实例导致的频繁销毁而并未被回收。
打印查看程序的日志,发现有用户一直重复的连接TCP端口,导致无限创建实例而并未释放。
![14899865-1586d167a5057107.png](https://i-blog.csdnimg.cn/blog_migrate/c5ad430c2a4c54944c6d35e3e85f30ed.webp?x-image-process=image/format,png)
跟打器重复连接
后经审查代码发现,因为客户端上掉线进行的无限重连的逻辑错误,修改之后内存恢复正常。