调优过程
组网环境
调优思路
- 使用DevKit系统诊断工具对程序进行内存使用分析。
- 查看内存使用分析报告,通过调用栈定位内存泄漏点。
- 优化程序后,再次使用工具判断问题是否解决。
调优过程
- 创建内存使用任务。
选择要诊断的应用,输入服务器密码并选择采样时长。
- 等待任务执行结束查看报告内容。
通过堆栈信息和内存在用视图从整体上查看内存在用情况,可发现存在模块内存使用随时间不断增长,可以确定该段时间内存在内存泄漏。
- 查看调用栈信息。
发现具体的内存泄漏点为mem_leak.c文件的第9行。
- 查看源码文件。
发现第9行进行了内存申请,排查代码发现后续未对该处申请的内存进行释放。
- 通过修改源码将内存正确释放。
- 重新使用工具进行诊断。
通过工具展示报告可以看出已经没有一直递增的内存使用情况,问题已解决(报告中展示的两处内存使用情况分别是调用pthread_create而导致的系统内部TLS内存分配和调用printf而导致的缓冲区内存分配)。
总结
初始的测试程序动态分配内存用于数据缓存,但在程序结束前未调用free释放分配的内存,造成内存未回收的情况。虽然程序逻辑简单并最终正常退出,但形成典型的内存泄漏问题。本次调优实践展示了一个典型的内存泄漏定位与修复过程,借助DevKit诊断工具,开发者可以快速定位内存泄漏问题根源,并验证优化效果。
父主题: 内存使用调优实践