跳轉到內容

OpenClinica 使用者手冊/OutOfMemoryError

來自華夏公益教科書,開放的書籍,開放的世界

java.lang.OutOfMemoryError: Java 堆空間

[編輯 | 編輯原始碼]

如果 Tomcat 報告包含以下訊息的內部錯誤

root cause

java.lang.OutOfMemoryError: Java heap space

您可以嘗試使用 JVM 增加最大 Java 堆大小

-Xmx<size>

切換。

檢查堆空間

[編輯 | 編輯原始碼]

在嘗試增加堆空間之前,最好先檢查它的大小。您可以透過開啟 Tomcat 的狀態頁面來查詢它。但在您可以訪問此頁面之前,您必須在 tomcat-users.xml 檔案中新增一個具有 tomcat-manager-role 的使用者。此檔案位於 Tomcat 目錄結構的 conf/tomcat-users.xml 中。在其中新增兩行

<role rolename="manager"/>
<user username="tomcat" password="s3cret" roles="manager"/>

現在您可以在瀏覽器中輸入 serveraddress:8080/manager/status 或 localhost:8080/manager/status。Tomcat 將顯示一個包含程序統計資訊的頁面。您要查詢的行標為“JVM”,它給出了三個值

例如,空閒記憶體、總記憶體和最大記憶體

Free memory: 48.42 MB Total memory: 61.87 MB Max memory: 123.75 MB

現在我們想將堆空間增加到例如 256。

增加堆空間:Linux,Tomcat 6

[編輯 | 編輯原始碼]

登入到您的伺服器。轉到 /usr/local/tomcat/bin 資料夾

建立設定環境變數的 shell 指令碼的安全副本,然後使用適當的許可權啟動您的編輯器

sudo -u tomcat cp setenv.sh setenv-20100930.sh
sudo -u tomcat vi setenv.sh

更改包含 CATALINA_OPTS 的行以適應您的記憶體需求,例如

export JAVA_OPTS="-Xms64m -Xmx256m"

儲存檔案。

關閉 Tomcat 並重新啟動。

瀏覽到 server-address:8080/manager/status 以檢查更改是否已正確應用。

增加堆空間:Windows,包括 Vista,Tomcat 5 和 6,使用 tomcat5w.exe 和 tomcat6w.exe

[編輯 | 編輯原始碼]

如何在 Tomcat 中為資料集建立增加 JVM 堆大小

  1. 停止 Apache tomcat
  2. 透過雙擊 tomcat5w.exe/tomcat6w.exe(位置:驅動器(例如 C)/tomact/bin/tomcat5w)轉到 Apache tomcat 屬性,或轉到開始>所有程式>Apache Tomcat 5.5>配置 tomcat
  3. 單擊 Java 選項卡
  4. 在 Java 選項卡下設定初始記憶體池和最大記憶體池。預設情況下,這些欄位為空。
  5. 單擊應用,然後單擊確定
  6. 重新啟動 Apache tomcat

在 Vista 中,這隻有在您將服務命名為“tomcat6”時才會起作用!

增加堆空間:Windows Vista,Tomcat 6,使用 startup.bat

[編輯 | 編輯原始碼]

在 Windows Vista 中,如果您不想將 Tomcat 作為服務啟動,您可以使用兩個批處理檔案啟動和停止 Tomcat,它們位於 CATALINA_HOME\bin 中。因為此批處理檔案作為獨立的 DOS 程序執行,所以您必須在“配置面板”、“系統”、“高階”、“系統變數”中設定涉及的環境變數。查詢“JAVA_OPTS”變數。如果找不到,請建立它。請注意,此引數也會影響所有其他 JAVA 應用程式。如果您只想為 Tomcat 的 Catalina 增加堆空間,那麼使用環境變數 CATALINA_OPTS。

如果同時設定了 CATALINA_OPTS 和 JAVA_OPTS,即使 CATALINA_OPTS 大於 JAVA_OPTS,也會使用 CATALINA_OPTS。

在引數欄位中鍵入“-Xms64m -Xmx256m”

關閉 Tomcat 並重新啟動。瀏覽到 /manager/status。JVM 行將類似於

Free memory: 48.44 MB Total memory: 61.87 MB Max memory: 247.50 MB

引數 Xms 定義 Tomcat 可用的初始記憶體量,第二個引數 Xmx 定義最大記憶體量。

另一種方法是使用 setenv.bat 檔案。此檔案並非包含在所有 Tomcat 安裝中,因此您可能需要建立它。Startup.bat 檢查一些設定,然後呼叫 catalina.bat,catalina.bat 檢查更多設定,然後如果存在,則呼叫 setenv.bat。因此,這是設定 CATALINA_OPTS 的位置。

在文字編輯器中開啟 setenv.bat 並新增(至少)一行

SET CATALINA_OPTS=-Xms64m -Xmx256m

關於 PermGen

[編輯 | 編輯原始碼]

您可以設定的另一個引數是 PermGen 的大小。根據 OpenClinica,您應該為每個 Web 例項分配約 180m 的 perm gen,為每個 Ws 例項分配約 90m 的記憶體。 [1]

您的設定將類似於

export JAVA_OPTS="-Xms256m -Xmx256m -XX:PermSize=180m"

其他資訊

[編輯 | 編輯原始碼]

Apache Tomcat 5.5 - Windows 服務 HOW-TO
Apache Tomcat 6.0 - Windows 服務 HOW-TO

華夏公益教科書