java - 如何对 Linux 中无响应的 Java 应用程序/进程进行故障排除

标签 java

假设您的应用程序没有响应并且您无法将调试器附加到它,因为它拒绝一切。您所拥有的只是一个 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/

相关文章:

javaparser UnsolvedSymbolException - 正在解析的类上使用的类,使用了另一个未解析的类

java - 如何使用 JSch 的 SFTP channel 只获取目录和文本文件?

java - 将 SharedPrefs 编辑器放入实用程序类?

使用rest在neo4j中运行密码查询的java示例

java - 在每次仪器测试之前重置/清除应用程序 (Android Studio)

java - jarsigner 返回 NullPointerException 错误

java - Hibernate XML 映射 : Map abstract fields but not ID

c# - 当对集合的引用未更改时,我应该返回集合吗?

java - list .MF : difference between Main-Class and Start-Class

java - 访问类外的属性