如何监控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>
Run Code Online (Sandbox Code Playgroud)
阅读顶部手册页以获取更多信息
man top
Run Code Online (Sandbox Code Playgroud)
当然,您也可以使用awk获取所需的列.
其实我之前就说过:
”“”
尝试
/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
华泰
归档时间: |
|
查看次数: |
9230 次 |
最近记录: |