假设您的应用程序没有响应,并且您无法为其附加调试器,因为它拒绝一切。你所拥有的只是一个 Linux Bash 和进程 ID。你会如何调查这个问题?你会使用什么工具?我的目标是使用 Java 提高我的故障排除技能。
我们在客户现场的生产中遇到了这个特殊问题。
最佳答案
您可以通过发出以下命令从应用程序中获取线程转储:
kill -3
这将为您提供有关线程当前状态的一些信息,并希望有助于诊断问题。然而,诀窍不在于获取线程转储,而在于读取产生的线程转储——因为它们看起来有点让人不知所措。有关阅读线程转储的更多信息,请参阅此链接。
http://manikandakumar.blogspot.com/2006/12/reading-thread-dumps.html
您还可以查看作为 JDK 一部分的 jstack - 我没有专门使用它,请参阅:
http://java.sun.com/j2se/1.5.0/docs/tooldocs/share/jstack.html
关于java - 如何对 Linux 中无响应的 Java 应用程序/进程进行故障排除,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/818442/