#!/bin/bash
# 设置抓取次数计数器
capture_count=0
# 获取Java进程的PID
pid=$(pgrep -f "java")
while [ $capture_count -lt 5 ]; do
# 定义文件名
output_file="capture_$capture_count.txt"
# 获取当前CPU使用率
#cpu_usage=$(top -bn 1 | grep "Cpu(s)" | awk '{print $2 + $4}')
cpu_usage=$(top -b -n 1 -p $pid | grep $pid | awk '{print $9}')
# 获取当前时间
current_time=$(date +"%Y-%m-%d %H:%M:%S")
# 判断CPU使用率是否超过90%
# 浮点转数值
cpu_usage=$(awk "BEGIN{printf \"%.0f\", $cpu_usage}")
if [ $(expr "$cpu_usage" ">" 1400) -eq 1 ]; then
echo "High CPU usage detected: $cpu_usage%"
# 获取所有正在运行的Java进程的PID
java_pids=$(pgrep -fl "java" | awk '{print $1}')
# 抓取每个Java进程的堆栈信息
for pid in $java_pids; do
jstack_output=$(jstack $pid)
echo "$current_time $jstack_output" > "$output_file"
echo "JVM Stack for PID $pid (Capture $capture_count):"
done
# 增加抓取次数计数器
capture_count=$((capture_count + 1))
else
echo "CPU usage: $current_time $cpu_usage%"
fi
sleep 1
done