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