标签: jvisualvm

JvisualVM中采样器和分析器之间的区别是什么?

我发现JvisualVM中有两个插件,一个是采样器,另一个是探测器.

我还发现他们有类似的用户界面,但结果有很大差异,那么对他们来说有什么不同呢?

为什么他们有很大的不同?

java profiler visualvm jvisualvm

22
推荐指数
1
解决办法
4374
查看次数

在Tomcat中重新部署应用程序时发生内存泄漏

我有部署在Tomcat 7.0.70中的WebApplication.我模拟了以下情况:

  1. 我创建了堆转储.
  2. 然后我发送了Http请求,并在服务的方法中打印了当前线程及其classLoader.然后我调用了Thread.currentThread.sleep(10000).
  3. 在同一时刻,我在Tomcat的管理页面中点击了"取消部署此应用程序".
  4. 我创建了新的堆转储.
  5. 几分钟后,我创建了新的肝转储.


结果


线程转储

在下面的屏幕上,您可以看到,在我单击"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)

java multithreading tomcat jvisualvm tomcat7

22
推荐指数
2
解决办法
3477
查看次数

使用VisualVM eclipse插件发布启动项目

在"启动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

java swing visualvm jvisualvm

20
推荐指数
1
解决办法
4414
查看次数

jvisualvm活动对象和分配对象之间的区别

如截图所示,0个活动对象,9个已分配对象.实时和分配对象之间有什么区别?

jvisualvm截图

java jvisualvm

18
推荐指数
2
解决办法
4012
查看次数

为什么是锯齿形图?

当我使用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无关......

java jvm memory-management heap-memory jvisualvm

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

无法对在Windows7上作为服务运行的Tomcat7使用JVisualVM分析

我正在尝试使用在本地运行的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"消息.

我仔细检查过以下几项:

  • 通过查看JVisualVM中的JVM属性(使用Tomcat的JMX连接),Tomcat和JVisualVM都运行相同版本的Java
  • 通过查看JVisualVM中的系统属性(再次使用Tomcat的JMX连接)并查看实际的TMP/TEMP目录并确认两者的PID文件,Tomcat和JVisualVM都具有相同的"java.io.tmp"路径存在
  • 文件系统是NTFS
  • Windows用户名称中没有下划线(注意:由于我们使用"firstname.lastname"形式的网络登录,用户确实在名称中有句点,但是在JVisualVM中查看其他Java应用程序时没有问题所以不要认为这是一个问题)
  • 通过查看任务管理器中的进程,Tomcat和JVisualVM都作为同一个Windows用户执行

最后几点:

  • 我需要配置 Servlet,因此使用JMX是不够的
  • 我能够在Windows XP机器(Java 7,Tomcat 7作为服务)上进行配置,因此看起来似乎是Windows 7/64位的东西?

如果有人已经解决了这个问题,那么解决方案将会非常受欢迎.但是,只知道其他人是否正在运行相同的配置 - Windows 7 64位,Java 7 64位,Tomcat 7作为服务运行 - 成功.

更新:我没有作为服务运行,而是使用批处理文件运行Tomcat,并且完美运行:作为服务运行的是什么?

windows tomcat profiling visualvm jvisualvm

17
推荐指数
2
解决办法
8033
查看次数

使用OQL进行字符串搜索

我正在使用VisualVM来分析核心转储.我怀疑一些XML对象会导致泄漏,但是有太多的String对象要逐一进行.

我可以使用OQL搜索以'GH'开头的字符串吗?

谢谢你的帮助.

visualvm oql jvisualvm

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

在分析的背景下,什么是安全点和安全点轮询?

我面临的情况是我没有看到VisualVM应用程序没有记录某些方法调用.想找出原因并在SO上遇到这个答案.第三点提到了采样方法的潜在问题(这是我看到的唯一选项,可能是因为我正在进行远程分析).它提到关于安全点代码和安全点投票通过代码本身.这些术语是什么意思?

java profiling jvm jvisualvm

15
推荐指数
2
解决办法
3222
查看次数

jvisualvm 找不到 Java 安装

我在运行 jvisualvm 时遇到以下问题 -

机器上设置的Java相关环境变量

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 运行 -

在此输入图像描述

java visualvm jvisualvm

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

将VisualVM与IntelliJ配合使用

我正在尝试使用VisualVM和IntelliJ来分析Java应用程序.我在IntelliJ中安装了VisualVM Launcher插件.我在IntelliJ中按下带有橙色圆圈的播放按钮,启动VisualVM并在我开始运行时打开该过程.但是,当我尝试配置CPU时,它似乎没有在我的程序中分析方法.我尝试了几个不同的程序,似乎无法让任何程序与VisualVM一起工作.这就是VisualVM的样子:

在此输入图像描述

分析器似乎认为总时间是857毫秒或6.21毫秒,而实际上我的程序需要大约一分钟才能运行.它似乎捕获了"DestroyJavaVM",这不是我的程序.我正在使用VisualVM,因为它是我能找到的唯一免费的Java分析器.有什么建议?这是我的VisualVM设置:

在此输入图像描述

java visualvm intellij-idea jvisualvm

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