3 回答

TA貢獻(xiàn)1776條經(jīng)驗(yàn) 獲得超12個贊
您可以通過使用諸如visualvm 或jprofiler 之類的分析器來解決此問題,它們會向您顯示分配了內(nèi)存的位置(哪些類型的對象等)。
如果可能,您不應(yīng)該在生產(chǎn)系統(tǒng)上使用它,因?yàn)榉治隹赡軙加么罅?CPU。

TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個贊
了解我過去使用過的更多信息的另一種方法是使用AspectJ 的加載時間編織來添加特殊代碼,將內(nèi)存信息添加到您的日志文件中。這也會減慢您的系統(tǒng)速度,但是當(dāng)您的方面已經(jīng)被寫入時,不如使用配置文件。
如果可能的話,分析將是首選 - 如果不是,AspectJ 加載時間編織可能會有所幫助。

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超5個贊
您可以嘗試啟用執(zhí)行器并將內(nèi)存消耗值與 docker stats 生成的值進(jìn)行比較。
要啟用執(zhí)行器,您可以在 pom.xml 文件中添加以下依賴項(xiàng)。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
我通常使用 HAL 瀏覽器來監(jiān)控應(yīng)用程序并使用執(zhí)行器端點(diǎn)。您可以使用以下 maven 依賴項(xiàng)添加它。
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-rest-hal-browser</artifactId>
</dependency>
在 HAL 瀏覽器中,您可以嘗試使用/metrics應(yīng)用程序的端點(diǎn)。
示例輸出如下所示。
{
"mem" : 193024,
"mem.free" : 87693,
"processors" : 4,
"instance.uptime" : 305027,
"uptime" : 307077,
"systemload.average" : 0.11,
"heap.committed" : 193024,
"heap.init" : 124928,
"heap.used" : 105330,
"heap" : 1764352,
"threads.peak" : 22,
"threads.daemon" : 19,
"threads" : 22,
"classes" : 5819,
"classes.loaded" : 5819,
"classes.unloaded" : 0,
"gc.ps_scavenge.count" : 7,
"gc.ps_scavenge.time" : 54,
"gc.ps_marksweep.count" : 1,
"gc.ps_marksweep.time" : 44,
"httpsessions.max" : -1,
"httpsessions.active" : 0,
"counter.status.200.root" : 1,
"gauge.response.root" : 37.0
}
通過這種方式,您可以監(jiān)控應(yīng)用程序的內(nèi)存性能并了解應(yīng)用程序?qū)嶋H消耗了多少內(nèi)存。如果這與 docker 生成的報告類似,那么這就是您的代碼的問題。
但是我必須聲明,執(zhí)行器的使用不是生產(chǎn)友好的,因?yàn)樗旧砭哂酗@著的資源開銷。
添加回答
舉報