标签: visualvm

VisualVM连接到远程主机时出现问题

我是Java Development的新手并且是第一次使用VisualVm.我在VisualVm界面连接远程主机时遇到了一些问题.

我在远程主机上运行了JDK 1.6,同时启动了jstatd服务器.当我从本地机器上运行的VisualVm接口连接远程主机时,它已连接但接口中缺少"Profiler"选项卡和"线程"选项卡.可能是什么问题.

我的操作系统是SUSE Linux.

谢谢,

java visualvm

7
推荐指数
1
解决办法
5733
查看次数

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

我在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机器上重现.

java jvm visualvm jvisualvm openejb

7
推荐指数
1
解决办法
1215
查看次数

如何减少VisualVM对堆使用的影响?

我正在尝试优化应用程序的内存使用情况.不幸的是,使用-Dcom.sun.management.jmxremote运行我的应用程序并通过VisualVM连接它对堆使用产生了很大的影响.起初我认为这是我的应用程序问题,直到我写了一个非常简单的程序来确认它确实是JMX的开销.以下是活动的图像.

阅读本文之后,我开始明白这是由于VisualVM检索数据的方式,即通过连续轮询连接的应用程序.我通过查看VisualVM的内存采样器来证实了这一点.的RMI TCP连接(n)的螺纹被分配180KB /秒.

我的问题是,有没有办法减少VisualVM的堆使用影响?更改轮询间隔可能不是更好,因为我对堆信息感兴趣.如果这不可能,我们可以排除用于VisualVM的数据吗?至少我想更专注于我的应用程序.

运行代码

Object object = new Object();
synchronized (object) {
    object.wait();
}
Run Code Online (Sandbox Code Playgroud)

VisualVM的堆监视器活动

在此输入图像描述

java performance jmx visualvm

7
推荐指数
1
解决办法
933
查看次数

适用于Linux控制台的JVisualVM?

我需要能够在没有运行任何XWindows的Linux机器上运行的VM上进行一些内存采样.我试图远程进行,但显然JVisualVM不支持远程内存采样.

我有什么选择?

谢谢!

java visualvm

7
推荐指数
2
解决办法
2万
查看次数

使用VisualVM连接到JBoss 7

我有远程JBoss 7.1服务器,我想通过使用VisualVM或JConsole连接到此服务器.

我google了一下,发现了几个关于如何使用VisualVM或JCoonsole连接JBoss 7.1的线程/教程,例如:

不幸的是,我没有通过JMX连接到我的JBoss 7.1.

您对如何使用VisualVM连接JBoss 7.1有什么想法吗?

编辑:我将-Dcom.sun.management.jmxremote.port = 1090 -Dcom.sun.management.jmxremote.authenticate = false添加到standalone.conf.bat,但我得到了一个异常:引起:java.lang.IllegalStateException: LogManager未正确安装(必须将"java.util.logging.manager"系统属性设置为"org.jboss.logmanager.LogManager").

所以,我为JAVA_OPTS添加了另一个选项:-Dcom.sun.management.jmxremote.port = 1090 -Dcom.sun.management.jmxremote.authenticate = false -Djava.util.logging.manager = org.jboss.logmanager.LogManager但是我收到的例外是:

Could not load Logmanager "org.jboss.logmanager.LogManager"
java.lang.ClassNotFoundException: org.jboss.logmanager.LogManager
        at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
Run Code Online (Sandbox Code Playgroud)

jmx visualvm jboss7.x

7
推荐指数
1
解决办法
1万
查看次数

如何在Heap文件中找到局部变量

我有一个j2ee应用程序并通过visualVM进行监控.

让我们说我有这样的方法:

public void doStuff(int param) {
    String s = getStringVariable(param);
    StringBuilder sb = new StringBuilder();
    //Do stuff with sb object
}
Run Code Online (Sandbox Code Playgroud)

从线程点击,我可以看到我的一些线程卡在上面的方法中.所以我已经生成了一个堆转储文件来找出s和sb包含的内容.

但是我该怎么做呢?我正在使用Eclipse Memory Analyzer.

java visualvm heap-dump eclipse-memory-analyzer

7
推荐指数
1
解决办法
2892
查看次数

VisualVM:理想的堆内存使用图

我正在使用监视我的Java应用程序(写入JDK 1.7)VisualVM.以下是显示此应用程序运行的持续时间内堆内存使用情况的图表.

在此输入图像描述

看看这张图,可以看出它中有很多尖峰.这些峰值表示应用程序创建对象.一旦应用程序完成它们,它就会使用gc(在本例中隐式调用)来销毁它们.

此外,这是应用程序仍在运行时内存分析器的屏幕截图

在此输入图像描述

对我来说,图的上下性质表明了java对象的有效使用.这个推论是对的吗?

人们应该瞄准的堆使用图的理想性质是什么?

有没有其他方法可以改善我的应用程序的堆内存使用情况?

java performance visualvm heap-memory

7
推荐指数
1
解决办法
3888
查看次数

将visualvm连接到在gradle包装器中运行的java应用程序

我正在尝试将visualvm连接到我的java应用程序,该应用程序是使用jetty和gradle构建的。该应用程序在本地主机上运行,​​因此不需要远程连接。但是,每当我尝试连接到应用程序时,我只是连接到 gradle 包装器,因此无法使用 visualvm 分析我的应用程序。在这里搜索和谷歌搜索不足。

到目前为止,我已经尝试将以下行添加到我的 gradle.build 文件中

-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=9010
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Djava.rmi.server.hostname=localhost')
Run Code Online (Sandbox Code Playgroud)

我还尝试从 jetty-jmx.xml 中取消注释以下内容

<Call name="createRegistry" class="java.rmi.registry.LocateRegistry">                                                                                 
<Arg type="java.lang.Integer"><SystemProperty name="jetty.jmxrmiport" default="1099"/></Arg>                                                        
<Call name="sleep" class="java.lang.Thread">                                                                                                        
   <Arg type="java.lang.Integer">1000</Arg>                                                                                                         
</Call>                                                                                                                                             
Run Code Online (Sandbox Code Playgroud)

<New id="ConnectorServer" class="org.eclipse.jetty.jmx.ConnectorServer">                                                                              
<Arg>                                                                                                                                               
  <New class="javax.management.remote.JMXServiceURL">                                                                                               
    <Arg type="java.lang.String">rmi</Arg>                                                                                                          
    <Arg type="java.lang.String" />                                                                                                                 
    <Arg type="java.lang.Integer"><SystemProperty name="jetty.jmxrmiport" default="1099"/></Arg>                                                    
    <Arg type="java.lang.String">/jndi/rmi://<SystemProperty name="jetty.jmxrmihost" default="localhost"/>:<SystemProperty name="jetty.jmxrmiport"default="1099"/>/jmxrmi</Arg>                                                                                                                           
  </New>                                                                                                                                            
</Arg>                                                                                                                                              
<Arg>org.eclipse.jetty.jmx:name=rmiconnectorserver</Arg>                                                                                            
<Call name="start" />                                                                                                                               
Run Code Online (Sandbox Code Playgroud)

java visualvm jetty jvisualvm gradle

7
推荐指数
0
解决办法
1149
查看次数

Java VisualVM内存采样器 - 如何获取特定类的大小

我的应用程序使用的内存比我想象的要多得多,而且我试图了解哪个类正在使用大量内存并且可能没有释放它.

我正在使用VisualVM,在内存采样器中,我可以看到大部分内存都花在了Chars,Strings和Bytes上,我的所有类都使用了Strings,但是你知道VisualVM在系统中显示所有的Chars和字符串(所有的Chars与Strings相同,这使得很难理解谁持有它们),因为据我所知,拥有这些字符串的其他类的大小是在没有字符串的情况下计算的.

我怎样才能在这个工具中看到谁是"真正的"最大的类 - 那些拥有所有这些字符串的类?(最好是如果我可以从这些类中获取它们的字符串而不是相反的方式)我尝试在heapDump中使用"root到最近的GC"但是有大约4,000,000个字符串,所以我有机会找到"有问题"那些很小......

谢谢!!!

java memory memory-leaks visualvm jvisualvm

6
推荐指数
1
解决办法
7510
查看次数

使用VisualVM配置Eclipse RCP

我正在开发基于Eclipse RCP的应用程序.我想在我的应用程序中分析特定的方法:删除元素和刷新部分.

我成功地将VisualVM启动插件连接到Eclipse.在我的应用程序运行后,我从VisualVM执行了Profiler并在正在分析的应用程序中拖动/刷新了一些东西.最后,我没有在调用堆栈中看到相应的方法.我找不到任何对我的东西负责的方法,我什么也做不了.

为什么会这样?如果我在整个应用程序启动之前运行VisualVM - 一切似乎都没问题.每个方法在调用堆栈中都有正确的位置.我很好奇VisualVM的局限性.

java profiling visualvm eclipse-rcp

6
推荐指数
0
解决办法
992
查看次数