2017-05-08 80 views
0

我已經使用Akka-HTTP(https://github.com/theiterators/akka-http-microservice)和Scala編寫的AWS服務器上的我的微服務部署到Docker容器中。一旦將服務部署到AWS服務器,我就面臨內存泄漏問題&性能問題。(Scala + Akka HTTP)微服務中的內存泄露問題

我已經注意到,當服務器獲取更多的請求數量(如340mb,410mb,422mb ...)時,內存使用率增加。&取決於負載,然後它自動降至正常狀態(230mb)。但是,當服務器獲得更多請求時,內存使用量會持續增加,即使CPU使用率達到正常階段並最終達到其最大值(512mb)並崩潰,它也無法釋放未使用的內存。

如果它正確地清除了未使用的內存/資源,我們可以避免這種情況。 JVM應該使用垃圾收集器自己處理內存使用情況。但是一旦請求被處理,它就無法清除不需要的內存(對象)。我正在使用下面的代碼來清除Akka.HTTP actor對象。

try { 
    <-- code block --> 
} catch { 
case e: Exception => 
    sys.addShutdownHook(system.shutdown()) 
} finally { 
    sys.addShutdownHook(system.shutdown()) 
} 

如何在執行過程完成後立即刪除未使用的內存/資源?

請給我們一個解決方案/方法來儘快解決這個問題,因爲這對我們來說是一個非常關鍵的問題?

+0

這是非常困難的(不可能?)給這個問題有意義的答案。請考慮根據SO建議(https://stackoverflow.com/help/mcve)創建一個最小,完整和可驗證示例。 –

+0

512mb聽起來像是一個運行scala Web服務的非常小的堆。 嘗試給它更多的堆(比如說2g),然後看看是否可以解決你的問題 – Dima

+0

是什麼版本的AKK-HTTP?去年我們修復了一些內存泄漏。 – jrudolph

回答

0

首先,你應該刪除應該解決你的問題的代碼。

順便說一句,如果你在每個請求上執行它,你可以利用這些關閉鉤子來破壞所有的內存。