获取进程的峰值 CPU 使用率

获取进程的峰值 CPU 使用率

是否可以获得进程的峰值使用率?

“top”和“ps”等工具似乎可以输出瞬时 CPU 使用情况。而“pidstat”似乎达到了平均值......

但有人注意到峰值了吗?

答案1

我认为默认情况下没有包含此信息的文件。

你必须通过第三方工具记录它,然后进行计算。

例如使用如下脚本:

while true; do uptime >> uptime.log; sleep 1; done

然后使用例如进行一些处理awk并获取您想要的数据。

这将为您提供每分钟的负载:

awk  '{print $1, substr($8, 1, length($8)-1)}' uptime.log

现在您可以获得峰值使用率。

答案2

一个可能的解决方案可能是ps按照您的建议使用 shell 脚本并安排 cron。

shell 脚本应该获取进程当前的 cpu 使用情况,将其与之前的最大值进行比较,如果更大则更新文件。

#!/bin/bash

CURRENT_VALUE=`ps -p 3445 -o %cpu | sed -n '2p'`
PREVIOUS_VALUE=`sed -n '2p' max_cpu_usage_of_pid.sh.out`

if (( $(echo "$PREVIOUS_VALUE $CURRENT_VALUE" | awk '{print ($1 > $2)}') )); then
        ps -p 3445 -o %cpu > max_cpu_usage_of_pid.sh.out
fi
  • 注1:max_cpu_usage_of_pid.sh.out文件必须存在
  • 注 2:我在 bash 脚本中比较两个十进制数字时遇到了一些困难, 这解决了

PS:我并不是真正的 bash 脚本专家,欢迎任何改进或建议:)

答案3

简短的回答是没有或可能不是您正在寻找的东西。

进程 CPU 统计数据大部分是累积的。操作系统每一刻都会使用调度程序决定要运行哪些进程,因此在任何给定点,如果将范围缩小到最小时间值,则进程会使用 100% 的 CPU。具有多个核心,其可用处理器数量为 1/N。

获得它的唯一方法是使用更长的样本量,然后继续查看累积值。这实际上就是 top 的工作原理。如果用户 jiffy 计数器之前为 100,现在为 150,我们现在知道在该时间段内“消耗”了 50 jiffy 的 CPU。查看系统计数器,我们可以确定其百分比。

因此,您可以执行一些操作,例如以低刷新时间和批处理模式运行 top。这可能会满足您的需要,但我确实想知道为什么您需要这个,它会回答您对系统的任何问题吗?

相关内容