内存泄露严重吗

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

  • 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或更少的速度递增。 在频谱的另一端,我们有31次泄漏以每小时1GB或更快的速度不断上升 。 在这方面,“记录保存者”每小时的泄漏量超过3GB。

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

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

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

内存泄露严重吗

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

  1. js内存泄露 垃圾回收_Java内存体系结构(模型),垃圾回收和内存泄漏

    js内存泄露 垃圾回收 Java内存架构(Java内存模型) 上面是堆的Java内存模型以及Java虚拟机(JVM)中运行的任何Java应用程序的PermGen. 还提供了比率,以使您更好地了解如何在 ...

  2. java 内存泄露 书籍_java虚拟机内存溢出和泄漏实例

    测试参数设置: 1.循环调用new A()实现堆溢出,java.lang.OutOfMemoryError: Java heap space, 虚拟机参数:-Xms1M -Xmx1M -XX:+Hea ...

  3. 【内存泄露】Memory Leaks 内存优化

    什么是内存泄露 内存管理一直是Java 所鼓吹的强大优点.开发者只需要简单地创建对象,而Java的垃圾收集器将会自动管理内存空间的分配和释放. 但在很多情况下,事情并不那么简单,在 Java程序中总是 ...

  4. android中内存泄露,Android中的内存泄露

    编辑推荐: 本文来自于csdn,本文主要从java的内存模型讲起,最终举出几个内存泄露的例子和解决方案. java运行时内存模型 具体信息:http://gityuan.com/2016/01/09/ ...

  5. 检测java内存泄露_MAT 检测 Java内存泄露检测

    一.Java内存泄露例子 Vector v = new Vector( 10 ); for ( int i = 1 ;i < 100 ; i ++ ){ Object obj = new Obj ...

  6. leaks Android内存泄露,Android LeakCanary 检测内存泄露

    内存泄漏: 指程序在申请内存后 ,无法释放已经申请的内存空间,一次内存泄漏可以忽略,但内存泄漏堆积后果很严重,无论多少内存,都会被占光 内存泄露危害: 1.内存泄露最终会导致内存溢出(OOM) 2.导 ...

  7. 什么是内存泄露,如何避免内存泄露 C++

    定义 内存泄露(memory lock)是指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况. 进一步解释 内存泄露其实并非指内存再物理上的小时,而是在应用程序分配某段内存后,由于涉及错误,死去 ...

  8. 内存溢出的危害_内存溢出和内存泄漏的区别

    点击关注,我们共同每天进步一点点! 内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory:比如申请了一个integer,但给它存了lo ...

  9. vs调试c语言检查内存泄露,VisualStudio中检查内存泄露方法

    项目工程中存在内存泄露,被折磨了一晚上,终于查了出来,因为之前没有相关的经验,还比较生疏,在此记录下来,方便以后查找. 对于malloc出的内存的检测方法 这篇文章中详细地记录了从检查到找到确定位置到 ...

最新文章

  1. 浮点数存储格式学习:找到非规格数中最大和最小的数
  2. mysql查询条数为零_mysql 查询每个月发布的文章数。月份无数据显示为0。如何写SQL呢...
  3. BZOJ 1059 - 二分图匹配
  4. 微软在Build 2019大会上发布Fluid Framework协作平台
  5. 腾讯云培训认证中心开放日
  6. 登录界面点击登录后如何延迟提示成功的div的显示时间并跳转
  7. Arduino笔记-WeMos D1开发环境搭建及亮灯
  8. Linux 终端常用快捷键
  9. SQL Server整合–在单个SQL Server实例上托管多个数据库
  10. 反射机制——获取Class中的方法
  11. hutool 获取某月最后一天_Hutool之时间工具——DateUtil
  12. Excel曲线拟合及拟合公式不正确问题
  13. correlation 蒙特卡洛_蒙特卡洛模拟法
  14. 天刀各大服务器位置,天涯明月刀ol第十次合区详解 天刀ol第十次合区结果一览...
  15. 思考模式之“5W1H“
  16. avue框架中使用富文本编辑器
  17. 什么是MTTF,MTBF,MTRF
  18. 详细解读Latent Diffusion Models:原理和代码
  19. Node.js(三)路由器、中间件、MySQL模块、RESTful接口
  20. 技术2---swagger2

热门文章

  1. P1613-跑路【Floyd,倍增】
  2. P3846-[TJOI2007]可爱的质数【BSGS,数论】
  3. 欢乐纪中某B组赛【2019.1.21】
  4. 【2018.4.7】模拟赛之四-ssl2385 猜数【水题】
  5. POJ2186-Popular Cows(流行的奶牛)【tarjan,强连通分量,图论】
  6. codeforces1498 D. Bananas in a Microwave(背包+优化)
  7. HDU4035 Maze(树上期望)
  8. Codeforces Round #658 (Div. 2)
  9. MySQL UPDATE 语句一个“经典”的坑
  10. 推荐一个实用的 .gitignore 文件