是否可以获得进程的峰值使用率?
“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。这可能会满足您的需要,但我确实想知道为什么您需要这个,它会回答您对系统的任何问题吗?