Answers:
您仍然可以在顶部执行此操作。虽然顶运行时,按键盘上的'1',它将显示每个内核的CPU使用率。
通过使特定进程在特定用户帐户下运行来限制显示的进程,并使用“ u”类型限制该用户
top
,man
页面top -1
却说不出来!top -1 -n 1
得到一个单次迭代top
但显示单独的CPU使用率将是一个不错的选择。
您可以使用:
mpstat -P ALL 1
它显示每个内核有多少繁忙,并且每秒自动更新。输出将是这样的(在四核处理器上):
10:54:41 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
10:54:42 PM all 8.20 0.12 0.75 0.00 0.00 0.00 0.00 0.00 90.93
10:54:42 PM 0 24.00 0.00 2.00 0.00 0.00 0.00 0.00 0.00 74.00
10:54:42 PM 1 22.00 0.00 2.00 0.00 0.00 0.00 0.00 0.00 76.00
10:54:42 PM 2 2.02 1.01 0.00 0.00 0.00 0.00 0.00 0.00 96.97
10:54:42 PM 3 2.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 98.00
10:54:42 PM 4 14.15 0.00 1.89 0.00 0.00 0.00 0.00 0.00 83.96
10:54:42 PM 5 1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.00
10:54:42 PM 6 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
10:54:42 PM 7 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
尽管此命令没有回答原始问题,即它不显示特定进程的CPU内核使用情况。
您可以使用ps
。
例如,在双核CPU上具有带有两个繁忙线程的python进程:
$ ps -p 29492 -L -o pid,tid,psr,pcpu
PID TID PSR %CPU
29492 29492 1 0.0
29492 29493 1 48.7
29492 29494 1 51.9
(PSR是线程当前分配给的CPU ID)
您会看到线程在同一个CPU内核上运行(因为有GIL)
我们在jython中运行相同的python脚本,我们看到该脚本同时利用了两个内核(还有许多其他服务或任何线程,它们几乎都处于空闲状态):
$ ps -p 28671 -L -o pid,tid,psr,pcpu
PID TID PSR %CPU
28671 28671 1 0.0
28671 28672 0 4.4
28671 28673 0 0.6
28671 28674 0 0.5
28671 28675 0 2.3
28671 28676 0 0.0
28671 28677 1 0.0
28671 28678 1 0.0
28671 28679 0 4.6
28671 28680 0 4.4
28671 28681 1 0.0
28671 28682 1 0.0
28671 28721 1 0.0
28671 28729 0 88.6
28671 28730 1 88.5
您可以处理输出并计算每个CPU内核的总CPU。
不幸的是,这种方法似乎并不是100%可靠的,有时我看到在第一种情况下,两个工作线程被报告为与每个CPU内核分离,或者在后一种情况下,两个线程被报告为处于打开状态。相同的核心
该ps
解决方案几乎是我所需要的,并且抛出了一些bash确实符合原始问题的要求:查看特定进程的每核使用情况
这也显示了多线程进程的每核使用情况。
像这样使用: cpustat`pgrep processname``pgrep otherprocessname` ...
#!/bin/bash
pids=()
while [ $# != 0 ]; do
pids=("${pids[@]}" "$1")
shift
done
if [ -z "${pids[0]}" ]; then
echo "Usage: $0 <pid1> [pid2] ..."
exit 1
fi
for pid in "${pids[@]}"; do
if [ ! -e /proc/$pid ]; then
echo "Error: pid $pid doesn't exist"
exit 1
fi
done
while [ true ]; do
echo -e "\033[H\033[J"
for pid in "${pids[@]}"; do
ps -p $pid -L -o pid,tid,psr,pcpu,comm=
done
sleep 1
done
注意:这些统计信息基于进程生命周期,而不是最近的X秒,因此您需要重新启动进程以重置计数器。
我只有这个问题,在这里找到了类似的答案。
方法是设置top
所需的方式,然后按W
(大写字母W)。这会将top
的当前布局保存到$ HOME / .toprc中的配置文件中
尽管如果您要top
使用不同的配置运行多个,这可能不起作用。
因此,通过我认为的解决方法,您可以通过执行以下任一操作来写入不同的配置文件/使用不同的配置文件...
1)重命名二进制文件
ln -s /usr/bin/top top2
./top2
现在.top2rc
将要写入您的$ HOME
2)将$ HOME设置为其他路径,因为它将配置文件写入$ HOME / .binary-name.rc文件
HOME=./
top
现在.toprc
将要写入当前文件夹。
通过使用其他人的注释在顶部添加各种使用情况记帐,您可以为该信息创建批输出,然后通过脚本合并该信息。也许不如您编写脚本那么简单,但我发现top可以为我提供所有进程,以便以后我可以概述并捕获长期可能会错过的状态(由于进程混乱而无法解释的CPU突然使用)
我以为perf stat
是你所需要的。
当您指定--cpu=list
选项时,它显示了过程的特定用法。这是一个使用perf stat --cpu=0-7 --no-aggr -- make all -j
命令监视cpu使用情况以构建项目的示例。输出为:
CPU0 119254.719293 task-clock (msec) # 1.000 CPUs utilized (100.00%)
CPU1 119254.724776 task-clock (msec) # 1.000 CPUs utilized (100.00%)
CPU2 119254.724179 task-clock (msec) # 1.000 CPUs utilized (100.00%)
CPU3 119254.720833 task-clock (msec) # 1.000 CPUs utilized (100.00%)
CPU4 119254.714109 task-clock (msec) # 1.000 CPUs utilized (100.00%)
CPU5 119254.727721 task-clock (msec) # 1.000 CPUs utilized (100.00%)
CPU6 119254.723447 task-clock (msec) # 1.000 CPUs utilized (100.00%)
CPU7 119254.722418 task-clock (msec) # 1.000 CPUs utilized (100.00%)
CPU0 8,108 context-switches # 0.068 K/sec (100.00%)
CPU1 26,494 context-switches (100.00%)
CPU2 10,193 context-switches (100.00%)
CPU3 12,298 context-switches (100.00%)
CPU4 16,179 context-switches (100.00%)
CPU5 57,389 context-switches (100.00%)
CPU6 8,485 context-switches (100.00%)
CPU7 10,845 context-switches (100.00%)
CPU0 167 cpu-migrations # 0.001 K/sec (100.00%)
CPU1 80 cpu-migrations (100.00%)
CPU2 165 cpu-migrations (100.00%)
CPU3 139 cpu-migrations (100.00%)
CPU4 136 cpu-migrations (100.00%)
CPU5 175 cpu-migrations (100.00%)
CPU6 256 cpu-migrations (100.00%)
CPU7 195 cpu-migrations (100.00%)
左列是特定的CPU索引,最右边的列是CPU的使用情况。如果不指定该--no-aggr
选项,则结果将汇总在一起。--pid=pid
如果您要监视正在运行的进程,该选项将有所帮助。
尝试-a --per-core
还是尝试-a perf-socket
,这将显示更多的分类信息。
有关用法的更多信息,请perf stat
参见本教程:perf cpu statistic,也perf help stat
将有助于了解选项的含义。
I
切换Irix模式(与Solaris模式相反)。时on
,进程列表中显示的百分比是相对于CPU线程的百分比。如果为off
,则显示的百分比相对于CPU的总容量(即,所有线程 -亦称所有内核)。