Linux用户态C程序如何获取自身进程最大内存占用(无需/proc)
程序内部获取多线程进程最大内存占用的方案探讨
- 需求:在多线程进程内部获取自身的最大内存占用量,因此无法使用Valgrind、
time这类外部工具。 - 排除/proc方案:不少方案推荐遍历/proc文件系统,但procfs并非系统必需挂载项,系统在未挂载/proc时也能基本正常运行。
警告:盲目执行此操作可能存在风险
umount -l /proc getrusage(2)的局限性:尝试过调用该接口,但其中的内存相关字段(如下)无法保证会被填充,实际环境中大概率为空值:long ru_ixrss; /* 共享内存累计大小 */ long ru_idrss; /* 私有数据内存累计大小 */ long ru_isrss; /* 私有栈内存累计大小 */- 内核态可行但存在疑问:内核中
task_struct -> mm -> highwater_vm字段可以提供正确的内存页数,这一数据符合需求,但不知道如何从用户态直接获取当前进程的task_struct,且不想通过编写内核模块来暴露该结构。
内容的提问来源于stack exchange,提问作者SailorCire
相关产品推荐
相关产品推荐

