检索进程的CPU利用率
问题描述:
我想修改下面的脚本,只在进程/ PID号占用CPU的50%以上时才运行。任何人都知道如何获取这些信息?我只想使用jstack创建一个线程转储,如果特定pid的CPU利用率超过50%。检索进程的CPU利用率
#!/bin/bash
if [ $# -eq 0 ]; then
echo >&2 "Usage: jstackSeries [ [ ] ]"
echo >&2 " Defaults: count = 10, delay = 1 (seconds)"
exit 1
fi
pid=$1 # required
count=${2:-10} # defaults to 10 times
delay=${3:-1} # defaults to 1 second
while [ $count -gt 0 ]
do
jstack $pid >jstack.$pid.$(date +%H%M%S.%N)
sleep $delay
let count--
echo -n "."
done
答
基本上你需要使用ps的特定选项来提取CPU利用率。例如:
if [ `ps -o cp= -p $pid` -ge 500 ]; then
jstack $pid >jstack.$pid.$(date +%H%M%S.%N)
fi
上面使用的ps
命令指定的自定义输出格式(-o
)。 cp
是cpu的百分比(cputime/realtime)乘以10的次数。=
代表cp
没有标头。由于没有任何列的标题(全部都是),所以不会有标题行。 -p $pid
选择pid来检索信息。对于0%和100%,ps命令的结果将是一行,整数介于0和1000之间。
请注意,cputime/realtime可能并不完全符合您的要求,因此请查看ps的手册页。
带'-p'的'ps'指定您感兴趣的pid,并且可以使用适当的'-o'格式说明符(特别是'%cpu')来获取CPU负载百分比。有关更多详情,请参阅man ps。 (例如:'ps -p 14557 -o%cpu'目前在我的Linux机器上显示1.7;该进程恰好是Firefox的不活动副本。) – keshlam