反饋已提交

網絡繁忙

JAVA環境變量常見問題

1. 概述

本文介紹因 JAVA 環境變數配置有問題導致的一些報錯及解決方案。

注:FineReport 支援的 JDK 版本為:JDK 1.8 且小版本需在 JDK8u102 以上。

2. Unsupported major.minor version 52.0

2.1 啟動日誌出現此報錯,啟動失敗,存取平台404

原因分析

FR10.0 從 2020-08-03 開始就不再支援 JDK1.7 及以下版本,僅支援 JDK1.8 。

解決方案

更換JDK 版本為:JDK 1.8 且小版本需在 JDK8u102 以上。

2.2 工程運作中出現此報錯,存在對應插件無法使用

原因分析

插件編譯使用的 JDK 版本高於運作的環境變數的 JDK 版本。

解決方案

官方發佈的插件編譯版本都是不高於 JDK1.8 的,JAVA環境換成 JDK1.8 即可。

3. Fine assist start failed.

3.1  no providers installed

問題描述

日誌報錯存在:Caused by: com.sun.tools.attach.AttachNotSupportedException: no providers installed

原因分析

Windows 下安裝 JDK 會同時安裝一個獨立的 jre ,獨立安裝的 jre 下沒有 attach.dll 這個檔案,FR11.0 啟動需要呼叫這個檔案。

解決方案

配置 JRE_HOME 不能指向獨立安裝的 jre ,必須使用%JAVA_HOME%\jre

3.2 sun.tools.attach.LinuxVirtualMachine.isLinuxThreads()Z

問題描述

日誌報錯存在:Caused by: java.lang.UnsatisfiedLinkError: sun.tools.attach.LinuxVirtualMachine.isLinuxThreads()Z

原因分析

Windows 下部署卻放了 Linux 的 tools.jar 。

解決方案

%JAVA_HOME%\lib獲取 tools.jar 放到webroot/WEB-INF/lib下或者tomcat/lib下。

3.3 Failed to load agent library

問題描述

日誌報錯存在:Caused by: com.sun.tools.attach.AgentLoadException: Failed to load agent library

原因分析

安裝的 JDK 位數不對,安裝的 JDK 版本一定要與作業系統匹配,64 位作業系統是可以安裝 32 位 JDK 的,但是 FR11.0 不支援這樣的操作,必須保持統一。

解決方案

不確認的話先用 uname 獲取下作業系統版本,再安裝對應版本的 JDK ,注意 x86 指的是 intel 的作業系統架構,x86_64是 64 位,i586 是32位的。

3.4 Unable to open socket file

問題描述

非 JDK 導致的類似報錯,如:Caused by: com.sun.tools.attach.AttachNotSupportedException: Unable to open socket file: target process not responding or HotSpot VM not loaded

這個報錯看起來和 JDK 問題導致的報錯很像,但是卻不一定是 JDK 導致的。

原因分析

/tmp 目錄無法寫入檔案,可能導致這個現象的原因是:

  • 普通使用者沒有權限。

  • /tmp 所在磁碟空間已滿。

解決方案

  • 若沒有權限,把/tmp目錄的權限開放即可。

  • 若磁碟空間了,則清理下對應磁碟的空間。

4. gc overhead limit exceeded

問題描述:

在 FineReport 使用程式中,日誌出現 gc overhead limit exceeded 報錯。

原因分析:

該報錯為在記憶體不足的時候,GC 時間消耗太多。需要透過加入參數關閉 GC 時間檢查特性,使得 jvm 在記憶體不足時不拋GC overhead limit exceeded,而丟擲 Java heap space 並生成 dump 檔案,以便於分析問題原因。

解決方案:

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

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

2)使用正文編輯器開啟setenv.bat檔案。在設定-Xmx、-Xms參數的位置,新增-XX:-UseGCOverheadLimit參數設定,如下:

JAVA_OPTS="$JAVA_OPTS -Xms2048M -Xmx8196M -XX:-UseGCOverheadLimit"

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

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

5. 部分 JDK 版本存在的問題

5.1 jdk1.8.0_65以下版本可能會導致啟動閃退

問題描述

日誌報錯存在:java.lang.IllegalArgumentException: object is not an instance of declaring class

原因分析

bytebuddy 版本不相容。

解決方案

升級 JDK 版本,建議升級到較高版本的 JDK1.8 。

5.2 jdk1.8.0_171可能導致範本預覽空白

問題描述

所有範本預覽空白。

原因分析

oracle1.8.0_171_b11 會導致範本預覽空白。

解決方案

更換JDK 版本為:JDK 1.8 且小版本需在 JDK8u102 以上。

6. Tomcat 指定 JDK

6.1 Linux

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

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

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

注:請確定此路徑為有效的目錄路徑。請確定Tomcat使用者具有必要的權限來存取和寫入該目錄。

export JAVA_HOME=/path/to/jdk

export JRE_HOME=/path/to/jdk/jre

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

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

6.2 Windows

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

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

注:請確定此路徑為有效的目錄路徑,並且使用反斜槓(\)作為目錄分隔符。請確定Tomcat使用者具有必要的權限來存取和寫入該目錄。

set "JAVA_HOME=C:\path\to\jdk"

set "JRE_HOME=C:\path\to\jdk\jre"

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

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

附件列表


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

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

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

不再提示

10s後關閉

獲取幫助
線上支援
獲取專業技術支援,快速幫助您解決問題
工作日9:00-12:00,13:30-17:30在线
頁面反饋
針對當前網頁的建議、問題反饋
售前咨詢
業務咨詢
電話:0933-790886或 0989-092892
郵箱:taiwan@fanruan.com
頁面反饋
*問題分類
不能為空
問題描述
0/1000
不能為空

反馈已提交

网络繁忙