检索进程的CPU利用率

时间:2014-02-26 20:57:24

标签: java linux

我想修改下面的脚本,只有在进程/ pid号使用超过50%的CPU时才会运行。有谁知道如何获取这些信息?我想只使用jstack创建一个线程转储,如果特定pid的cpu利用率超过50%。

#!/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

1 个答案:

答案 0 :(得分: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来检索信息。 ps命令的结果将是一行,0到1000之间的整数为0%和100%。

请注意,cputime / realtime可能不是您想要的,所以请查看ps的手册页。