记一次排查内存泄漏的过程
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部分的代码编译器只执行了部分的安全检查,所以是最有可能出现问题的地方。
相关文章推荐
- 一次 Java 内存泄漏排查过程,涨姿势
- 一次 Java 内存泄漏排查过程,涨姿势
- 使用 Eclipse Memory Analyzer 进行内存泄漏分析的一次过程
- 一次关于Redis内存诡异增长的排查过程实战记录
- 记一次问题排查的过程-服务器内存问题
- 一次使用vld检测内存泄漏的修正过程
- 记录一次排查netty堆内存泄漏经历
- 一次Jvm old过高的排查过程实战记录
- 一次线上页游服务器响应缓慢排查过程
- android 内存泄漏分析过程详解
- 记一次troubleshooting排查过程
- 【Oracle】记一次数据库连接没有关闭导致数据库宕机的排查过程
- 记一次Linux系统被入侵的排查过程(一)
- 记一次Mysql占用内存过高的优化过程
- 记一次Linux系统内存占用较高得排查
- 一次CMS GC问题排查过程(理解原理+读懂GC日志)
- 一次load飙高排查过程
- 记一次java进程被linux杀掉的排查过程
- 记一次OOM问题排查过程
- 记一次Oracle数据库连接不释放问题排查过程