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 檔案,如下程式碼所示:
3.4 不是記憶體上限溢位OMM -打堆棧
若使用者環境有 JDK :
1)查出進程
Linux 環境 ,執行命令:ps -ef|grep tomcat
Windows 環境:查看任務管理器,可以查到 FineBI 的進程(pid)
Win7 可用 dos 視窗,命令類似:netstat -aon|findstr "37799"
2)打堆棧,一般每隔 3 秒打一個,打三至四個,如下所示:
若使用者環境未安裝 JDK :
jstack 命令是依賴 JDK 的,但是客戶沒安裝 JDK ,客戶環境也不太方便安裝 JDK 的時候,進行如下操作:
1)將自己電腦本地的 JDK copy到使用者工程上。
2)解壓到磁碟目錄,最好是根目錄。
3)此時利用命令行執行到 bin 目錄。
4)然後打 jstack 即可。
注:如果無法正常執行,可配置環境變數。
3.5 重啟BI伺服器
上面判斷問題的步驟結束後,需要重啟 BI 伺服器。
結束BI進程:關閉FineBI
重啟BI伺服器:FineBI 安裝與啟動