我正在使用內嵌的Jetty服務器運行此應用程序。儘管堆大小根本沒有改變,但應用程序正在慢慢消耗更多的內存。具有碼頭內存泄漏問題的java服務器
這是啓動應用程序的命令:
的java -server -Xms1G -Xmx1G -Dfile.encoding = UTF-8
這是從與所述RAM的使用增加 新遺蹟圖表 它開始使用1140MB和8小時後1290MB完成
有什麼建議嗎?
[EDIT1] 添加轉儲https://www.dropbox.com/s/1gt1i9dhjtjauf0/gameserver-20160226-2107.zip?dl=0
[EDIT2] 下面是我目前的調查
=一些注意事項如何監視內存堆 之外添加參數
-XX:NativeMemoryTracking=detail -XX:+UnlockDiagnosticVMOptions -XX:+PrintNMTStatistics
運行命令 jcmd 3322 VM.native_memory摘要 @ see https://devcenter.heroku.com/articles/java-memory-issues
=檢查默認線程堆棧大小 java -XX:+ PrintFlagsFinal -version | grep的ThreadStackSize
的INTx ThreadStackSize = 1024
How to reclaim the memory used by a Java thread stack?
=瞭解最大存儲器 最大值存儲器= [-Xmx] + [-XX:MaxPermSize參數] + number_of_threads * [ - Xss] @ see https://plumbr.eu/blog/memory-leaks/why-does-my-java-process-consume-more-memory-than-xmx
=操作 縮小尺寸的線程堆棧。 (理論上,你可以低至64K ...)
-XX:ThreadStackSize=256
減少GC之後堆的最小百分比以避免擴展。
-XX:MinHeapFreeRatio=10 -XX:MaxHeapFreeRatio=10
現在將繼續監控...
您可能忘記關閉'Closeable',例如'Connection','Transaction','FileOutputStream'等。它也可能來自本地庫的使用。 –
謝謝@ArnaudDenoyelle,但我相信會顯示堆使用情況圖表,堆總是低於400MB(傷心) –
根據所提供的信息,根本不可能說你是否有內存泄漏。 –