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

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

我并不想要详细的测量结果,也不希望它们过分减慢我的程序..所以valgrind或任何重量级不是我正在寻找的......而且和其他文章一样[linux / unix的峰值内存使用率进程,时间-v似乎没有报告我的机器的内存...

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


只需使用top -n迭代指定的次数,使用-d延迟更新。 您也可以通过对其pid进行刷机来获取与您的进程相关的输出,例如:

top -n 30 -d 60 | grep <process-id>

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

man top

当然,你也可以使用awk获取你需要的列。


其实,我之前说过:

“””

尝试

/usr/bin/time -v yourcommand

这应该有所帮助。 如果你只使用“时间”,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
}

然后我称之为(例如,观看qgit的内存使用情况):

bash -c './smaps $$ & exec qgit'

使用单引号,以便“女儿”shell解释$$ (这与exec后的qgit的PID相同)。 这个答案,我测试了:-D

HTH


Valgrind的地块不应该太重,但是,我建议使用/ proc。 您可以轻松编写自己的监视器脚本。 这是我的,为了您的方便:

#!/bin/bash

ppid=$$
maxmem=0

$@ &
pid=`pgrep -P ${ppid} -n -f $1` # $! may work here but not later
while [[ ${pid} -ne "" ]]; do
    #mem=`ps v | grep "^[ ]*${pid}" | awk '{print $8}'`
        #the previous does not work with MPI
        mem=`cat /proc/${pid}/status | grep VmRSS | awk '{print $2}'`
    if [[ ${mem} -gt ${maxmem} ]]; then
        maxmem=${mem}
    fi
    sleep 1
    savedpid=${pid}
    pid=`pgrep -P ${ppid} -n -f $1`
done
wait ${savedpid} # don't wait, job is finished
exitstatus=$?   # catch the exit status of wait, the same of $@
echo -e "Memory usage for $@ is: ${maxmem} KB. Exit status: ${exitstatus}n"
链接地址: http://www.djcxy.com/p/80159.html

上一篇: peak memory measurement of long running process in linux

下一篇: How to find the memory consumption of a particular process in linux for every 5 seconds