2014-02-26 55 views
0

我想修改下面的脚本,只在进程/ 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 
+0

带'-p'的'ps'指定您感兴趣的pid,并且可以使用适当的'-o'格式说明符(特别是'%cpu')来获取CPU负载百分比。有关更多详情,请参阅man ps。 (例如:'ps -p 14557 -o%cpu'目前在我的Linux机器上显示1.7;该进程恰好是Firefox的不活动副本。) – keshlam

回答

0

基本上你需要使用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的手册页。