记一次排查内存泄漏的过程

版权声明:本文为博主原创文章,转载注明出处。 https://blog.csdn.net/s_lisheng/article/details/82860177
排查过程

程序测试运行过程中,其中一个进程被Linux系统给杀掉了,查看系统日志,发现是进行占用内存过大而触发Linux OOM给杀掉了。重启反复几次后均被杀掉,发现是内存泄漏问题。另发现有的时候有内存泄漏,有的时候没有内存泄漏。针对这种情形,首先想到的是进行重现,然后使用工具检测排查,同时检测内存,统计出内存泄漏的状况,发现内存泄漏呈线性增长,大概5kb/s。有了这个数据后就可以大概想一下,哪里可能会出现每秒泄漏5kb/s。因为是随着时间呈非常有规律的线性增长,最先想到的是程序中有个超时1s定时执行一个连接操作。把这段代码注释掉后,没有再发现内存泄漏,从而对泄露位置初步定位,同时也明白了为什么有的时候有内存泄露,有个时候没有。之后对这个连接操作进行进一步的问题定位,最后发现是连接中会首先进行握手,握手过程中需要调用密码学库中的ESIES进行加密,是在这里出现了内存泄露。问题排查完成。


后记

这次出现内存泄露是Rust开发的一个程序,Rust是非常注重内存安全的,出现内存问题时,首先应该注意的代码就是程序中的unsafe代码段,因为unsafe部分的代码编译器只执行了部分的安全检查,所以是最有可能出现问题的地方。

猜你喜欢

转载自blog.csdn.net/s_lisheng/article/details/82860177