如何获取unix进程在其生命周期内的最大虚拟集大小?

如何获取unix进程在其生命周期内的最大虚拟集大小?

time命令包含一个格式参数“M”,根据timeLinux 上的手册页,该参数用于以下用途:

Maximum resident set size of the process during its lifetime, in Kilobytes.

但是,它看起来无法time测量进程在其生命周期内的最大虚拟集大小。我怎样才能在 Linux 上实现这一点?

需要明确的是,我可以控制正在分析的进程,因此如果我需要让这个子进程在执行结束时发出一个信号,表明它已准备好终止,以便父进程可以通过读取其 VSZps或者pmap,然后让父进程在读取内存后显式终止子进程,我可以做到,但这会很痛苦,所以我希望可能有一个更简单的解决方案,不涉及检测程序的代码被分析 - 类似于time也可以测量最大虚拟集大小的直接等效物将是理想的。不过,如果需要的话,我可以编写一个自定义 C 程序来启动子进程。但是,如果我要走 C 路线,我不确定将使用哪些系统调用来启用子进程中 VSZ 的内核跟踪。

任何指导将不胜感激。

编辑:事实证明这并不平凡。可能的解决方案在这里:https://stackoverflow.com/questions/774556/peak-memory-usage-of-a-linux-unix-process/10957355#10957355

答案1

不知道它对您是否有用,但pidstat -r 1 -p 1示例 /sbin/init 如下所示:

10:53:38          PID  minflt/s  majflt/s     VSZ    RSS   %MEM  Command
10:53:39            1      0.00      0.00   13648   1108   0.01  init
10:53:40            1      0.00      0.00   13648   1108   0.01  init
10:53:41            1      0.00      0.00   13648   1108   0.01  init
10:53:42            1      0.00      0.00   13648   1108   0.01  init
10:53:43            1      0.00      0.00   13648   1108   0.01  init
10:53:44            1      0.00      0.00   13648   1108   0.01  init

相关内容