是否有一种工具可以运行命令行并报告峰值RAM使用总量?
我正在想象类似于/usr/bin/time的东西
是否有一种工具可以运行命令行并报告峰值RAM使用总量?
我正在想象类似于/usr/bin/time的东西
当前回答
Valgrind一行程序:
Valgrind——tool=massif——pages-as-heap=yes——massif-out-file=massif。出去。/ test.sh;grep mem_heap_B massif。出| sed - e ' s / mem_heap_B = \(. * \) / \ 1 /“| - g | tail - n 1
注意使用——pages-as-heap来测量进程中的所有内存。更多信息请访问:http://valgrind.org/docs/manual/ms-manual.html
这将大大降低您的命令速度。
其他回答
Heaptrack是一个具有GUI和文本界面的KDE工具。我发现它比valgrind更适合了解进程的内存使用情况,因为它提供了更多细节和火焰图。它还更快,因为它检查valgrind的次数更少。它会给你最大的内存使用量。
不管怎样,跟踪rss和vss是误导的,因为页面可以共享,这就是为什么memusg。你真正应该做的是跟踪/proc/[pid]/smaps中Pss的和或使用pmap。GNOME系统监视器曾经这样做,但它太昂贵了。
(这是一个已经回答了的老问题。但只是为了记录:)
我受到杨的剧本的启发,想出了这个小工具,名叫memusg。我只是将采样率提高到0.1,以处理更短的生存过程。我没有监视单个进程,而是让它测量进程组的rss和。(是的,我写了很多独立的程序一起工作)它目前在Mac OS X和Linux上工作。用法必须和time的用法相似:
memusg ls -alR / >/dev/null
它只显示了目前的峰值,但我对记录其他(粗略)统计数据的轻微扩展感兴趣。
在我们开始任何严肃的分析之前,有这样一个简单的工具来查看是很好的。
在macOS上,可以改用DTrace。“Instruments”应用是一个很好的GUI,它带有XCode afaik。
好吧,如果你真的想显示内存峰值和一些更深入的统计数据,我建议使用一个分析器,如valgrind。一个很好的valgrind前端是alleyoop。
下面是(基于其他答案)一个非常简单的脚本,用于监视已经运行的进程。你只需要用你想要观察的进程的pid作为参数来运行它:
#!/usr/bin/env bash
pid=$1
while ps $pid >/dev/null
do
ps -o vsz= ${pid}
sleep 1
done | sort -n | tail -n1
使用示例:
max_mem_usage.sh 23423