有时候,内存泄漏不明显,或者怀疑系统有内存泄漏,我们可以通过下面介绍的方法初步确认系统是否存在内存泄漏。
首先在Java命令行中增加-verbose:gc参数,
然后重新启动java进程。
当系统运行过程中,JVM进行垃圾回收的时候,会将垃圾回收的日志打印出来,通过分析
这些GC日志,我们可以初步判断系统是否存在堆内存泄漏,
8190.813: [GC 164675K->251016K(1277056K), 0.0117749 secs]
8190.825: [Full GC 251016K->164654K(1277056K), 0.8142190 secs]
8191.644: [GC 164678K->251214K(1277248K), 0.0123627 secs]
8191.657: [Full GC 251214K->164661K(1277248K), 0.8135393 secs]
8192.478: [GC 164700K->251285K(1277376K), 0.0130357 secs]
8192.491: [Full GC 251285K->164670K(1277376K), 0.8118171 secs]
8193.311: [GC 164726K->251182K(1277568K), 0.0121369 secs]
8193.323 : [Full GC 251182K->164644K(1277568K), 0.8186925 secs]
8194.156: [GC 164766K->251028K(1277760K), 0.0123415 secs]
8194.169: [Full GC 251028K->164660K(1277760K), 0.8144430 secs]
在这段GC输出中,每一项的含义如下:
我们知道,Java虚拟机的垃圾回收有两种类型: 通GC 在GC信息的输出中,[GC 164726K->251182K(1277568K), 0.0121369 secs]中的"GC"就 代表的普通GC,普通GC只回收部分垃圾对象,因此回收完毕后,系统中仍存在大量的垃 圾对象 全GC 即FULL GC,在GC信息的输出中,[Full GC 251285K->164670K(1277376K), 0.8118171secs]的"FULL GC"就代表的完全GC,完全GC,系统彻底的对垃圾对象进行回收,回收完 毕后,垃圾对象所占用的内存得到彻底的回收,此时系统中存在的对象都是真正在使用 的活动对象,这时候的Java内存真实地反映了Java对象所占用的内存的大小。 在分析系统是否存在内存泄漏时,我们关注的是在当时真正有用的对象所占用的内存的 小。如果随着系统的运行,真正的Java对象所占用的内存越来越大,那么基本上能够确认存在内存泄漏(此时要排除系统是否设计了大量的缓存)。因此在做内存泄漏的分析时,我 只需要分析Full GC的行(非完全垃圾回收,由于并没有将所有的垃圾都回收,因此对我们的 析没有价值)。
以下面的例子为例进行说明:
• 251285K 完全垃圾回收之前Java对象占用的内存大小,这个值包含两部分,一部分是正在 使用的Java对象占用的空间,另一部分是垃圾对象占用的空间。JAVA内存泄漏分析和堆内存设置 73
• 164670K 完全垃圾回收之后Java对象占用的内存大小,这个值是真正的活动Java对象占用 的内存。
• 1277376K 堆的设置最大值。
• 0.8118171 secs 表示本次完全垃圾回收占用的时间。
判断系统是否存在内存泄漏的依据是:如果系统存在内存泄漏,那么完全垃圾回收完之 的内存值应该持续上升。如果在现场能观察到这个现象,说明系统存在内存泄漏当怀疑 个系统存在内存泄漏的时候,首先使用FULL GC信息对内存泄漏进行一个初步确认,确认统是否存在内存泄漏。只检查完全垃圾回收后的可用内存值是否一直再增大,步骤如下31:. 首先截取系统稳定运行以后的GC信息(如初始化已经完成),这个非常重要,非稳定运行 期的信息无分析价值,因为你无法确认内存的增长是正常的增长还是由于内存泄漏导致 的非正常增长。. 过滤出FULL GC的行。只有FULL GC的行才有分析价值。因为完全GC后的内存是当 前Java对象真正使用的内存数量。一般系统会有两种可能:
(a) 如果完全垃圾回收后的内存持续增长32,大有一直增长到Xmx设定值的趋势,那么这 个时候基本上就可以断定系统存在内存泄漏。
(b) 如果当前完全垃圾回收后内存增长到一个值之后,又能回落,总体上处于一个动态 平衡,那么内存泄漏基本可以排除。 通过如上内存使用趋势分析之后,基本上就能确定系统是否存在堆内存泄漏。
当然这 GC信息分析只能告诉你系统是否存在堆内存泄漏,但具体哪里泄漏,它是无法告诉你的。 存泄漏的的精确定位,是要找到内存泄漏的具体位置,需要借助如下工具/手段之一可以找 真正导致内存泄漏的类或者对象。 

转载于:https://www.cnblogs.com/wx170119/p/11316880.html

初步判断内存泄漏方法相关推荐

  1. C++检测内存泄漏方法

    1.检测内存泄漏方法 这里先介绍一下windows下VS运行C/C++工程检测内存泄漏的方法. Visual Studio 调试器和 C 运行时 (CRT) 库为我们提供了检测和识别内存泄漏的有效方法 ...

  2. Linux 平台中调试 C/C++ 内存泄漏方法

    由于 C 和 C++ 程序中完全由程序员自主申请和释放内存,稍不注意,就会在系统中导入内存错误.同时,内存错误往往非常严重,一般会带来诸如系统崩溃,内存耗尽这样严重的后果.从历史上看,来自计算机应急响 ...

  3. Q28:如何判断内存泄漏

    内存泄漏问题 内存泄漏通常是因为调用了malloc/new等内存申请操作,但是缺少了对应的free/delete. 为了判断内存是否泄漏,我们一方面可以使用Linux环境下的内存泄漏检查工具Valgr ...

  4. 异常连接导致的内存泄漏排查

    目录 异常连接导致的内存泄漏排查 背景 详细流程 使用windbg分析dump文件 使用wireshark抓包分析 完成端口和重叠IO 重叠I/O 完成端口 Reactor模型与Proactor模型 ...

  5. 解决Solaris应用程序开发内存泄漏问题

    作者: 李凌云,张一峰(laoeyu) 内存泄漏是应用软件开发过程中经常会遇到的问题,应用长期内存泄漏会占用大量操作系统内存资源,直接导致应用程序运行不稳定,严重时甚至还会影响到操作系统的正常运行.为 ...

  6. JavaScript内存泄漏

    内存泄漏简介 内存泄漏(Memory Leak)是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果. 内存泄漏缺陷具有隐蔽性. ...

  7. mmap函数_分析由 mmap 导致的内存泄漏

    背景 一个程序链接 TCMalloc ,同时调用 mmap / munmap 管理一部分较大的内存 通过 TCMalloc 的统计信息,判断内存泄漏不是由 new / malloc 等常规接口导致的 ...

  8. JS中常见的内存泄漏及识别方式

    JavaScript常见的内存泄漏及识别方式 1.什么是内存 2.什么是内存泄漏 3.内存泄漏导致的后果 4.常见的内存泄漏 (1)全局变量引起的内存泄漏 (2)闭包引起的内存泄漏 (3)被遗忘的定时 ...

  9. Vue系列之常见内存泄漏定位与解决

    JavaScript 有完善的内存处理机制,能自动进行垃圾回收,但是假如一个对象一直被引用,他的内存是无法得到释放的.如果项目运行过程中,内存占用越来越高,只增不减,没有峰值,就存在内存泄漏.多页应用 ...

最新文章

  1. R语言可视化学习笔记之ggridges包
  2. [BZOJ1833][ZJOI2010]Count数字计数(DP)
  3. .NET 6 新特性 —— Random.Shared
  4. MyBatis 3 – Spring集成教程
  5. django-路由传参-视图捕获URL的参数-位置传参-关键词传参
  6. c++随机打乱数组_第四天 Java 数组与排序
  7. 服务器搭建和使用 ubuntu_Ubuntu中使用Nginx+rtmp搭建流媒体直播服务
  8. Windwos配置Maven环境变量
  9. 解决电脑启动报:Reboot and select proper boot device
  10. 首都师范大学计算机科学与技术考研分数线,2017考研:计算机科学与技术专业考研院校推荐之首都师范...
  11. 非线性光纤光学——四波混频
  12. 批量给多个 Excel 工作簿文件添加文字水印或图片水印
  13. NFT平台开发部署应该选择哪条区块链?
  14. PDMS二次开发之PML开发一些常见查询语句
  15. ie11加载项启用不了 java,经常提示此网站的某个加载项无法运行(ie10/11)
  16. 苹果6s最大屏幕尺寸_苹果 iPhone 12 Pro DXOMARK 屏幕评分 87 分,最大问题是黄色色偏 - 苹果,iPhone...
  17. one 主格 复数 宾格_主格、宾格、名词所有格
  18. eclipse的放大字体
  19. 人工智能基础(高中版)教材补充和资源分享之番外篇 Cozmo+Python+ROS+AI
  20. Android之GestureDetector-简单手势操作及通过手势缩放图片,我离职后面试收割小米等大厂offer

热门文章

  1. MSDN Webcast“深入浅出ASP.NET AJAX系列”
  2. LeetCode 笔记系列 18 Maximal Rectangle [学以致用](最大矩形)
  3. qteewidgetitem添加子节点_行为树的节点
  4. mysql表 字段 说明_mysql表字段说明
  5. laravel ajax vue6,详解用vue.js和laravel实现微信支付
  6. linux 脚本 字符串函数调用函数调用,shell自定义函数及参数调用解析
  7. echarts x轴文字个数太多_echarts x轴标签文字过多导致显示不全,最有效的3种解决方法...
  8. java事件处理模型_从零开始理解JAVA事件处理机制(3)
  9. python图表交互控件_用djang中的交互式控件制作bokeh图表
  10. c语言的发展8个过程,c语言发展过程.pptx