最新历史版本 :修改Tomcat記憶體 返回文檔
編輯時間: 內容長度:图片数:目录数: 修改原因:

目錄:

1. 概述编辑

1.1 問題描述

使用者工程部署在 Tomcat 容器中,若遇到以下問題:

  • 記憶體上限溢位錯誤:java.lang.OutOfMemoryError:Java heap space

  • FineDataLink 記憶體佔用過高。

  • Tomcat 後台提示 Memory is over threshold

  • 報錯:記憶體上限溢位。

  • 想調整 Tomcat 的預設記憶體。

  • 伺服器壓力大。

需要將 FineDataLink 工程所在的 Tomcat 伺服器記憶體調大,可參考本文方法解決。

1.2 解決思路

為了避免記憶體上限溢位的問題,一方面應適當啟動磁碟快取,另一方面可以根據實際情況調整伺服器記憶體大小。

本文將詳細說明如何調整 Tomcat 伺服器記憶體大小。

2. 修改Tomcat伺服器記憶體编辑

本文僅介紹 Tomcat 類型伺服器記憶體的修改方法。

建議修改的記憶體相關配置項包括:

記憶體配置參數
說明建議值
Xmx

指定 Java 堆的最大記憶體大小

它設定堆的上限,當堆大小達到該值時,JVM將停止分配新的記憶體並觸發垃圾回收

建議大於 16G ,但不建議超過 80% 的系統記憶體

使用者可在 健康巡检查看推薦的「堆內記憶體」大小(Xmx 值)

Xms

指定 Java 堆的初始記憶體大小

它設定堆的初始大小,JVM 會在啟動時分配該大小的記憶體

建議 Xms = Xmx
MaxDirectMemorySize堆外 NIO 記憶體,指定直接記憶體(Direct Memory)的最大大小

直接記憶體不受 Java 堆大小的限制,透過本地記憶體直接分配,而不是在 Java 堆中分配

建議 2GB,參考值2~4GB

最小 2GB,不限制最大值,但需要考慮使用者伺服器記憶體的大小,FineDataLink 使用的記憶體(BIMax)<= 使用者伺服器記憶體 * 7/8

Dfineio.read_mem_limit

fineIO 讀記憶體


建議 2GB
Dfineio.write_mem_limitfineIO 寫記憶體建議 1GB

2.1 透過startup.bat、startup.sh啟動

若 Tomcat 是透過 startup.bat、startup.sh 啟動的,參考本章方法修改伺服器記憶體。

2.1.1 Linux

1)進入%Tomcat_HOME%\bin目錄。尋找名為setenv.sh的檔案。如果檔案不存在,可以建立一個新的setenv.sh檔案。

注:請確定setenv.sh檔案具有可執行權限。如果沒有可執行權限,可以使用以下命令進行設定:chmod +x setenv.sh

2)使用正文編輯器開啟setenv.sh檔案。在檔案中新增以下行來設定:

JAVA_OPTS="$JAVA_OPTS -Xms51200M -Xmx51200M -Xmn12800m -Xss1024k"
JAVA_OPTS="$JAVA_OPTS -XX:MaxDirectMemorySize=8g"
JAVA_OPTS="$JAVA_OPTS -Dfineio.read_mem_limit=2"
JAVA_OPTS="$JAVA_OPTS -Dfineio.write_mem_limit=1"

注:以上配置僅為參考配置,您可根據上方表格,依據部署所在伺服器情況調整配置參數。

3)儲存並關閉 setenv.sh 檔案。

4)重啟 Tomcat 伺服器以使修改生效。管理者登入工程,選擇「管理系統>智慧維運>負載管理>負載監視」,可以看到實時記憶體情況,如下圖所示:


2.1.2 Windows

1)進入%Tomcat_HOME%\bin目錄。尋找名為setenv.bat的檔案。如果檔案不存在,可以建立一個新的setenv.bat檔案。

2)使用正文編輯器開啟setenv.bat檔案。在檔案中新增以下行來設定:

set JAVA_OPTS=%JAVA_OPTS% -Xms51200M -Xmx51200M -Xmn12800m -Xss1024k
set JAVA_OPTS=%JAVA_OPTS% -XX:MaxDirectMemorySize=8g
set JAVA_OPTS=%JAVA_OPTS% -Dfineio.read_mem_limit=2
set JAVA_OPTS=%JAVA_OPTS% -Dfineio.write_mem_limit=1

注:以上配置僅為參考配置,您可根據上方表格,依據部署所在伺服器情況調整配置參數。

3)儲存並關閉 setenv.bat 檔案。

4)重啟 Tomcat 伺服器以使修改生效。

管理者登入工程,選擇「管理系統>智慧維運>負載管理>負載監視」,可以看到實時記憶體情況,如下圖所示:


2.2 Tomcat 為安裝版本

若透過服務啟動 Tomcat,即不是透過 startup.bat、startup.sh 啟動 Tomcat 的,參考本章方法解決。

本章以 Win10+Tomcat8+JDK1.8 為例(不同版本可能略有不同請自行處理)。

2.2.1 方法一

1)直接雙擊 Tomcat 出現在螢幕右下角的系統托盤,開啟Java選項卡,修改Initial Memory PoolMaximum Memory Pool即可。

前者為初始記憶體,後者為最大記憶體,最大記憶體儘量不要超過物理記憶體的 80% 。

2)修改後,重啟 Tomcat 設定生效。


2.2.2 方法二

1)在註冊表編輯器中,找到HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Apache Software Foundation\Procrun 2.0\Tomcat8\Parameters\Java(路徑可能有一點差別)。

修改 JvmMs(初始化記憶體)和 JvmMx(最大記憶體):

2)重啟Tomcat,設定生效。


管理者登入工程,選擇「管理系統>智慧維運>負載管理>負載監視」,可以看到實時記憶體情況,如下圖所示: