linux - 用于收集进程的线程转储日志的 unix 脚本

标签 linux bash thread-dump jstack

我正在尝试生成有关 HashMap.put 函数的问题。我编写了一个将运行 100 多个线程的测试代码。通过使用 jstack 或 kill,我能够获得特定线程的线程转储我的进程..问题是我无法立即捕获线程转储,我希望所有线程转储都记录在一个文件中,直到进程结束。是否有任何 linux 命令或 shell 脚本可以编写来执行此操作?

最佳答案

#!/bin/bash

if [ $# -eq 0 ]; then
    echo >&2 "Usage: jstackSeries  [ <count> [ <delay> ] ]"
    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

引用这里:

http://howtodoinjava.com/2012/12/19/how-to-get-thread-dump-in-linux-using-jstack/

关于linux - 用于收集进程的线程转储日志的 unix 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10578388/

相关文章:

java:当多个进程运行时killall -3如何工作?

c - C中的文件截断和填充

linux - 在内部使用 sudo 命令运行脚本时出现问题

c++ - 测量缓存行大小的简单测试

bash - while循环测试文件是否存在于bash中

bash - 在 bash 脚本中设置默认用户变量

bash - Imagemagick recognize -verbose 报告的文件大小与 ls -l 截然不同

linux - 在 Raspberry PI 上启动后运行 Shell 脚本

jvm - BLOCKED 线程会导致高 CPU 消耗吗

java - 如何在java中为jnlp应用程序生成线程转储