VisualVM连接到本地TomEE非常慢,无法进行堆转储

Yao*_*ocl 7 java jvm visualvm jvisualvm openejb

我在MAC OSX山狮上遇到了TomEE 1.5.1和VisualVM 1.7.0_09的一个非常奇怪的问题.

TomEE加载一些webapp后.使用VisualVM连接本地TomEE进程需要很长时间,连接后gc按钮被禁用,我无法进行堆转储.VisualVM的日志显示一些错误.

com.sun.tools.attach.AttachNotSupportedException: Unable to open socket file: target process not responding or HotSpot VM not loaded
    at sun.tools.attach.BsdVirtualMachine.<init>(BsdVirtualMachine.java:90)
    at sun.tools.attach.BsdAttachProvider.attachVirtualMachine(BsdAttachProvider.java:63)
    at com.sun.tools.attach.VirtualMachine.attach(VirtualMachine.java:213)
    at com.sun.tools.visualvm.attach.AttachModelImpl.getVirtualMachine(AttachModelImpl.java:104)
Caused: java.io.IOException: Unable to open socket file: target process not responding or HotSpot VM not loaded
Run Code Online (Sandbox Code Playgroud)

.java_pid<pid>文件夹TMP不会创建.

但是如果我在启动它之后和加载任何webapps之前使用VisualVM连接TomEE,那么.java_pid<pid>文件将被创建,VisualVM将立即连接到它,并且堆转储工作.

另一个解决方法是修改catalina.sh以将tools.jar添加到ClassPath并删除openejb javaagent,然后在TomEE完全启动后连接正常工作.

无法在ubuntu机器上重现.

Nie*_*asz 1

可能jvm内存不足。我已经看过很多次了。尝试:

  1. 增加内存限制
  2. 将 VisualVM 连接到 jvm。
  3. 部署您的应用程序。
  4. 并运行内存采样器、分析器或堆转储来诊断问题。您可能存在内存泄漏。如果您遇到内存问题,堆转储是最安全的方法。您还可以使用命令行获取堆转储并稍后在 VisualVM 中进行分析。

还要确保您的系统没有内存不足。