是否有一种工具可以运行命令行并报告峰值RAM使用总量?
我正在想象类似于/usr/bin/time的东西
是否有一种工具可以运行命令行并报告峰值RAM使用总量?
我正在想象类似于/usr/bin/time的东西
当前回答
Heaptrack是一个具有GUI和文本界面的KDE工具。我发现它比valgrind更适合了解进程的内存使用情况,因为它提供了更多细节和火焰图。它还更快,因为它检查valgrind的次数更少。它会给你最大的内存使用量。
不管怎样,跟踪rss和vss是误导的,因为页面可以共享,这就是为什么memusg。你真正应该做的是跟踪/proc/[pid]/smaps中Pss的和或使用pmap。GNOME系统监视器曾经这样做,但它太昂贵了。
其他回答
在MacOS Sierra上使用:
/usr/bin/time -l commandToMeasure
你可以用grep获取你想要的。
重新发明轮子,用手工制作bash脚本。快速干净。
我的用例:我想监控一台RAM较少的linux机器,并想在它运行在大量使用时获取每个容器使用情况的快照。
#!/usr/bin/env bash
threshold=$1
echo "$(date '+%Y-%m-%d %H:%M:%S'): Running free memory monitor with threshold $threshold%.."
while(true)
freePercent=`free -m | grep Mem: | awk '{print ($7/$2)*100}'`
do
if (( $(awk 'BEGIN {print ("'$freePercent'" < "'$threshold'")}') ))
then
echo "$(date '+%Y-%m-%d %H:%M:%S'): Free memory $freePercent% is less than $threshold%"
free -m
docker stats --no-stream
sleep 60
echo ""
else
echo "$(date '+%Y-%m-%d %H:%M:%S'): Sufficient free memory available: $freePercent%"
fi
sleep 30
done
样例输出:
2017-10-12 13:29:33:使用阈值30%运行空闲内存监视器。 2017-10-12 13:29:33:可用空闲内存充足:69.4567% 2017-10-12 13:30:03:可用空闲内存充足:69.4567% 2017-10-12 16:47:02:空闲内存18.9387%小于30% 您的定制命令输出
time -f '%M' <run_program>
这里有一个单行程序,不需要任何外部脚本或实用程序,也不需要你通过Valgrind或time等其他程序启动进程,所以你可以将它用于任何已经运行的进程:
grep ^VmPeak /proc/$PID/status
(将$PID替换为您感兴趣的进程的PID)
(这是一个已经回答了的老问题。但只是为了记录:)
我受到杨的剧本的启发,想出了这个小工具,名叫memusg。我只是将采样率提高到0.1,以处理更短的生存过程。我没有监视单个进程,而是让它测量进程组的rss和。(是的,我写了很多独立的程序一起工作)它目前在Mac OS X和Linux上工作。用法必须和time的用法相似:
memusg ls -alR / >/dev/null
它只显示了目前的峰值,但我对记录其他(粗略)统计数据的轻微扩展感兴趣。
在我们开始任何严肃的分析之前,有这样一个简单的工具来查看是很好的。