如何排查Java内存泄露

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何排查Java内存泄露相关的知识,希望对你有一定的参考价值。

参考技术A 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内存检测,代码覆盖率测试,代码性能测试,线程死锁,分布式应用等几大功能模块。
参考技术B 排查内存泄漏,这篇帖子讲得很清楚
http://blog.csdn.net/gzh0222/article/details/8538727
原理:
http://blog.csdn.net/wtt945482445/article/details/52483944

#工程经验分享# 内存泄露排查

这里简单记录下ubuntu下进行程序内存消耗的检测,以及对于内存泄露的排查方法。
//获取系统当前可用内存

int GetSysMemInfo()

   int mem_free = -1; //空闲的内存 = 总内存 - 使用了的内存
   int mem_total = -1; //当前系统可用总内存
   int mem_buffers = -1; //缓存区的内存大小
   int mem_cached = -1; //缓存区的内存大小
   char name[20];
   FILE *fp;
   char buf1[128], buf2[128], buf3[128], buf4[128], buf5[128];
   int buff_len = 128;
   fp = fopen("/proc/meminfo", "r");
   if(fp == NULL)
   
       printf("GetSysMemInfo() error! file not exist\\n");
       return -1;
   
   if(NULL == fgets(buf1, buff_len, fp) ||
      NULL == fgets(buf2, buff_len, fp) ||
      NULL == fgets(buf3, buff_len, fp) ||
      NULL == fgets(buf4, buff_len, fp) ||
      NULL == fgets(buf5, buff_len, fp))
   
       printf("GetSysMemInfo() error! fail to read!\\n");
       fclose(fp);
       return -1;
   
   fclose(fp);
   sscanf(buf1, "%s%d", name, &

以上是关于如何排查Java内存泄露的主要内容,如果未能解决你的问题,请参考以下文章

cgroup 内存泄露问题排查记录

如何在linux下检测内存泄露

#工程经验分享# 内存泄露排查

#工程经验分享# 内存泄露排查

ASP.NET程序如何测试内存泄露

前端vue项目内存泄漏排查总结