b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

当你导出的dump文件的大小大于你配置的1024m

电脑杂谈  发布时间:2021-02-22 09:05:41  来源:网络整理

一、开发环境:

操作系统:ubuntu 1 4. 04

IDE:面向Web开发人员的Eclipse Java EE IDE。版本:Luna Service Release 2(4. 4. 2)

JDK版本:1. 7. 0_80

MAT版本:1. 5. 0

二、事件的原因

最近,通过公司的哨兵监控系统,我发现我的项目的内存使用量每天都在增加,如下图所示。对于稳定运行的Java项目,这种情况通常可能是内存泄漏。

java内存泄漏检测工具

三、使用MAT检查内存泄漏3. 1安装MAT

MAT有两种安装方法,与其他eclipse插件略有不同。

一种安装方法是将MAT作为eclipse的插件安装:启动Eclipse->帮助-> Eclipse Marketplace,然后搜索Memory Analyzer,安装并重新启动Eclipse。

另一种安装方法是将MAT作为单独的软件安装:转到官方网站并根据操作系统版本下载最新的MAT。下载后,将其解压缩以运行。

java内存泄漏检测工具

我正在使用MAT 1. 5 Linux x64版本。不同版本的MAT可能具有不同的按钮位置或功能。

3. 2修改MAT配置

解压缩MAT软件版本后,目录中有一个MemoryAnalyzer.ini文件。文件中有一个Xmx参数。此参数指示最大内存使用量。默认值为1024m。您可以根据堆转储文件的大小来修改此参数。

1. MemoryAnalyzer.ini中的参数通常默认为-vmargs- Xmx1024m,足够了。如果计算机的内存不大,则增加此参数的值将导致MemoryAnalyzer报告错误:无法创建Java虚拟机。

2.当导出的转储文件的大小大于配置的1024m(在注1中,提到的配置:-vmargs-Xmx1024m)时,当MAT输出分析报告时,它将报告一个错误:发生内部错误:“从XXX解析堆转储”。适当调整注1中的参数。

3. 3获取堆转储文件

我尝试了两种获取堆转储文件的方法

第一种方法是使用jamp获取。对于服务器上部署的程序,可以使用此方法。获取堆转储文件后,将scp到本地,然后在本地对其进行分析。 get命令是:

[普通]

jmap-dump:format = b,file =

以这种方式获得的堆转储文件只能在MAT软件中打开,并且在安装了插件的情况下没有相应的Eclipse打开选项。

另一种方法是在Eclipse中安装Mat插件,运行程序,文件->新建->其他->堆转储->接下来,选择相应的过程,然后完成。如果不进行深入研究,此方法似乎可以很好地用于远程服务器上的程序。以这种方式获取堆转储文件后,默认情况下会打开eclipse。如下图所示,选择“泄漏可疑报告”并单击“完成”以进入MAT分析页面的主页。

java内存泄漏检测工具

3. 4堆转储文件分析

在实际操作中,我使用jmap获取堆转储文件,然后将其scp到本地,然后由MAT软件加载。

加载后,首页如下图所示。主页上最有用的是直方图和可疑泄漏。

java内存泄漏检测工具

单击Leak Suspects将在与堆转储文件相同的目录中生成Leak Suspects.zip文件,并且还将从主页跳转到Leak Suspects页面。

java内存泄漏检测工具

解压缩文件后,您可以通过浏览器打开分析结果。

java内存泄漏检测工具

以下是“泄漏嫌疑人”页面

java内存泄漏检测工具

java内存泄漏检测工具_java内存泄漏检测工具_linux 内存泄漏检测

java内存泄漏检测工具

在“可疑泄漏”页面中,将给出可能的内存泄漏。如上图所示,可能发生三种内存泄漏,但是只有第一个在我的程序中,而另外两个在jar包或jdk中。可以,不用担心。

单击“详细信息”以进入详细信息页面。在详细信息页面中,“到累积点的最短路径”表示从GC根目录到内存消耗累积点的最短路径。如果内存消耗累积点具有到GC根的路径,则该内存消耗累积点将不会作为垃圾回收。

java内存泄漏检测工具

此对象中存储的所有内容均在“按类别分类的所有累积对象”中列出。

java内存泄漏检测工具

为了查找内存泄漏,我获得了两个堆转储文件,并且两个文件之间的时间间隔是一天(因为内存仅略有增加,所以很难在短时间内找到问题)。比较这两个文件的对象,可以通过比较结果轻松定位内存泄漏。

MAT同时打开两个堆转储文件,并分别打开直方图,如下图所示。在下图中,方框1按钮用于比较两个直方图。比较之后,在方框2中选择“分组依据包”,然后比较每个对象的更改。不难发现,相比于堆6. hprof,heap 3. hprof具有64个eventInfo对象。如果您熟悉代码,那么这样的结果必须能够给程序员一些启发。我还根据这种差异找到了最终内存泄漏的位置。

java内存泄漏检测工具

我的内存泄漏的位置是一个列表。此列表仅继续向其中添加eventInfo对象,但尚未发布。

修改后的代码:

java内存泄漏检测工具


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shoujiruanjian/article-359692-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      • 陈至
        陈至

        俄国重心在欧洲所以放弃在华利益

      • 刘志
        刘志

        有十万的人根本不在乎那100元

      • 陈僖公
        陈僖公

        请教授下课吧

      热点图片
      拼命载入中...