我发现JvisualVM中有两个插件,一个是采样器,另一个是探测器.
我还发现他们有类似的用户界面,但结果有很大差异,那么对他们来说有什么不同呢?
为什么他们有很大的不同?
我有部署在Tomcat 7.0.70中的WebApplication.我模拟了以下情况:
结果
线程转储
在下面的屏幕上,您可以看到,在我单击"redeploy"之后,除了线程"http-apr-8081-exec-10"之外,所有线程(与此Web应用程序关联)都被终止.当我设置Tomcat的属性"renewThreadsWhenStoppingContext == true"时,你可以看到一段时间后这个线程("http-apr-8081-exec-10")被杀死并且新线程(http-apr-8081-exec-11) )而不是它.所以我没想到在创建堆转储3之后会有旧的WCL,因为没有任何旧的线程或对象.
堆转储1
在以下两个屏幕上,您可以看到当应用程序运行时,只有一个WCL(其参数"started"= true).线程"http-apr-8081-exec-10"有contextClassLoader = URLClassLoader(因为它在Tomcat的池中).我只是谈论这个线程,因为你将能够看到这个线程将处理我未来的HTTP请求.
发送HTTP请求
现在我发送HTTP请求,并在我的代码中获取有关当前线程的信息.您可以看到我的请求由线程"http-apr-8081-exec-10"处理
??? 23, 2016 9:28:16 AM c.c.c.f.s.r.ReportGenerationServiceImpl INFO: request has been handled in
thread = http-apr-8081-exec-10, its contextClassLoader = WebappClassLoader
context: /hdi
delegate: false
repositories:
/WEB-INF/classes/
----------> Parent Classloader: java.net.URLClassLoader@4162ca06
Run Code Online (Sandbox Code Playgroud)
然后我单击"重新部署我的Web应用程序",我在控制台中收到以下消息.
??? 23, 2016 9:28:27 AM org.apache.catalina.loader.WebappClassLoaderBase clearReferencesThreads
SEVERE: The web application [/hdi] appears to have started a thread named [http-apr-8081-exec-10] but has failed to stop it. This is very likely …Run Code Online (Sandbox Code Playgroud) 在"启动ModificationToolkit"期间发生内部错误.
java.lang.NullPointerException
at org.eclipse.jdt.launching.JavaLaunchDelegate.launch(JavaLaunchDelegate.java:101)
at org.eclipse.visualvm.launcher.java.VisualVMJavaDelegate.launch(VisualVMJavaDelegate.java:44)
at org.eclipse.debug.internal.core.LaunchConfiguration.launch(LaunchConfiguration.java:858)
at org.eclipse.debug.internal.core.LaunchConfiguration.launch(LaunchConfiguration.java:707)
at org.eclipse.debug.internal.ui.DebugUIPlugin.buildAndLaunch(DebugUIPlugin.java:1018)
at org.eclipse.debug.internal.ui.DebugUIPlugin$8.run(DebugUIPlugin.java:1222)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53)
Run Code Online (Sandbox Code Playgroud)
我在互联网上看到了这一点,但似乎没有解决方案.我的项目在不使用此插件的情况下启动正常,此问题也会影响我的其他项目(如果我尝试使用VisualVM启动).
使用此版本的VisualVM - http://visualvm.java.net/eclipse-launcher.html
当我使用NetBeans运行下面提到的代码时,分配的堆大小图类似于锯齿形状.我附加了JVisualVM的屏幕截图,它显示了锯齿形状的堆分配图.该程序是一个简单的无限循环打印"Hello,World!" 进入控制台.
public class HelloWorld {
public static void main(String a[]){
while(true) {
System.out.println("Hello, World!");
}
}
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释使用堆图形状背后的原因吗?
PS:即使我在不使用NetBeans的情况下运行它也会发生这种情况,因此它很可能与NetBeans无关......
我正在尝试使用在本地运行的JVisualVM(JDK 1.7.0 - 06,64位)将在Apache Tomcat(7.0.34)中运行的Servlet作为Windows 7(64位)上的服务进行分析.
最初我遇到了Tomcat没有显示在本地应用程序列表中的问题,因为不同的"java.io.tmp"属性错误/功能,但在本论坛的几个帖子中建议解决它.
但是,虽然Tomcat进程现在在本地应用程序列表中显示为"本地应用程序",但是当我打开进程时,没有用于Monitor,Threads,Sampler或Profile的选项卡 - 只有JVM参数和Sytem属性子菜单的Overview选项卡-tabs显示可怕的"不支持此jvm"消息.
我仔细检查过以下几项:
最后几点:
如果有人已经解决了这个问题,那么解决方案将会非常受欢迎.但是,只知道其他人是否正在运行相同的配置 - Windows 7 64位,Java 7 64位,Tomcat 7作为服务运行 - 成功.
更新:我没有作为服务运行,而是使用批处理文件运行Tomcat,并且完美运行:作为服务运行的是什么?
我正在使用VisualVM来分析核心转储.我怀疑一些XML对象会导致泄漏,但是有太多的String对象要逐一进行.
我可以使用OQL搜索以'GH'开头的字符串吗?
谢谢你的帮助.
我在运行 jvisualvm 时遇到以下问题 -
机器上设置的Java相关环境变量

以下是PATH变量详细信息,没有提及路径C:\apps\Java8
Path=C:\ProgramData\Oracle\Java\javapath;
C:\windows\system32;
C:\windows;
C:\windows\System32\Wbem;
C:\windows\System32\WindowsPowerShell\v1.0\;
C:\windows\System32\OpenSSH\;
C:\Program Files\Microsoft\Web Platform Installer\;
C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\;
C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;
C:\Program Files\Microsoft DNX\Dnvm\;
C:\Program Files\Microsoft SQL Server\120\Tools\Binn\;
D:\apps\gradle-5.5.1-bin\bin;
D:\apps\apache-ant-1.10.5\bin;
C:\apps\Java\Java8\bin;
C:\Program Files\nodejs\;
Run Code Online (Sandbox Code Playgroud)
当我运行 jvisualvm.exe 时,出现以下错误,从该错误看来 jvisualvm 正在查找某些配置文件来定位 JDK 主路径:
在此消息中,我单击“是”按钮,然后收到以下错误,提示您正在运行 VisualVM 正在从 JRE 运行 -
我正在尝试使用VisualVM和IntelliJ来分析Java应用程序.我在IntelliJ中安装了VisualVM Launcher插件.我在IntelliJ中按下带有橙色圆圈的播放按钮,启动VisualVM并在我开始运行时打开该过程.但是,当我尝试配置CPU时,它似乎没有在我的程序中分析方法.我尝试了几个不同的程序,似乎无法让任何程序与VisualVM一起工作.这就是VisualVM的样子:
分析器似乎认为总时间是857毫秒或6.21毫秒,而实际上我的程序需要大约一分钟才能运行.它似乎捕获了"DestroyJavaVM",这不是我的程序.我正在使用VisualVM,因为它是我能找到的唯一免费的Java分析器.有什么建议?这是我的VisualVM设置: