2017-03-07 64 views
0

我們有一個使用eclipse-jetty版本8.1.6的java webserver。最近我們開始注意到內存不足錯誤。 我們對活動線程的數量進行了少量分析。這似乎在100左右是合理的。該進程具有5GB最大堆內存和4GB初始堆內存。如何在java中查找非堆空間內存泄漏?

Process Details 
Environment: Docker(kubernetes) 
java.version="1.8.0_91" 
java.vm.info="mixed mode" 
java.vm.name="Java HotSpot(TM) 64-Bit Server VM" 
thread size = 1024K 
ulimit is unlimited for max process per user. 
Container(Pod) Max memory is allocated to be 8GB 

該網絡服務器平均每分鐘接收350個請求。我們還在ELB(kubernetes服務)後面運行了許多這樣的實例。運行幾個小時後,我們注意到這個OOM。這個問題是隨機的,它發生在壓力測試。

OOM堆棧跟蹤:

java.lang.OutOfMemoryError: unable to create new native thread 
    at java.lang.Thread.start0(Native Method) [na:1.8.0_91] 
    at java.lang.Thread.start(Thread.java:714) [na:1.8.0_91] 
    at org.eclipse.jetty.util.thread.QueuedThreadPool.startThread(QueuedThreadPool.java:441) [jetty-util-8.1.16.v20140903.jar:8.1.16.v20140903] 
    at org.eclipse.jetty.util.thread.QueuedThreadPool.dispatch(QueuedThreadPool.java:366) [jetty-util-8.1.16.v20140903.jar:8.1.16.v20140903] 

由於線程數的數量是合理的。我懷疑有一些內存泄漏。但是我無法在Docker容器上找到堆內存大小。 有沒有辦法找到它?

搜索了一段時間後,我在碼頭髮現了這個錯誤。

如何驗證如果錯誤是由於以下問題而未升級碼頭?

相關錯誤Id:https://bugs.eclipse.org/bugs/show_bug.cgi?id=477817

回答

0

你可以嘗試添加-XX:-HeapDumpOnOutOfMemoryError到Java啓動參數,並尋找到轉儲。