非Java专家的APM:什么泄漏?
通過(guò)AppDynamics解決應(yīng)用程序問(wèn)題的速度提高了10倍–以最小的開(kāi)銷在代碼級(jí)深度監(jiān)視生產(chǎn)應(yīng)用程序。 開(kāi)始免費(fèi)試用!
內(nèi)存,內(nèi)存,內(nèi)存...
內(nèi)存是Java的關(guān)鍵部分,尤其是內(nèi)存管理。 作為開(kāi)發(fā)人員,內(nèi)存管理不是您要定期執(zhí)行的操作,也不是您要手動(dòng)執(zhí)行的操作。 Java的一大優(yōu)點(diǎn)是它能夠?yàn)槟幚韮?nèi)存模型。 當(dāng)不使用對(duì)象時(shí),Java會(huì)通過(guò)清理來(lái)幫助您。
但這也是問(wèn)題開(kāi)始的地方。 使用Java,也許您的應(yīng)用程序不再使用對(duì)象,但是如果您不告訴虛擬機(jī)您不再使用它,則它不會(huì)清除它。 這是內(nèi)存泄漏 。 我們都看過(guò)他們。 對(duì)象開(kāi)始在您的堆中累積,您的應(yīng)用程序停止運(yùn)行。
內(nèi)存泄漏通常是由于編程不當(dāng)而導(dǎo)致的-通常是在開(kāi)發(fā)人員未釋放對(duì)對(duì)象的所有引用的情況下。 如您所知,Java中的類似對(duì)象被放到集合或映射中,因此如果您不從集合中刪除特定的數(shù)據(jù)集,問(wèn)題就會(huì)變得更加復(fù)雜。 收集的東西越多,您損失的空間就越大。
當(dāng)Java為您管理內(nèi)存模型,或者創(chuàng)建/銷毀未使用的對(duì)象時(shí),它將它們放入堆中。 該堆始終具有一定的大小,并具有最大可用空間。 如果內(nèi)存管理不善,堆的空間將用完。 集合加起來(lái),然后JVM崩潰。
診斷泄漏
傳統(tǒng)上,有兩種主要的內(nèi)存泄漏診斷方法:堆轉(zhuǎn)儲(chǔ)和分析器。
第一個(gè)是堆轉(zhuǎn)儲(chǔ),基本上可以讓您查看哪個(gè)對(duì)象持有對(duì)集合的引用。 它可以使您對(duì)導(dǎo)致問(wèn)題的對(duì)象有一個(gè)很好的了解,但它不會(huì)告訴您誰(shuí)在訪問(wèn)集合,而誰(shuí)沒(méi)有訪問(wèn)集合。 它告訴您集合的位置,但不告訴您使用它的人的特征。 堆轉(zhuǎn)儲(chǔ)通常也非常大,以GB為單位,并且大堆轉(zhuǎn)儲(chǔ)很繁瑣。 分析和打開(kāi)堆轉(zhuǎn)儲(chǔ),然后閱讀并確定問(wèn)題,需要大量資源。
第二種方法是堆轉(zhuǎn)儲(chǔ)和探查器的組合,可以使您更接近一點(diǎn),但不多。 內(nèi)存探查器會(huì)嘗試幫助您分析堆轉(zhuǎn)儲(chǔ)。 他們擁有實(shí)時(shí)數(shù)據(jù),現(xiàn)在您知道是誰(shuí)在創(chuàng)建對(duì)象,但是您仍然沒(méi)有真正導(dǎo)致泄漏的原因。
假設(shè)我有一個(gè)雇員對(duì)象。 員工對(duì)象被放入集合中,探查器將告訴您創(chuàng)建它的人。 探查器沒(méi)有告訴您的是誰(shuí)將其放入集合中以及從集合中將其刪除。 探查器告訴您對(duì)象的誕生,而不是泄漏的原因。 無(wú)論如何,這可以幫助您縮小范圍,但是您需要應(yīng)用程序的扎實(shí)知識(shí)才能使探查器真正地幫助您確定原因,然后仍然需要大量時(shí)間和資源來(lái)查找泄漏。
我們從很多人那里聽(tīng)到了。 許多公司嘗試使用這些工具,但是每隔幾天他們的應(yīng)用就會(huì)崩潰。 那他們?cè)趺崔k? 他們重新啟動(dòng)JVM或CLR。 他們的應(yīng)用再次崩潰,然后重新啟動(dòng)。 應(yīng)用程序管理是一場(chǎng)噩夢(mèng),因?yàn)樗麄儫o(wú)法找到或修復(fù)其內(nèi)存泄漏。
堆轉(zhuǎn)儲(chǔ)和事件探查器都可以在開(kāi)發(fā)和預(yù)生產(chǎn)中提供幫助,但是一旦您的應(yīng)用大量使用,事件探查器就無(wú)法使用。 探查器會(huì)引入大量開(kāi)銷,堆轉(zhuǎn)儲(chǔ)幾乎會(huì)停止生產(chǎn)中應(yīng)用程序的所有處理。 基本上,您需要使該JVM / CLR上的應(yīng)用程序脫機(jī)才能完成所有工作。
隨著當(dāng)今應(yīng)用程序的發(fā)展,這些繁瑣的過(guò)程變得越來(lái)越難維護(hù)。 隨著應(yīng)用程序變得越來(lái)越復(fù)雜,堆越來(lái)越大,最終,這些方法并沒(méi)有減少它。
AppDynamics和內(nèi)存泄漏
迄今為止,我們的方法一直是提供全面的事務(wù)快照,尤其是明顯的代碼問(wèn)題,可以使您深入了解問(wèn)題的根源。 為了有效地隔離和解決內(nèi)存泄漏,事務(wù)和代碼路徑分析至關(guān)重要。
這帶給我們AppDynamics的一些有趣的發(fā)展。 我們?yōu)楣咎峁┝艘环N直接識(shí)別內(nèi)存泄漏根本原因的方法。 您可以自動(dòng)檢測(cè)泄漏,確定是誰(shuí)在創(chuàng)建泄漏,以及導(dǎo)致該泄漏的代碼路徑或業(yè)務(wù)交易。 您可以在此處了解更多信息。
這有好處嗎? 減少停機(jī)時(shí)間并降低MTTR。 我們很興奮。 希望你也是。
通過(guò)AppDynamics解決應(yīng)用程序問(wèn)題的速度提高了10倍–以最小的開(kāi)銷在代碼級(jí)深度監(jiān)視生產(chǎn)應(yīng)用程序。 開(kāi)始免費(fèi)試用!
翻譯自: https://www.javacodegeeks.com/2016/10/apm-non-java-guru-leak.html
總結(jié)
以上是生活随笔為你收集整理的非Java专家的APM:什么泄漏?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 苹果下架iPhone 14 Pro /
- 下一篇: Java Syncrhonisers