问题
前几天同事说写的代码编译到了程序之后,应用起不来,发现内存不够用。这种情况如何分析呢?
问题倒推的思路
这种根据现象倒推问题的思路就这么几个:
- 看是否bss区的占用太大;
- 通过内存申请跟踪工具,查看哪一个模块占用内存比较多;
- 再就是实时查看/proc/pid/maps; 看栈上的空间是否有异样;
- 是否有内存泄漏
- 使用gcore来生成实时的core文件来分析栈里的内容。
使用的方法
第一个方向:读取程序的data、bss段大小
readelf -S a.out
Section Headers:
[Nr] Name Type Address Offset
Size EntSize Flags Link Info Al