linux中线程数超过一定阈值抓stack 有更新!

  |   0 评论   |   907 浏览

    #!/bin/bash
    
    # 设置抓取次数计数器
    capture_count=0
    
    # 获取Java进程的PID
    pid=$(pgrep -f "java")
    while [ $capture_count -lt 5000 ]; do
        # 定义文件名
        output_file="capture_$capture_count.txt"
    
        java_pids=$(pgrep -fl "java" | awk '{print $1}')
        # 获取当前线程数
        #cpu_usage=$(top -bn 1 | grep "Cpu(s)" | awk '{print $2 + $4}')
        thread_count=$(ps -T -p $java_pids| wc -l)
        # 获取当前时间
        current_time=$(date +"%Y-%m-%d %H:%M:%S") 
        if [ $(expr "$thread_count" ">" 730) -eq 1 ]; then
            echo "High thread count: $thread_count"
    
            # 抓取每个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 "thread count: $current_time $thread_count"
        fi
        
        #sleep 1
        #10毫秒
        usleep 10000
    done
    

    评论

    发表评论

    validate