内存泄漏–测量频率和严重性
這篇文章是我們開放文化的一部分-我們繼續(xù)分享日常工作中的見解。 這次,我們窺視了我們價(jià)值主張的核心,即–尋找以下問題的答案:
- Java應(yīng)用程序中多長(zhǎng)時(shí)間發(fā)生一次內(nèi)存泄漏?
- 內(nèi)存泄漏有多大?
- 內(nèi)存泄漏增長(zhǎng)多快?
如果您接下來的幾分鐘與我在一起,我將根據(jù)過去六個(gè)月內(nèi)Plumbr內(nèi)存泄漏檢測(cè)器代理收集的數(shù)據(jù),一個(gè)一個(gè)地打開答案。
首先,該分析基于與Plumbr代理一起運(yùn)行的2,180種不同應(yīng)用程序 。 “不同應(yīng)用程序”的定義有些棘手,我為您省去了世俗的細(xì)節(jié),但是我們盡力根據(jù)可用數(shù)據(jù)來標(biāo)識(shí)唯一的JVM。
在這2180個(gè)應(yīng)用程序中, Plumbr發(fā)現(xiàn)了754種不同的堆內(nèi)存泄漏 。 由于某些應(yīng)用程序包含多個(gè)內(nèi)存泄漏,因此檢測(cè)到泄漏的唯一應(yīng)用程序的數(shù)量要少一些-準(zhǔn)確地說是682。 根據(jù)這些數(shù)據(jù),我們可以得出結(jié)論: 31%的Java應(yīng)用程序包含堆內(nèi)存泄漏 。 對(duì)此一針見血–我們確實(shí)承認(rèn),Plumbr最終監(jiān)視的應(yīng)用程序比我們不監(jiān)視的應(yīng)用程序更可能包含內(nèi)存泄漏。
現(xiàn)在,知道您的應(yīng)用程序中有大約三分之一的機(jī)會(huì)發(fā)生堆內(nèi)存泄漏,讓我們看看是否應(yīng)該擔(dān)心泄漏。 為此,讓我們看一下這754個(gè)堆內(nèi)存泄漏的兩個(gè)不同特征。
內(nèi)存泄漏大小
當(dāng)Plumbr發(fā)現(xiàn)內(nèi)存泄漏時(shí),它將運(yùn)行復(fù)雜的計(jì)算以確定泄漏的保留大小。 或者,以更簡(jiǎn)單的方式– Plumbr計(jì)算特定泄漏的大小(以兆字節(jié)為單位)。 下表顯示了該數(shù)據(jù):
從數(shù)據(jù)中我們可以看到,Plumbr在嬰兒期就發(fā)現(xiàn)了許多泄漏-例如,它發(fā)現(xiàn)了187個(gè)泄漏(占總泄漏的25%),而在發(fā)現(xiàn)時(shí)泄漏仍小于1MB 。 在另一種極端情況下,檢測(cè)到一些泄漏需要更長(zhǎng)的時(shí)間,因此在31種情況下,只有在泄漏到1GB之后才檢測(cè)到泄漏。 在發(fā)現(xiàn)之前,最大的泄漏已設(shè)法升級(jí)到3GB。
從上面得出的另一個(gè)有趣的結(jié)論是,大多數(shù)泄漏是在應(yīng)用程序的最終用戶感受到任何影響之前被Plumbr捕獲的–在Plumbr報(bào)告泄漏為事件時(shí),泄漏的70%仍小于100MB。
內(nèi)存泄漏速度
現(xiàn)在,應(yīng)用程序包含的泄漏不足100MB的事實(shí)已成為不可采取的措施。 將泄漏的大小與泄漏的速度耦合起來,事件的嚴(yán)重性變得更加清楚:
上圖的信息可以這樣解釋:對(duì)于6%(37次出現(xiàn))的情況,發(fā)現(xiàn)時(shí)的泄漏速度在100到500 MB /小時(shí)之間。
在極端情況下,我們的泄漏速度非常慢或非常快。 在398次(發(fā)現(xiàn)泄漏的53%)中,泄漏以每小時(shí)1MB或更少的速度遞增。 在頻譜的另一端,我們以31GB /小時(shí)或更快的速度增加了31個(gè)泄漏 。 在這方面,“記錄保存者”每小時(shí)的泄漏量超過3GB。
結(jié)合速度信息與應(yīng)用程序當(dāng)前的泄漏大小和最大堆可用信息,您可以估計(jì)特定應(yīng)用程序在崩潰前所剩下的時(shí)間,并導(dǎo)致OutOfMemoryError 。
上周五的一個(gè)特定示例:Plumbr報(bào)告了一次泄漏大小為120MB的事件。 泄漏速度為每天160MB。 將這些信息與當(dāng)前的堆使用情況和可用的最大堆鏈接在一起,我們可以預(yù)測(cè)到特定的JVM將在星期二下午2點(diǎn)之前消失。 我們錯(cuò)了六個(gè)小時(shí),如果考慮到應(yīng)用程序使用模式會(huì)隨著時(shí)間的推移而發(fā)生變化,這是預(yù)測(cè)游戲的一部分,那么預(yù)測(cè)就足夠接近了。
翻譯自: https://www.javacodegeeks.com/2014/09/memory-leaks-measuring-frequency-and-severity.html
總結(jié)
以上是生活随笔為你收集整理的内存泄漏–测量频率和严重性的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用Gradle消除开发重新部署
- 下一篇: Eclipse扩展点评估变得容易