2010-04-27 95 views
21

有很多問題提出這個問題或類似的問題。如何增加一個tomcat應用程序的Java堆空間

他們都提供必須執行的命令,我不明白的是我在哪裏編寫此命令。我想永久增加我的tomcat應用程序的堆空間。

我閱讀此頁http://javahowto.blogspot.com/2006/06/6-common-errors-in-setting-java-heap.html,並根據Tomcat的部分說

Stop Tomcat server, set environment variable CATALINA_OPTS, and then restart Tomcat. Look at the file tomcat-install/bin/catalina.sh or catalina.bat for how this variable is used. For example,

set CATALINA_OPTS=-Xms512m -Xmx512m (Windows, no "" around the value)
export CATALINA_OPTS="-Xms512m -Xmx512m" (ksh/bash, "" around the value)
setenv CATALINA_OPTS "-Xms512m -Xmx512m" (tcsh/csh, "" around the value)

所以我取代了線

set CATALINA_OPTS=

set CATALINA_OPTS=-Xms512m -Xmx512m

但我仍然得到錯誤。

javax.servlet.ServletException: Servlet execution threw an exception

root cause

java.lang.OutOfMemoryError: Java heap space java.lang.reflect.Array.multiNewArray(Native Method) java.lang.reflect.Array.newInstance(Array.java:90) nom.tam.util.ArrayFuncs.newInstance(ArrayFuncs.java:1028) nom.tam.fits.ImageData.read(ImageData.java:259) nom.tam.fits.Fits.readHDU(Fits.java:573) controller.UploadServlet.retreiveFITSFileFields(UploadServlet.java:206) controller.ScanServerFiles.doPost(ScanServerFiles.java:39) javax.servlet.http.HttpServlet.service(HttpServlet.java:637) javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

+0

你有什麼錯誤? – laz 2010-04-27 04:46:36

+0

@laz - 我已經添加了堆棧跟蹤 – Ankur 2010-04-27 04:49:49

回答

7

您的更改很可能正在工作。您的應用程序是否需要大量內存 - 堆棧跟蹤顯示一些與圖像相關的功能。

我在猜測,錯誤要麼立即發生,要麼是一個大文件,要麼是在多次請求後發生。

如果錯誤馬上發生,那麼您可以進一步增加內存,或調查找​​出爲什麼需要這麼多的內存爲一個文件。

如果錯誤發生在幾個請求之後,那麼你可能有內存泄漏 - 垃圾收集器沒有回收對象。使用像JProfiler 這樣的工具可以幫助您監視虛擬機正在使用多少內存,並可以幫助您查看正在使用該內存的內容以及垃圾收集器未回收對象的原因。

+5

這個答案實際上並不回答OP關於* how *如何增加Tomcat應用程序的Java堆空間的問題? – 8bitjunkie 2015-09-21 13:23:27

9

首先,您不能僅更改tomcat應用程序的內存設置,而是更改所有tomcat實例的內存設置。

如果您從控制檯運行tomcat(使用startup.bat),您需要編輯catalina.bat並使用CATALINA_OPTS進行遊戲。例如:

set CATALINA_OPTS=-Xms512m -Xmx512m 

重新啓動tomcat將應用新的設置。

如果您仍然在使用OutOfMemoryError,則需要知道您的應用程序在特定時刻需要多少內存(nom.tam.util.ArrayFuncs ...)。你將不得不優化應用程序,或者增加提供給tomcat的內存。

+0

我在Windows上運行tomcat,我只是抓住tomcat文件並將它們解壓縮。我沒有安裝任何服務。 – Ankur 2010-04-27 04:48:46

22

有一種機制可以在不修改分發中的任何文件的情況下執行此操作。您可以創建一個單獨的文件%CATALINA_HOME%\bin\setenv.bat$CATALINA_HOME/bin/setenv.sh並將您的環境變量放在那裏。此外,內存設置應用到JVM,不Tomcat的,所以我設置JAVA_OPTS變量,而不是:

set JAVA_OPTS=-Xmx512m

+0

我無法在tomcat8的bin文件夾中找到setenv.bat文件 – 2017-11-24 09:42:57

4
  • 在Eclipse中打開服務器選項卡
  • 右鍵點擊打開
  • 點擊開放勞克配置
  • 轉到參數
  • 在這裏,您可以在VM參數添加贊同

    -Xms64m -Xmx256m 
    
2

如果您使用的是Windows,它非常簡單。只需進入System Environnement變量(右鍵點擊Computer> Properties> Advanced System Parameters> Environnement Variables);創建一個名爲= CATALINA_OPTS且值爲= -Xms512m -Xmx1024m的新系統變量。重新啓動Tomcat並享受!

1

您需要在catalina.sh文件中添加以下行。

export CATALINA_OPTS="-Xms512M -Xmx1024M" 

UPDATEcatalina.sh內容清清楚楚地寫着 -

Do not set the variables in this script. Instead put them into a script setenv.sh in CATALINA_BASE/bin to keep your customizations separate.

所以,你可以在setenv.sh添加上述代替(創建一個文件,如果不存在的話)。

+2

建議您將它放在一個單獨的文件中:bin/setenv.sh – 2014-11-26 12:14:23

+0

+1將它放在setenv.sh中,例如在Ubuntu上,您可能會有/usr/share/tomcat7/bin/catalina.sh,您可以在/usr/share/tomcat7/bin/setenv.sh中放置CATALINA_OPTS的單行代碼 – 2017-07-17 19:29:10

-1

可以作爲CATALINA_OPTS = -Xms512m -Xmx512m

打開你的tomcat-DIR /斌/ catalina.sh文件中catalina.sh設置此並添加以下行的任何地方 -

CATALINA_OPTS="$CATALINA_OPTS -Xms1024m -Xmx3024m" 

並重新啓動你的tomcat

相關問題