linux中cpu使用超过一定阈值抓stack

  |   0 评论   |   840 浏览

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

    评论

    发表评论

    validate