反饋已提交

網絡繁忙

Tomcat修改記憶體

1. 概述

1.1 問題描述

  • 預覽範本時報錯記憶體上限溢位:java.lang.OutOfMemoryError:Java heap space

  • Tomcat 後臺提示 Memory is over threshold

  • 報錯:gc overhead

  • 報錯:記憶體上限溢位

  • FineReport 記憶體佔用過高

  • 想調整設計器預設記憶體

  • 想調整 Tomcat 預設記憶體

  • 設計器用久了響應速度慢,出現卡頓

  • 預覽範本經常出現等待佇列中

  • 伺服器壓力大

1.2 原因分析

這些報錯和現象,往往是由於伺服器的 JVM 不夠用而丟擲的錯誤,JVM 在啟動的時候會自動設定 heap size 的值。

當 heap size 設定偏小,除了報異常資訊外,還會發現執行報表的速度變慢了。

1.3 解決思路

為了避免記憶體上限溢位的問題,使用者應當適當調整伺服器/設計器記憶體大小,並適當啟用磁碟快取功能。

本文將詳細說明如何調整 Tomcat 伺服器記憶體大小、如何調整設計器記憶體大小、如何開啓磁碟快取功能。

2. 修改Tomcat伺服器記憶體

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

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

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

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

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

建議:

8GB <= Xmx < 32 GB或者

40GB <= Xmx <= 64GB

注:< 8GB 有當機風險,32GB ~ 40GB 會導緻效能問題,> 64GB 效能差

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

Xms

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

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

建議 Xms = Xmx
Xmn

指定年輕代(Young Generation)的大小

年輕代是堆記憶體的一部分,用於存放建立立的物件。在垃圾回收程式中,年輕代中的存活物件會被行動到存活區或老年代

建議 Xmn = 1/4 * Xmx

Xss

單執行緒使用棧空間

建議 Xss 的值不超過 1024

該參數一般無需配置,可查看原始值並自行調小

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

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

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

最小2GB,不限制最大值,但需要考慮使用者伺服器記憶體的大小,FineBI 使用的記憶體(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 -Xms8192M -Xmx8192M -Xmn2048m -Xss1024k"

JAVA_OPTS="$JAVA_OPTS -XX:MaxDirectMemorySize=2g"

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% -Xms8192M -Xmx8192M -Xmn2048m -Xss1024k

set JAVA_OPTS=%JAVA_OPTS% -XX:MaxDirectMemorySize=2g

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,設定生效。

2.3 驗證修改是否成功

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

3. 修改設計器記憶體

3.1 Windows

1)關閉設計器。

2)進入%FR_HOME%\bin目錄,尋找designer.vmoptions檔案。

3)使用正文編輯器開啟designer.vmoptions檔案,修改 Xmx 值。儲存並關閉檔案。

4)重啓設計器生效。

3.2 Mac

1)關閉設計器。

2)進入%FR_HOME%\bin目錄,右擊designer.app,點選「顯示包內容」。

3)開啟Content/vmoptions.txt檔案,修改 Xmx 值。儲存並關閉檔案。

4)重啓設計器生效。

3.3 驗證修改是否成功

管理者登入設計器的數據決策系統,選擇「管理系統>智慧維運>負載管理>負載監視」,可以看到實時記憶體情況,如下圖所示:

4. 修改快取路徑

在系統根目錄有個 .FineReport110 資料夾,這個目錄下的所有檔案都是伺服器生成的。

其中有個 ./ehcache_disk_store 檔案,經常佔用非常大的空間,導緻根目錄很容易就滿了。

請參考 指定ehcache快取路徑 文檔修改 ./ehcache_disk_store 存放路徑。

附件列表


主題: 部署集成
已經是第一篇
已經是最後一篇
  • 有幫助
  • 沒幫助
  • 只是瀏覽
  • 圖片不清晰
  • 用語看不懂
  • 功能說明看不懂
  • 操作說明太簡單
  • 內容有錯誤
中文(繁體)

文 檔回 饋

滑鼠選中內容,快速回饋問題

滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。

不再提示

10s後關閉