我读到我可以找到进程 ID,然后使用 kill 命令将线程转储保存到文件中。但以下示例没有返回任何内容...
# ps aux | grep -i java
wcuser 9136 0.0 17.2 3416012 1412772 ? Sl Oct10 2:32 /usr/bin/java -Djava.util.logging.config.file=/home/../conf/logging.properties ..... ...... start
# kill -3 9136
什么是线程转储?
它究竟是如何工作的?
是否可以自动化定期将转储保存到文件的过程?
答案1
它会将其发送到此进程的 stdout 指向的位置。更简单的方法是使用 JDK 提供的 jstack。使用此工具,您只需执行以下操作:
jstack <pid> > thread-dump.out
确保您以运行该进程的用户身份执行此操作。
线程转储是 Java 进程中所有当前线程在堆栈上繁忙位置的快照表示。有一些工具可让您更轻松地分析原始线程转储,例如 VisualVM 或 TDA。
当然可以定期执行此操作,只需在 cronjob 中放入这样的语句即可。