我想修改下面的脚本,只有在进程/ 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
答案 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的手册页。