java如何查内存泄露_如何排查Java内存泄露

如何排查Java内存泄露

关注:235  答案:2  mip版

解决时间 2021-01-30 11:16

e6cb1a03ad541b3098697807b7bf1798.png

提问者妳狠僤莼

2021-01-30 03:46

如何排查Java内存泄露

最佳答案

e6cb1a03ad541b3098697807b7bf1798.png

二级知识专家過去噈像壹場夢

2021-01-30 04:43

1. Memory Analyzer-是一款开源的JAVA内存分析软件,查找内存泄漏,能容易找到大块内存并验证谁在一直占用它,它是基于Eclipse RCP(Rich Client Platform),可以下载RCP的独立版本或者Eclipse的插件。

2. JProbe-分析Java的内存泄漏。

3. JProfiler-一个全功能的Java剖析工具,专用于分析J2SE和J2EE应用程序。它把CPU、执行绪和内存的剖析组合在一个强大的应用中,GUI可以找到效能瓶颈、抓出内存泄漏、并解决执行绪的问题。

4. JRockit-用来诊断Java内存泄漏并指出根本原因,专门针对Intel平台并得到优化,能在Intel硬件上获得最高的性能。

5. YourKit .NET & Java Profiling业界领先的Java和.NET程序性能分析工具。

6. AutomatedQA -AutomatedQA的获奖产品performance profiling和memory debugging工具集的下一代替换产品,支持Microsoft, Borland, Intel, Compaq 和 GNU编译器。可以为.NET和Windows程序生成全面细致的报告,从而帮助您轻松隔离并排除代码中含有的性能问题和内存/资源泄露问题。支持.Net 1.0,1.1,2.0,3.0和Windows 32/64位应用程序。

7. Compuware DevPartner Java Edition-包含Java内存检测,代码覆盖率测试,代码性能测试,线程死锁,分布式应用等几大功能模块。

全部回答

e6cb1a03ad541b3098697807b7bf1798.png

1楼全球变暖丶我心却变冷

2021-01-30 04:59

很久之前用过的,参考:

第一种、本地程序由jprofiler来引导程序启动,

第二种、在客户端远程监控服务端的cs模式,必须在客户端和服务端都安装jprofiler,服务端需要在环境变量里加入ld_library_path 值为jprofiler 的库文件所在路径,比如 $jprofiler_home/bin/linux-x86,然后将服务端的启动脚本考到客户端上,在客户端配置时有一步选择这个脚本(locate the start script),jprofiler会给脚本添加一些自己的配置,然后服务端使用jprofiler改好的这个脚本启动,这时候是不会真正启动的,他在等待客户端的触发,客户端jprofiler再启动的时候就可以远程监控到服务端jvm了。本地的程序的话按照向导就很容易做了。

分析:

1、揣测、在memory views这个页面右键点击比较有可能出现泄漏的类,然后add selection to class tracker。有几项最常出现泄漏的最好加进来:string,char[],hashmap的entry,以及用过滤器通过包名筛选出自己的项目里用到的类

2、跟踪、经过过一段时间后,查看memeory views里的class tracker的tab页,可以看到对象数量在这一段时间内的记录,如果有增长过快、或持续增长而不释放的则会造成泄漏

3、追溯、定位了这个类后再就看一下是谁引用他导致内存没有释放,在heap walker里,找到刚才的class,右键它查看他的引用references,针对可能出现问题的类进行源码浏览、确定根源在哪里

我要举报

如以上问答内容为低俗/色情/暴力/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!

→点此我要举报以上信息!←

推荐资讯

大家都在看

你可能感兴趣的:(java如何查内存泄露)