问题背景
排查大进程的内存使用率过高问题。
在初始化阶段排查每个业务初始化前后内存占用情况,对在初始化阶段动态分配内存的情况有效,对运行时动态分配内存无效。
思路
- 获取进程 pid
- 查看
/proc/[pid]/status
,获取 VmRSS 值 - 截取 VmRSS 行,打印 VmRSS 值
- 通过 sed/awk 获取打印值,并进行计算,确认哪个业务初始化消耗太多内存
/proc/[pid]/status
详见 man 5 proc。
VmRSS: Resident set size. Note that the value here is the sum of RssAnon, RssFile, and RssShmem.
样例:
1 | sunyongfeng ~ cat 1610/status |
代码
1 | const char data_mem[] = "VmRSS:"; |
调用:
1 | print_mem(getpid(), your_func_name); |