我想在Java VisualVm(版本1.7.0 b110325)中过滤哪些类是cpu-profiled.为此,我尝试在Profiler - > Settings - > CPU-Settings下将" Profile only classes "设置为我的测试包,这没有任何效果.然后我尝试通过在" 不要分析类 "中设置它们来摆脱所有java.*和sun.*类,这些类也没有效果.
这只是一个错误吗?或者我错过了什么?有解决方法吗?我的意思是:
我想这样做主要是为了获得每个方法消耗的CPU的正确百分比.为此,我需要摆脱烦人的测量,例如sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run()(约70%).很多用户似乎都有这个问题,例如
我想通过JMX远程通过VisualVM分析Java应用程序.因为它是一个NAT和防火墙的EC2实例,我不能使用默认的RMI方法,需要使用我必须首先下载的可选JMXMP扩展.
注意 - 如果您想使用JMXMP连接器,下载JSR 160的参考实现FROM,并添加JMXREMOTE_OPTIONAL.JAR文件到您的CLASSPATH.您将在JMX远程API补习中找到使用JMXMP连接器的示例,包括JSR 160参考实现.
http://docs.oracle.com/javase/6/docs/technotes/guides/jmx/overview/connectors.html
但是当我去那个页面时,我找不到下载.事实上,谷歌找不到下载.我在哪里可以获得这些扩展?
我正在使用Visual VM分析程序.我的程序运行了一段时间,最后使用XChart弹出一些图表显示结果.显示图表后,我在Visual VM中注意到一些活动线程"RMI TCP Accept","Attach Listener"和"Signal Dispatcher".这些线程是什么?我假设他们只与Visual VM有关.我对么??

我使用-Xmx512m,在内存不足错误后,我得到了一个堆转储.将此堆转储加载到JAVA时,VisualVM显示的堆大小超过1 GB.
当我的-Xmx值为512 MB 时,无法理解堆大小如何增长到1 GB .

编辑
我看了这个问题被标记为重复的另一个问题,我得到了JVM具有非堆内存和其他内存部分的答案的一部分(如下图所示)

但仍有一个问题.有没有什么办法可以从堆转储中识别出只有堆内存的大小?
这是我以前在其他环境中使用其他分析工具时所看到的,但在这种情况下它尤其引人注目.
我正在运行一个运行大约12分钟的任务的CPU配置文件,并且它显示了几乎一半的时间花费在一个字面上什么都不做的方法:它有一个空体.是什么导致这个?我不相信这种方法被称为荒谬的次数,当然不会占用执行时间的一半.
对于它的价值,所讨论的方法称为startContent(),它用于通知解析事件.事件沿着一系列过滤器传递(可能是十几个),并且每个过滤器上的startContent()方法除了在链中的下一个过滤器上调用startContent()之外几乎没有任何作用.
这是纯Java代码,我在Mac上运行它.
附件是CPU采样器输出的屏幕截图:

这是一个显示调用堆栈的示例:

(因休假而延误)以下是一些显示探查器输出的图片.这些数字远远超出我期望的配置文件的样子.探查器输出似乎完全有意义,而采样器输出是虚假的.

正如你们中的一些人已经猜到的那样,有问题的工作是Saxon XML模式验证器的运行(在9Gb输入文件上).该配置文件显示大约一半的时间用于验证元素内容与简单类型(在endElement处理期间发生),大约一半用于测试关键约束的唯一性; 两个探查器视图显示了该任务的这两个方面所涉及的活动.
我无法提供来自客户端的数据.
我不能让VisualVM使用eclipse,我遵循这些说明 http://visualvm.java.net/download.html 以及这些 http://visualvm.java.net/gettingstarted.html
问题是它无法看到JDK位置是"C:\ Program Files\Java\jdk1.8.0_05",当我尝试运行应用程序时会发生这种情况

这是visualvm.conf文件的原始内容
不幸的是我的命令行也不知何故(或者我不知道该怎么做)

首先我尝试安装JProbe但它没有工作,然后我尝试了VisualVM,它也无法正常工作.我该如何解决这个问题?我浪费了5个小时,它让我疯狂.
如何在堆中找到对象的大小,包括它从其字段引用的所有对象?
在堆转储下的Classes视图中,大小仅指示对象的"浅"大小.我想知道对象的大小是什么,基本上是它通过字段引用的对象的总大小.
谢谢
我已经尝试了书中的每一个食谱,但今天的事情都不会奏效......
我正在尝试使用VisualVM来配置我在远程服务器上运行的Java应用程序,所以我用Google搜索并用Google搜索并搜索了这样做的方法,我最终得到了这个解决方案:
java -Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=9199 \
-Dcom.sun.management.jmxremote.local.only=false \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \
-jar bin/felix.jar
Run Code Online (Sandbox Code Playgroud)
运行这个会让我JMX运行我猜,所以我可以看到他在9199运行:
java 21947 root 9u IPv6 1811434 0t0 TCP *:7192 (LISTEN)
java 26376 root 14u IPv6 1844518 0t0 TCP *:9199 (LISTEN)
Run Code Online (Sandbox Code Playgroud)
此外,我可以测试该端口在Web上是否可见:

现在,当我尝试在我的机器中打开VisualVM中的连接(也可以ping jmx服务器)时,会发生这种情况:



我一定是如此愚蠢,以至于这个世界上的每个人都能把这个东西运转起来但是我.该死的...
编辑:我安装了wireshark来了解引擎盖下发生了什么,所以我看到了这个.一旦我在VisualVM中添加远程IP,wireshark就开始检测这个重复的活动:

但是,如果我尝试添加新的JMX连接并要求他连接,则wireshark甚至不会抓取该连接尝试的单个数据包.

在我看来VisualVM甚至没有尝试连接,尽管给出错误消息"无法连接"...... !! 这到底是怎么回事?
我想介绍一下在Tomcat和Eclipse上运行的Spring Web Application.我将VisualVM添加到Eclipse中,然后按照以下步骤运行应用程序以进行性能分析.
Right click on the application name >
Run As >
Run Configuration >
Java Application >
'Selected Project' >
Set 'org.apache.catalina.starup.Boostrap' as a value for Main class,
also selected VisualVM as the Launcher > clicked on Run button.
Run Code Online (Sandbox Code Playgroud)
VisualVM启动但显示以下消息:
"Cannot open requested application"
Run Code Online (Sandbox Code Playgroud)
在本地我可以看到VisualVM,Eclipse和Tomcat.
以下异常将被抛出并显示在控制台上:
Exception in thread "main" java.lang.NoClassDefFoundError:
org/apache/juli/logging/LogFactory
at org.apache.catalina.startup.Bootstrap.<clinit>(Bootstrap.java:59)
Caused by: java.lang.ClassNotFoundException: org.apache.juli.logging.LogFactory
at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 1 more
Run Code Online (Sandbox Code Playgroud)
我认为问题是因为选择了错误的服务器.也许我应该选择Tomcat但不确定如何.
sudo apt install visualvm在Ubuntu 18.04上安装后,VisualVM无法启动.它什么都不做.
启动它会visualvm -J-Djava.util.logging.config.file=logging-jconsole.properties产生以下错误消息:
java.lang.UnsatisfiedLinkError: no splashscreen in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867)
at java.lang.Runtime.loadLibrary0(Runtime.java:870)
at java.lang.System.loadLibrary(System.java:1122)
at java.awt.SplashScreen$1.run(SplashScreen.java:124)
at java.awt.SplashScreen$1.run(SplashScreen.java:122)
at java.security.AccessController.doPrivileged(Native Method)
at java.awt.SplashScreen.getSplashScreen(SplashScreen.java:121)
at org.netbeans.core.startup.Splash.<init>(Unknown Source)
at org.netbeans.core.startup.Splash.getInstance(Unknown Source)
at org.netbeans.core.startup.Main.start(Unknown Source)
at org.netbeans.core.startup.TopThreadGroup.run(Unknown Source)
at java.lang.Thread.run(Thread.java:748)
Run Code Online (Sandbox Code Playgroud)
安装JDK后问题仍然存在sudo apt install default-jdk.