您的位置:首页 > 其它

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

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

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

总结

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: