2015-02-23 116 views
5

我正在運行tomcat7服務,它處理來自客戶的相當大的負載。我在週末離開應用程序,當我回到我注意到,tomcat的CPU使用率提高到99%,並在日誌中我發現以下錯誤:Tomcat7 java.lang.OutOfMemoryError:Java堆空間

Exception in thread "http-bio-8080-exec-908" java.lang.OutOfMemoryError: Java heap space 
Exception in thread "http-bio-8080-exec-948" java.lang.OutOfMemoryError: Java heap space 

是否意味着當時我有OutOfMemory例外我有908和948打開活動線程?

目前我的tomcat運行在默認配置下,我從來沒有增加堆大小。

我們收到大約200 queries/sec

My hardware: 
CPU : Intel(R) Xeon(R) CPU   X5650 @ 2.67GHz 
Memory: 2GB 

請問您是否正確指出我的方向,爲了解決這個問題我應該看看。

感謝您的幫助!

+1

2 GB對於服務器系統似乎很低,我建議至少得到8 GB。嘗試將Java參數-Xms和-Xmx設置爲至少1 GB。像往常一樣檢查你的代碼,看看你是否忘記清理東西。 – Davio 2015-02-23 11:43:33

+0

請將常用的jar文件移動到tomcat的lib文件夾 – 2015-02-23 11:44:18

+9

@Davio「2GB對於服務器系統來說似乎很低」是一個沒有意義的短語。它真的取決於服務器的類型和當然負載。我有512Mb或更少的服務器運行完美,而其他人需要128Gb。 – Malt 2015-02-23 11:47:40

回答

0

當您的JVM用完特定資源時,將出現
java.lang.OutOfMemoryError: Java heap space錯誤。

解決方案1:您應該增加該資源的可用性。當您的應用程序沒有足夠的Java堆空間內存來正常運行時。對於這一點,你需要改變你的JVM啓動配置和添加以下內容:

                      -Xmx1024m

以上配置將使Java的堆空間應用1024MB。您可以使用g或G代表GB,m或M代表MB,k或K代表KB。舉例而言,所有下面的等同於說,最大Java堆空間爲1GB:

-Xmx1073741824 
-Xmx1048576k 
-Xmx1024m 
-Xmx1g 


解決方案2:如果您的應用程序包含一個內存泄露,增加更多的堆只會推遲java.lang.OutOfMemoryError:Java堆空間錯誤。 如果您希望用Java堆空間解決潛在的問題,而不是屏蔽症狀,則可以使用多種工具。
例如:Plumbr工具。在其他性能問題中,它會捕獲所有的java.lang.OutOfMemoryErrors並自動告訴你是什麼導致它們。您可以查看其他可用的工具。而選擇是你的!

來源:
https://plumbr.eu/outofmemoryerror/java-heap-space

+1

發佈鏈接並不是一個好主意。它可能在未來發生變化。而是解釋並使用鏈接作爲支持。 – TungstenX 2015-08-21 11:05:01

+0

謝謝@TungstenX的建議! – programmer 2015-08-21 11:58:37

0

可能有兩個原因,

  1. 既然你沒有增加默認的內存分配,以高負載,它可能不會有足夠的資源爲所有請求提供服務,有些顯然已經耗盡內存。所以首先要嘗試調整jvm內存配置。

  2. 如果1不起作用,它可能是應用程序中可能阻止垃圾回收的錯誤。您可能想要使用附加的分析器運行應用程序,以查看隨着時間的推移收集了哪些對象,並使用該信息進行調試。

相關問題