Eclipse Memory Analyzer(MAT):显示当前没有正在运行的进程

时间:2018-01-23 10:59:34

标签: java eclipse swing heap-dump eclipse-memory-analyzer

我试图分析我的一个Java程序(使用Swing)中的内存泄漏,所以我下载了Eclipse MAT。

到目前为止我做了什么:

  1. 单击“运行”按钮,从Eclipse中运行程序。
  2. 切换到内存分析视角
  3. 已选择"从本地运行的VM获取堆转储"程序运行时。
  4. 它显示的是没有进程在运行。它基本上是这样的:

    来自此处的图片:MAT : Eclipse is not showing any running process

    根据SO的大多数答案,您需要通过将其参数设置为-jdkhome来配置HPROF jmap转储提供程序:[jdk安装的根文件]。

    我已经完成了这件事。然而,我仍然找不到任何正在运行的进程。如果重要的话,我将JRE与JDK一起安装,而不是单独安装。

3 个答案:

答案 0 :(得分:1)

如果它是你所追求的堆转储,那么你可以使用%JAVA_HOME%/ bin / jvisualvm.exe(随JDK一起提供)来获取进程的堆转储。然后,您可以使用MAT,jvisualvm或任何其他工具对其进行分析。

答案 1 :(得分:0)

好吧,显然这是一个更深层次,更基础的问题,与Windows中的文件夹权限有关。

根据this,有两个原因可能导致无法检测到本地应用程序:

  

解决方案:这可能发生在Windows系统上,这是由用于检测运行的错误配置的jvmstat技术引起的   应用。有两个可能的原因:

     
      
  1. %TMP%\ hsperfdata_username 文件夹的权限不足 - make   确定你能够在目录中创建一个文件,并最终   更新完整文件夹访问权限。或者你可以   只需重新创建应自动设置正确的文件夹   访问权限。有关详细信息,请参阅此forums.sun.com thread

  2.   
  3. 在FAT磁盘上具有%TMP%\ hsperfdata_username 文件夹 - 默认情况下,由于安全性,jvmstat在FAT磁盘上不起作用   限制。您可以通过设置来绕过安全检查   -XX:+ VisualVM和受监视应用程序的PerfBypassFileSystemCheck标志。有关详细信息,请参阅JDK错误#5042659。

  4.   

这是因为(according to this thread从上面归档):

  

你介意cd'***到TMP定义的目录,看看是否   有一个名为hsperfdata_的目录,其中是你的   登录。这是检测缓冲区所在的目录   映射(作为共享内存文件)。每次java进程启动它   应该在该目录中创建一个文件。

所以我从中理解的是,Java应该将文件写入%TMP%\hsperfdata_<username>文件夹。该文件帮助内存分析器检测Java进程。缺少适当的权限意味着无法写入文件,内存分析器无法检测到Java进程。

所以修复就是给这个特定的文件夹赋予适当的权限。

答案 2 :(得分:0)

对我来说,我发现MAT变成错误 路径org.eclipse.mat.SnapshotException: Error getting Java processes list with 'jps'. Try to configure a JDK for the HPROF jmap provider中的MemoryAnalyzer-1.10.0.20200225-win32.win32.x86_64\mat\workspace\.metadata\.log
检查jps:打开win cmd,然后键入jps,返回jps不存在。
配置jps到环境的路径。