这篇文章是我们开放文化的一部分-我们继续分享日常工作中的见解。 这次,我们窥视了我们价值主张的核心,即–寻找以下问题的答案:

  • Java应用程序中多长时间发生一次内存泄漏?
  • 内存泄漏有多大?
  • 内存泄漏增长多快?

如果您接下来的几分钟与我在一起,我将根据过去六个月内Plumbr内存泄漏检测器代理收集的数据,一个一个地打开答案。

首先,该分析基于与Plumbr代理一起运行的2,180种不同应用程序 。 “不同应用程序”的定义有些棘手,我为您省去了世俗的细节,但是我们尽力根据可用数据来标识唯一的JVM。

在这2180个应用程序中, Plumbr发现了754种不同的堆内存泄漏 。 由于某些应用程序包含多个内存泄漏,因此检测到泄漏的唯一应用程序的数量要少一些-准确地说是682。 根据这些数据,我们可以得出结论: 31%的Java应用程序包含堆内存泄漏 。 对此一针见血–我们确实承认,Plumbr最终监视的应用程序比我们不监视的应用程序更可能包含内存泄漏。

现在,知道您的应用程序中有大约三分之一的机会发生堆内存泄漏,让我们看看是否应该担心泄漏。 为此,让我们看一下这754个堆内存泄漏的两个不同特征。

内存泄漏大小

当Plumbr发现内存泄漏时,它将运行复杂的计算以确定泄漏的保留大小。 或者,以更简单的方式– Plumbr计算特定泄漏的大小(以兆字节为单位)。 下表显示了该数据:

从数据中我们可以看到,Plumbr在婴儿期就发现了许多泄漏-例如,它发现了187个泄漏(占总泄漏的25%),而在发现时泄漏仍小于1MB 。 在另一种极端情况下,检测到一些泄漏需要更长的时间,因此在31种情况下,只有在泄漏到1GB之后才检测到泄漏。 在发现之前,最大的泄漏已设法升级到3GB。

从上面得出的另一个有趣的结论是,大多数泄漏是在应用程序的最终用户感受到任何影响之前被Plumbr捕获的–在Plumbr报告泄漏为事件时,泄漏的70%仍小于100MB。

内存泄漏速度

现在,应用程序包含的泄漏不足100MB的事实已成为不可采取的措施。 将泄漏的大小与泄漏的速度耦合起来,事件的严重性变得更加清楚:

上图的信息可以这样解释:对于6%(37次出现)的情况,发现时的泄漏速度在100到500 MB /小时之间。

在极端情况下,我们的泄漏速度非常慢或非常快。 在398次(发现泄漏的53%)中,泄漏以每小时1MB或更少的速度递增。 在频谱的另一端,我们以31GB /小时或更快的速度增加31个泄漏 。 在这方面,“记录保存者”每小时的泄漏量超过3GB。

结合速度信息与应用程序当前的泄漏大小和最大堆可用信息,您可以估计特定应用程序在崩溃前所剩下的时间,并导致OutOfMemoryError

上周五的一个特定示例:Plumbr报告了一次泄漏大小为120MB的事件。 泄漏速度为每天160MB。 将这些信息与当前的堆使用情况和可用的最大堆链接在一起,我们可以预测到特定的JVM将在星期二下午2点之前消失。 我们错了六个小时,如果考虑到应用程序使用模式会随着时间的推移而发生变化,这是预测游戏的一部分,那么预测就足够接近了。

翻译自: https://www.javacodegeeks.com/2014/09/memory-leaks-measuring-frequency-and-severity.html

内存泄漏–测量频率和严重性相关推荐

  1. 内存泄漏_内存泄漏–测量频率和严重性

    内存泄漏 这篇文章是我们开放文化的一部分-我们将继续分享日常工作中的见解. 这次,我们窥视了我们价值主张的核心,即–寻找以下问题的答案: Java应用程序中内存泄漏多久发生一次? 内存泄漏有多大? 内 ...

  2. 内存泄露严重吗_内存泄漏–测量频率和严重性

    内存泄露严重吗 这篇文章是我们开放文化的一部分-我们将继续分享日常工作中的见解. 这次,我们窥视了我们价值主张的核心,即–寻找以下问题的答案: Java应用程序中内存泄漏多久发生一次? 内存泄漏有多大 ...

  3. 深入浅出再谈Unity内存泄漏

    作者:Arthuryu,腾讯高级开发工程师 著作权归作者所有.商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处. WeTest导读 本文通过对内存泄漏(what)及其危害性(why)的介绍 ...

  4. 【Unity】内存泄漏危害及处理方式(腾讯WeTest分析使用)

    WeTest导读 本文通过对内存泄漏(what)及其危害性(why)的介绍,引出在Unity环境下定位和修复内存泄漏的方法和工具(how).最后提出了一些避免泄漏的方法与建议. 在之前推送的文章< ...

  5. [JS] 闭包与内存泄漏

    一句话总结闭包:函数里套函数,函数返回函数. 内存泄漏:每次外部函数执行的时候,外部函数的引用地址不同,都会重新创建一个新的地址.但凡是当前活动对象中有被内部子集引用的数据,那么这个时候,这个数据不删 ...

  6. android释放acitity内存,Android 内存泄漏分析与解决方法

    在分析Android内存泄漏之前,先了解一下JAVA的一些知识 1. JAVA中的对象的创建 使用new指令生成对象时,堆内存将会为此开辟一份空间存放该对象 垃圾回收器回收非存活的对象,并释放对应的内 ...

  7. C语言中的指针和内存泄漏

    对于任何使用 C 语言的人,如果问他们 C 语言的最大烦恼是什么,其中许多人可能会回答说是指针和内存泄漏.这些的确是消耗了开发人员大多数调试时间的事项.指针和内存泄漏对某些开发人员来说似乎令人畏惧,但 ...

  8. 初步判断内存泄漏方法

    有时候,内存泄漏不明显,或者怀疑系统有内存泄漏,我们可以通过下面介绍的方法初步确认系统是否存在内存泄漏. 首先在Java命令行中增加-verbose:gc参数, 然后重新启动java进程. 当系统运行 ...

  9. 野指针与内存泄漏那些事

    野指针:不是NULL指针,是指向垃圾内存的指针 野指针成因: 1.指针变量没有被初始化:指针变量在创建时同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存. 2.指针p被free或者d ...

最新文章

  1. 字符串截取固定长度的方法
  2. Python 文件与目录操作方法总结
  3. 51Nod-1082 与7无关的数【进制+打表】
  4. V-7 Openstack 在ceph中转换镜像格式
  5. jquery.nicescroll完美滚动条使用方法
  6. 太阳粒子是什么东西_太阳光子前世今生告诉我们现在享受之阳光是十几万年前诞生的老光...
  7. 前端学习(3073):vue+element今日头条管理-删除文章失败(配合axios使用)
  8. 基于Sql Server 2008的分布式数据库的实践
  9. 一种基于随机投影的本地差分隐私高维数值型数据收集算法
  10. 自然语言处理 —— 2.1 词汇表征
  11. Java设计模式学习记录-单例模式
  12. python安装wheel失败_Python安装Pyinstaller失败,Preparing wheel metadata ... error
  13. 冰兮坊Java_java 中文字符 获取首字母(一级二级字符)
  14. appium python 抓包_Python学习教程:另辟蹊径,appium抓取app应用数据了解一下
  15. Idea2017 破解版下载注册步骤(含注册码),亲测可用
  16. 地图 插件 html 经纬度,地图插件(经纬度)
  17. 一些PDG格式的Linux书籍(转)
  18. 机器学习综述论文笔记:Machine Learning: A Review of Learning Types
  19. Cyclone IV代FPGA的可编程逻辑资源
  20. 百度2005年面试题

热门文章

  1. 购物车的功能——CSS源码
  2. ElasticSearch(笔记)
  3. TRUNCATE vs DELETE命令
  4. c++ 凸包 分治算法_三维凸包
  5. spring(1)Spring之旅
  6. Servlet---注解开发
  7. 匿名内部类与Lambda表达式
  8. Sprng boot(十三):Spring boot 小技巧
  9. apache.camel_Apache Camel 3.1 –即将推出更多骆驼核心优化
  10. 无处不再的广告_我的机器人现在无处可去。 无家可归。 无服务器。