BI當機問題排查

1. 概述

使用者在使用 BI 時,可能會出現當機而導致無法使用的情況,此時可以按照本文的步驟進行排查。

2. 查看進程

檢查方案:

這裏以 Tomcat 為例。可以使用 jps -l 命令查看,Tomcat 直接部署的進程名為 Bootstrap,安裝包部署的進程名為 UnixLauncher,如下圖所示:

也可以在命令行輸入ps -ef|grep tomcat,如下圖所示:

若進程消失,直接重啟 BI 伺服器,詳情參見:FineBI安裝與啟動

若進程仍然存在,繼續按照下面的步驟排查。

3. 進程存在判斷問題

3.1 查看是否為記憶體上限溢位OOM

記憶體上限溢位的導致無回应的主要原因,是 JVM 的記憶體全部耗光,但是依然需要進一步分配記憶體。

此時 JVM 就會進行很多次的的Full GC,希望回收不使用的記憶體。但是由於資料都在使用,因此一直釋放不掉記憶體,於是就一遍遍的進行Full GC。

判斷方法如下:

1)鍵入 top 命令後,進程的 CPU 使用率非常高。

2)CPU 高並不一定是在做 Full GC,需要進一步確認。做 FullGC 不代表是OOM,只有持續不斷在 Full GC 的情況是 OOM 。輸入jstat -gc pid 2000 2000 命令,如下圖所示:

關注 FGC 一欄,如果數值增加很快,而且 FGCT(Full GC 的總時間)數值很大,例如 FGC 為20 FGCT已經 2000 以上,平均一次 FGC 耗時 100s ,可以確定是記憶體上限溢位了導致的當機,需要獲取 dump 。

3.2 造成記憶體上限溢位的原因排查及對應方案

  • Logger佔用記憶體過高

若安裝了平台日誌匯出插件,則禁用該插件。

  • 更新任務佔用記憶體過高

更新任務預設儘可能的佔用資源來提升更新效能。

  • 堆外記憶體 OOM

圖表 J2V8 執行緒 OOM。在圖表組件分組超過 5000 時,繪圖邏輯會在後端處理,此時圖表 J2V8 計算使用的是堆外記憶體,在觸發OOM時 JVM 會當機並生成 hs 檔案,進入%FineBI%bin 路徑下即可看到該檔案。

  • glibc的記憶體快取

如果發現JVM記憶體、堆外記憶體都正常,需要排查下是否是linux系統沒有即時回收記憶體。

Linux系統的記憶體回收是glibc做的,付費使用者可聯絡帆軟技術支援協助檢查pmap檔案大小,進而判斷glibc是否佔用記憶體過多,導致了當機。

    3.3 記憶體上限溢位-獲取 dump 檔案

    方法一:配置 dump 參數

    建議為工程配置上當機自動生成 dump 日誌的 JVM 參數,配置該參數對工程運作沒有效能損耗的影響,僅用於在伺服器當機時生成 dump 日誌。

    注:其中 /opt/ 路徑表示的是當機檔案生成路徑,可以根據需要修改檔案路徑。修改儲存後,需要重啟 Tomcat 才能使配置生效。

    • Windows:進入%Tomcat_HOME%\bin目錄。尋找名為setenv.bat的檔案。如果檔案不存在,可以建立一個新的setenv.bat檔案。在檔案中新增以下行來設定,配置完成後重啟工程。

    set JAVA_OPTS=%JAVA_OPTS% -XX:+HeapDumpOnOutOfMemoryError

    set JAVA_OPTS=%JAVA_OPTS% -XX:HeapDumpPath=/opt/

    • Linux:進入%Tomcat_HOME%\bin目錄。尋找名為setenv.sh的檔案。如果檔案不存在,可以建立一個新的setenv.sh檔案。在檔案中新增以下行來設定,配置完成後重啟工程。

    JAVA_OPTS="$JAVA_OPTS -XX:+HeapDumpOnOutOfMemoryError"
    JAVA_OPTS="$JAVA_OPTS -XX:HeapDumpPath=/opt/" 

    方法二:手動獲取dump檔案

    若沒有配置 dump 參數,則需要手動獲取 dump 檔案,執行jmap -dump:format=b,live,file=路徑   進程pid,例如獲取 22374 進程的 dump 檔案,如下程式碼所示:

    jmap -dump:format=b,live,file=22374.hprof 22374

    3.4 不是記憶體上限溢位OMM -打堆棧

    若使用者環境有 JDK :

    1)查出進程

    Linux 環境 ,執行命令:ps -ef|grep tomcat

    Windows 環境:查看任務管理器,可以查到 FineBI 的進程(pid)

    Win7 可用 dos 視窗,命令類似:netstat  -aon|findstr  "37799"

    2)打堆棧,一般每隔 3 秒打一個,打三至四個,如下所示:

    jstack  pid > a1.txt
    jstack  pid > a2.txt
    jstack  pid > a3.txt

    若使用者環境未安裝 JDK :

    jstack 命令是依賴 JDK 的,但是客戶沒安裝 JDK ,客戶環境也不太方便安裝 JDK 的時候,進行如下操作:

    1)將自己電腦本地的 JDK copy到使用者工程上。

    2)解壓到磁碟目錄,最好是根目錄。

    3)此時利用命令行執行到 bin 目錄。

    4)然後打 jstack 即可。

    注:如果無法正常執行,可配置環境變數。

    3.5 重啟BI伺服器

    上面判斷問題的步驟結束後,需要重啟 BI 伺服器。

    附件列表


    主题: 管理系統
    已经是第一篇
    已经是最后一篇
    • 有帮助
    • 没帮助
    • 只是浏览
    • 圖片不清晰
    • 用語看不懂
    • 功能說明看不懂
    • 操作說明太簡單
    • 內容有錯誤
    中文(繁體)

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

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

    不再提示

    10s後關閉

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

    反馈已提交

    网络繁忙