java - 使用 JConsole 等连接到卡住的 jvm

标签 java tomcat jvm jconsole yourkit

我们正在尝试分析在生产环境中运行的远程 tomcat 应用程序。问题是网络池中的所有线程都被阻塞了,这似乎阻止了我们与 jconsole、jmc 甚至 YourKit 的连接。当 jvm 正常运行时,所有这些工具都可以正常工作。

jconsole 的错误是超时:

Could not connect to server1:9090 : Failed to retrieve RMIServer stub: javax.naming.CommunicationException [Root exception is java.rmi.ConnectIOException: error during JRMP connection establishment; nested exception is: 
java.net.SocketTimeoutException: Read timed out]
Could not connect to server1:9090. Make sure the JVM is running and that you are using the correct protocol in the Service URL (service:jmx:rmi:///jndi/rmi://server1:9090/jmxrmi).

这使得我们很难弄清楚我们的应用程序出了什么问题。服务器不使用太多 cpu,并且有空闲内存。所以没有明显的资源缺乏。 jvm 似乎已经死了

Java 版本:jdk1.7.0_75 Tomcat 版本:7.0.65

关于在这种情况下如何连接到 jvm 的任何想法?

最佳答案

你有几个选择:

  1. 发送 SIGQUIT (Linux) 或 Control-Break (Windows) 并获取堆栈 跟踪。
  2. 获取核心转储(Linux 上的 gcore),然后您就可以使用 JVM jstack之类的工具和使用核心文件的 friend

关于java - 使用 JConsole 等连接到卡住的 jvm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36262461/

相关文章:

java - 如何解决 NoClassDefFoundError Java 代理

java - 如何通过 DOM Parser/Java 交换两个 XML 元素

java - 将 Web 应用程序从 Eclipse 3.1 移动到 3.6

java - 升级Spring Boot版本1.5.19后,嵌入式tomcat无法启动,原因是端口可能已在使用中或连接器配置错误

java - 找出java中的内存分配热点

java - JVM 堆栈、堆和线程如何映射到物理内存或操作系统

java - 动态添加行后jtable中的垃圾值

java - 使用 Keycloak Java 客户端创建用户时遇到问题

tomcat - tomcat 5.5.25 上的 x-forward-for

java - 哪个引用终结器(FinalReference)或弱/幻影/软引用对于GC具有更高的优先级