You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 17:47:32