http://localhost:8080/manager/text/findleaks[?statusLine=[true|false]]
尋找內(nèi)存泄露的診斷將觸發(fā)一個(gè)徹底的垃圾回收(GC)方案,所以如果在生產(chǎn)環(huán)境中使用它,需要非常謹(jǐn)慎才行。
尋找內(nèi)存泄露的診斷會(huì)試圖確認(rèn)已導(dǎo)致內(nèi)存泄露的 Web 應(yīng)用(當(dāng)其處于停止、重新加載,以及被取消部署狀態(tài)時(shí))。
通常由一種分析器來(lái)確認(rèn)結(jié)論。診斷使用了由 StandardHost(標(biāo)準(zhǔn)主機(jī))實(shí)現(xiàn)所提供的附加功能。如果使用的是沒(méi)有擴(kuò)展自 StandHost 的自定義主機(jī),則該診斷無(wú)法生效。
已有一些文檔介紹,從 Java 代碼中顯式地觸發(fā)徹底的垃圾回收方案是不可靠的。此外,在不同的 JVM 中,也有很多選項(xiàng)禁止顯式觸發(fā)垃圾回收,比如像 -XX:+DisableExplicitGC。 如果你需要確認(rèn)診斷是否成功地實(shí)現(xiàn)了徹底的垃圾回收,可以使用 GC 日志、JConsole 分析器,或其他類(lèi)似工具。
如果該命令成功執(zhí)行,將得到類(lèi)似如下的響應(yīng):
/leaking-webapp
如果你希望在響應(yīng)中看到狀態(tài)行,那么可以在請(qǐng)求中加入 statusLine 查詢(xún)參數(shù),并將其設(shè)定為 true。
對(duì)于已停止運(yùn)行、被重新加載或被取消部署的Web 應(yīng)用,由于之前運(yùn)行所用到的類(lèi)可能仍然加載在內(nèi)存中,從而會(huì)造成內(nèi)存泄露。響應(yīng)將把這種應(yīng)用的每個(gè)上下文路徑都單列一行。如果應(yīng)用被重新加載了數(shù)次,就可能會(huì)列出幾次。
如果命令并沒(méi)有成功執(zhí)行,響應(yīng)將以 FAIL 開(kāi)頭,并包含一個(gè)錯(cuò)誤消息。