linux中长时间运行进程的峰值内存测量

bad*_*kya 7 linux memory

如何监控Linux中进程消耗的峰值内存?这不是我可以在内部修改以测量峰值内存使用量的程序.

我真的不希望详细的测量,我也不想让他们到我的程序过慢下来..这样的valgrind或任何重量级的是不是我期待的......而像其他的帖子较早[ 在Linux/Unix的峰值内存使用情况进程,时间-v似乎没有为我的机器报告内存...

我可以运行top或ps并使用一个简单的脚本为我的进程id提取内存消耗的字符串.但是,我的过程运行大约20-30分钟,所以我希望能够记录并获得最大值.我可以容忍粗粒度样本...每1分钟左右...具体如何 - > 1.在zsh中分享这个简单的mem-measure脚本?2.当测试过程结束时杀死它?

lic*_*rna 6

只需使用top -n迭代指定的次数,并使用-d在更新之间进行延迟.此外,您只需抓取其pid即可获取与您的流程相关的输出,例如:

top -n 30 -d 60 | grep <process-id>
Run Code Online (Sandbox Code Playgroud)

阅读顶部手册页以获取更多信息

man top
Run Code Online (Sandbox Code Playgroud)

当然,您也可以使用awk获取所需的列.


Mas*_*ssa 3

其实我之前就说过:

”“”

尝试

/usr/bin/time -v yourcommand
Run Code Online (Sandbox Code Playgroud)

这应该有帮助。如果你只使用“time”,bash将执行内置的(没有“-v”)

”“”

不起作用(返回 0)。

我制作了以下 Perl 脚本(我称之为 smaps):

#!/usr/bin/perl
use 5.010;
use strict;
use warnings;
my $max = 0;
while( open my $f, '<', "/proc/$ARGV[0]/smaps" ) {
  local $/; $_ = <$f>;
  $max = $1 if /Rss:\s*(\d+)/ and $1 > $max;
  open my $g, '>', '/tmp/max';
  say $g $max
}
Run Code Online (Sandbox Code Playgroud)

然后我调用它(例如,观察 qgit 的内存使用情况):

bash -c './smaps $$ & exec qgit'
Run Code Online (Sandbox Code Playgroud)

使用单引号以便“子”shell 进行解释$$(在 后将与 qgit 的 PID 相同exec)。这个答案,我测试过:-D

华泰