Answers:
在Linux top
上,尽管自然没有历史记录图,但实际上支持只关注单个进程:
top -p PID
这在Mac OS X上也可以使用不同的语法:
top -pid PID
top -p `pgrep -f /usr/bin/kvm`
。
hostname
〜_pid.txt; exit'and
htop
是的很好替代top
。它有...颜色!简单的键盘快捷键!使用箭头键滚动列表!在不离开且不注意PID的情况下终止进程!标记多个进程并杀死所有进程!
在所有的功能,该手册页说,你可以按F到跟随的过程。
确实,您应该尝试htop
。top
第一次使用后,我再也没有开始过htop
。
显示单个过程:
htop -p PID
top
也有颜色 按z
。
top
有颜色!不幸的是,它的颜色非常无用,特别是与相比时htop
(它会使其他用户的进程褪色并突出显示程序的基本名称)。
htop -p PID
也将工作,就像@Michael Mrozek给出的示例一样。
以下是某种历史记录图。Python psrecord
软件包正是这样做的。
pip install psrecord # local user install
sudo apt-get install python-matplotlib python-tk # for plotting; or via pip
对于单个进程,它是以下内容(以停止Ctrl+C):
psrecord $(pgrep proc-name1) --interval 1 --plot plot1.png
对于以下几个过程,以下脚本有助于同步图表:
#!/bin/bash
psrecord $(pgrep proc-name1) --interval 1 --duration 60 --plot plot1.png &
P1=$!
psrecord $(pgrep proc-name2) --interval 1 --duration 60 --plot plot2.png &
P2=$!
wait $P1 $P2
echo 'Done'
该软件包提供仅RSS采样(以及一些特定于Python的选项)。它还可以使用子进程记录进程(请参阅参考资料mprof --help
)。
pip install memory_profiler
mprof run /path/to/executable
mprof plot
默认情况下,这会弹出一个基于Tkinter的(python-tk
可能需要)图表浏览器,可以将其导出:
对于简单的一次性测试而言,这似乎有些过头,但是对于几天调试而言,这肯定是合理的。方便的多合一raintank/graphite-stack
图像(来自Grafana的作者)psutil
和statsd
客户。procmon.py
提供一个实现。
$ docker run --rm -p 8080:3000 -p 8125:8125/udp raintank/graphite-stack
然后在另一个终端中,启动目标进程后:
$ sudo apt-get install python-statsd python-psutil # or via pip
$ python procmon.py -s localhost -f chromium -r 'chromium.*'
然后在http:// localhost:8080打开Grafana ,身份验证为admin:admin
,设置数据源https:// localhost,您可以绘制出如下图:
除了使用Python脚本将指标发送到Statsd之外,telegraf
(和procstat
输入插件)还可用于将指标直接发送到Graphite。
最小telegraf
配置如下所示:
[agent]
interval = "1s"
[[outputs.graphite]]
servers = ["localhost:2003"]
prefix = "testprfx"
[[inputs.procstat]]
pid_file = "/path/to/file/with.pid"
然后运行telegraf --config minconf.conf
。除指标名称外,Grafana部分相同。
sysdig
(在Debian和Ubuntu的仓库中可用)带有sysdig-inspect的 UI看起来非常有前途,它提供了非常细粒度的详细信息以及CPU利用率和RSS,但不幸的是,UI无法呈现它们,并且无法按顺序sysdig
过滤 procinfo
事件。写作时间。不过,这可以通过定制凿子(sysdig
用Lua编写的扩展名)来实现。
pgrep --help
进行救援。至少有--newest
和--oldest
。
Ctrl+C
在psrecord进程上只是退出而不保存绘图,您需要结束被测进程。
要在脚本上使用该信息,您可以执行以下操作:
calcPercCpu.sh
#!/bin/bash
nPid=$1;
nTimes=10; # customize it
delay=0.1; # customize it
strCalc=`top -d $delay -b -n $nTimes -p $nPid \
|grep $nPid \
|sed -r -e "s;\s\s*; ;g" -e "s;^ *;;" \
|cut -d' ' -f9 \
|tr '\n' '+' \
|sed -r -e "s;(.*)[+]$;\1;" -e "s/.*/scale=2;(&)\/$nTimes/"`;
nPercCpu=`echo "$strCalc" |bc -l`
echo $nPercCpu
使用方式:calcPercCpu.sh 1234
其中1234是pid
对于指定的$ nPid,它将在整个1秒内测量10次cpu使用情况的快照的平均值(每个延迟为0.1s * nTimes = 10);可以提供当下正在发生的事情的快速,准确的结果。
根据您的需要调整变量。
$nPercCpu
)的事实:shell,top,grep,sed,cut ... bc。例如,您可以将许多(如果不是全部)合并成1个Sed或Awk脚本。
我通常使用以下两个:
HP caliper :它是监视过程的非常好的工具,您还可以检查调用图和其他低层信息。但请注意,它仅供个人使用免费。
daemontools:用于管理UNIX服务的工具集合
使用top
和awk
可以很容易地创建例如%CPU($9
)+%MEM($10
)使用逗号分隔的日志,以后可以将其输入任何统计和图形工具中。
top -b -d $delay -p $pid | awk -v OFS="," '$1+0>0 {
print strftime("%Y-%m-%d %H:%M:%S"),$1,$NF,$9,$10; fflush() }'
输出会像
2019-03-26 17:43:47,2991,firefox,13.0,5.2
2019-03-26 17:43:48,2991,firefox,4.0,5.2
2019-03-26 17:43:49,2991,firefox,64.0,5.3
2019-03-26 17:43:50,2991,firefox,71.3,5.4
2019-03-26 17:43:51,2991,firefox,67.0,5.4
$delay
但是,这对于大字体来说不会产生良好的结果,因为$delay
由于top
输出的工作方式,打印的时间戳实际上落后了。无需赘述,一种简单的方法是记录由top
以下人员提供的时间:
top -b -d $delay -p $pid | awk -v OFS="," '$1=="top"{ time=$3 }
$1+0>0 { print time,$1,$NF,$9,$10; fflush() }'
这样时间戳是准确的,但输出仍会延迟$delay
。
没有足够的信誉来评论,但是对于psrecord,您还可以直接在Python中以编程方式直接调用它:
from psrecord.main import monitor
monitor(<pid number>, logfile = "./test.log", plot="./fig.png", include_children=True)
如果您需要特定过程一段时间的平均值,请尝试使用top的-c选项:
top -c a -pid PID
在Mac 10.8.5的顶部找到“ -c a”。
对于Scientific Linux,该选项是-S,可以交互设置。
top
实际提供此功能的版本。我在Fedora 19上的版本没有。在Ubuntu 13.04上也是如此。