内存泄漏

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

  • 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将在星期二2PM之前失效。 我们错了六个小时,如果考虑到应用程序使用模式会随着时间的推移而发生变化,这是预测游戏的一部分,那么这个预测就足够接近了。

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

内存泄漏

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

  1. jni jvm 内存泄漏_内存泄漏

    OOM:内存溢出,内存泄漏多了就会造成OOM 1.什么是内存泄漏?--JVM,GC垃圾回收机制 内存不在GC掌控之内 (1)什么是垃圾回收机制? 举例: 食堂和餐馆吃饭 第一种:吃完饭了自己去把剩饭倒 ...

  2. java内存栅栏_内存屏障(Memory Barriers/Fences) - 并发编程中最基础的一项技术

    我们经常都听到并发编程,但很多人都被其高大上的感觉迷惑而停留在知道听说这一层面,下面我们就来讨论并发编程中最基础的一项技术:内存屏障或内存栅栏,也就是让一个CPU处理单元中的内存状态对其它处理单元可见 ...

  3. c语言中较常见的由内存分配引起的错误_内存越界_内存未初始化_内存太小_结构体隐含指针...

    1.指针没有指向一块合法的内存 定义了指针变量,但是没有为指针分配内存,即指针没有指向一块合法的内浅显的例子就不举了,这里举几个比较隐蔽的例子. 1.1结构体成员指针未初始化 1 2 3 4 5 6 ...

  4. cpuz北桥频率和内存频率_内存频率不是越高越好:寻找三代锐龙的最佳频率

    AMD的Zen 2架构是一个相当有趣的东西,以往的CPU都尽可能多的把东西整合到里面降低延时提升整合度,AMD这次反其道而行,CPU里面封装了单纯的计算核心CCD和整合各种控制器的I/O核心,内存控制 ...

  5. python内存模型_内存篇3:CPython的内存管理架构-L2-块

    本篇用到了C/C++的内存对齐的基础知识,我已经假定你有C/C++内存管理的相关基础. 我们在前一篇的流程图中留下了两个黑箱子,会涉及到内存模型第一层以上的其他话题,回顾下面关于第一层面向类型的内存A ...

  6. linux 内存取证_内存取证工具-volatility、foremost

    内存取证 1. 内存取证工具volatility 猜测dump文件的profile值 root@kali:~/CTF# volatility -f mem.vmem imageinfo Volatil ...

  7. java 内存池_内存池技术介绍(图文并茂,非常清楚)

    看到一篇关于内存池技术的介绍文章,受益匪浅,转贴至此. 6.1 自定义内存池性能优化的原理 如前所述,读者已经了解到"堆"和"栈"的区别.而在编程实践中,不可避 ...

  8. c语言中较常见的由内存分配引起的错误_内存越界_内存未初始化_内存太小_结构体隐含指针

    本篇是基于云天之巅博主音视频开发中的一个bug,继而查阅了的一点资料:本篇转载自博客园某博主的随笔,并做极少量的修改,原文地址:https://www.cnblogs.com/haore147/p/3 ...

  9. java内存屏障_内存屏障 | 并发编程网 – ifeve.com

    本文我将和大家讨论并发编程中最基础的一项技术:内存屏障或内存栅栏,也就是让一个CPU处理单元中的内存状态对其它处理单元可见的一项技术. CPU使用了很多优化技术来实现一个目标:CPU执行单元的速度要远 ...

最新文章

  1. Microbiome:根系分泌物驱动土壤记忆抵御植物病原菌(作者解读)
  2. 知识图普嵌入技术的极简教程:KGE以及如何计算它们
  3. ***网站必备:(经典语句)
  4. C#中怎样获取默认配置文件App.config中配置的键值对内容
  5. 从零开始 Mask RCNN 实战:基于 Win10 + Anaconda 的 MaskRCNN 环境搭建
  6. g5420核显驱动win7_9102年了,该怎么装Win7 ???
  7. 技术交流论坛_研发部第四次技术交流论坛
  8. JavaWeb: Redis存储Session方案
  9. 2015必须推荐的Android框架,猿必读系列!
  10. 访问受限 诺基亚禁止Navifirm获取固件(图)
  11. linux db2v9.7卸载,db2 卸载和安装
  12. Head First设计模式(中文版)PDF
  13. 黑客X档案 2008~2012 NPM、PYPI、DockerHub 备份
  14. go语言宕机(panic)——程序终止运行
  15. 基于51单片机十字路口交通灯_只显示绿灯时间+黄灯5s
  16. SpringBoot+Vue前后端分离java社团纳新活动报名网站
  17. sql server 入门篇
  18. IntelliJ IDEA远程debug调试
  19. oracle参数open_cursors和session_cached_cursor详解
  20. Android基于Poi生成Word

热门文章

  1. 基于Java语言构建区块链(一)—— 基本原型
  2. Vue.js 由 1 到 2 的旅程 - (1)
  3. 神经网络php代码,慢慢研究
  4. SQL Relay 0.47 发布,SQL 中间层
  5. Silverlight 4正式版发布
  6. 活动目录实战系列二(主域控无法正常启动)
  7. java 快排和堆排序
  8. HTML5 特性检测:Canvas(画布)
  9. linux 分区克隆软件 partclone 简介
  10. python3 函数 不定长参数 不定参