该time
命令包含一个格式参数“M”,根据time
Linux 上的手册页,该参数用于以下用途:
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