标签: jvisualvm

如何自动将JVisualVM附加到短期程序?

简单地阅读教程和使用JVisualVM,我可以手动将它附加到长时间运行的服务器或Swing应用程序,但我也想将它用于在一秒钟内运行的短程序.

我想我可以在控制台上安装我的程序块,连接JVisualVM,然后按一个键让程序完成它的实际工作.是否有较少的kludgy解决方法?

(这主要是出于我自己的好奇心,使用像JVisualVM而不是-Xprof或HPROF这样的抛光GUI会很不错.

java profiling jvisualvm

8
推荐指数
1
解决办法
696
查看次数

Java VisualVM CPU使用率和处理器关联性

根据我今天的经验,我发现Oracle的Java VisualVM显示cpu使用率占总机器核心的百分比,即使受监控的JVM在操作系统中设置的进程关联性有限.这是在"监视器"选项卡中.

限制受监控的jvm taskset(在linux,Ubuntu上),当处理器允许jvm接近100%利用率时htop,VisualVM中显示的cpu百分比显然等于cpus的总数除以允许的处理器数量.监控jvm.因此,对于这种情况,比例的分辨率是不够的.

您能否确认您在其他操作系统或一般情况下观察到相同的情况?

在显示cpu使用情况时,有没有办法让VisualVM帐户只用于亲和力分配的核心?

java jvisualvm

8
推荐指数
1
解决办法
1806
查看次数

Java VisualVM在OOME上启用堆转储

根据文档,当应用程序遇到OutOfMemoryException时,可以自动进行堆转储.
OutOfMemoryException过程刚刚从左侧菜单中消失.
这个功能在VisualVM中如何工作?

谢谢.


C:\ work\temp> java -XX:HeapDumpPath = c:/work/temp/file.hprof -XX:+ HeapDumpOnOutOfMemoryError -jar example.jar

java profiling jvisualvm

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

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
查看次数

permgen,但是Java VisualVM说"找不到GC根"

关于停止/重启web-app Tomcat 7.0.26,我有一个非常简单的'Hello world'类型的Web应用程序(Spring 3.2.1,Hibernate 4.1.9)

The following web applications were stopped (reloaded, undeployed), but their
classes from previous runs are still loaded in memory, thus causing a memory
leak (use a profiler to confirm):
/myapp
Run Code Online (Sandbox Code Playgroud)

我采取了以下步骤:启动JVisualVM右键单击Tomcat并选择"堆转储"单击[heapdump]上的"OQL控制台"然后执行此查询:

select x from org.apache.catalina.loader.WebappClassLoader x
Run Code Online (Sandbox Code Playgroud)

找到4个实例:

org.apache.catalina.loader.WebappClassLoader
Run Code Online (Sandbox Code Playgroud)

选中的"已启动"字段为"false"右键单击"this"引用并单击"Show Nearest GC Root"将显示"未找到GC根"的对话框.

我错过了什么?任何帮助将不胜感激.谢谢.

permgen jvisualvm tomcat7

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

将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
查看次数

JVisualVM可以"堆转储"按钮释放内存吗?

我有一个非常奇怪的问题.我正在开发一个基于Eclipse Equinox的OSGi应用程序; 它是使用OSGi Log Service(Equinox实现)开发的,现在我正在使用Apache Felix OSGi Log Service实现进行测试.

在API /代码方面,一切正常:OSGi日志服务是标准的,所以我可以毫无问题地从Equinox交换到Felix.

但是,我观察到了这种奇怪的行为:我启动了应用程序作为控制台程序,在控制台上查看日志输出,并将其附加到JVisualVM以分析内存使用情况; JVisualVM图显示了一个80 MB的已用堆.

13个小时后,平均堆大小达到220 MB,所以我决定分析堆转储,并按下"堆转储"按钮:在此操作之后,JVisualVM图显示使用的堆为20(分钟)-35 (最大)MB(?!?!),这个值是常数.

"堆转储"操作可以释放近200 mbs吗?如果是,为什么?

我从未在Equinox OSGi Log Service实现中看到这种行为,所以我怀疑Felix Log涉及这个问题......

谢谢

java memory jvisualvm heap-dump

6
推荐指数
2
解决办法
3891
查看次数

JVisualVM无法使用--openpid参数连接到进程

我有一个作为win-service运行的应用程序(使用Apache-Procrun).我想用JVisualVM监视该应用程序.我--openpid <PID>没有成功使用命令行参数,具有讽刺意味的是,旧的JConsole设法连接到该应用程序.

JVisualVM vs JConsole 0:1

我还检查%TMP%\hsperfdata_username了JVisualVM- 故障排除指南中描述的-Directory的所有问题.一切都很好.

如何让JVisualVM监控我的应用程序?

java jconsole jvisualvm procrun java-service-wrapper

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

从命令行获取 Java VisualVM 数据

我首先要说的是,我几乎没有使用 Java VisualVM 的经验。但是,它包含一些开发人员希望看到的信息。当我为我的应用程序打开它时,它包含一个 CPU、内存、类和线程的图表。我想知道是否有办法从命令行获取该信息。因此,如果应用程序在调用时使用了 250 MB 的内存,是否可以编写一个返回 250 MB 的命令?同样与它使用的线程数有关?

我使用的版本是 1.7.0_51。

谢谢。

cmd heap-memory jvisualvm

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

用于远程 jmx 连接的 Visualvm 中未出现 Profiler 选项卡

我正在尝试分析一个远程 tomcat appln,它是我的登台环境。但我无法获得探查器选项卡。尝试谷歌搜索,但我无法在这里找到确切的问题。我的远程和本地 jdk 版本都相同。两者都是 java 8。我使用的是visualvm 1.3.8

java profiler profiling visualvm jvisualvm

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