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 路径下即可看到该文件。
3.3 内存溢出-获取 dump 文件
方法一:配置 dump 参数
需要在安装BI后进行参数配置。
1)Linux 系统
打开%Tomcat_HOME%/bin/catalina.sh文件,加上:JAVA_OPTS="$JAVA_OPTS -server -XX:+HeapDumpOnOutOfMemoryError",如下图所示:
注:其中不设-XX:HeapDumpPath时,dump 的文件在%Tomcat_HOME%/bin目录下。
2)Windows 系统
打开%Tomcat_HOME%/bin/catalina.bat文件,加上:set JAVA_OPTS=%JAVA_OPTS% -server -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=D:\heapdump,如下图所示:
方法二:
若没有配置 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 拷贝到用户工程上。
2)解压到磁盘目录,最好是根目录。
3)此时利用命令行执行到 bin 目录。
4)然后打 jstack 即可。
注:如果无法正常执行,可配置环境变量。
3.5 重启BI服务器
上面判断问题的步骤结束后,需要重启 BI 服务器。
结束BI进程:关闭FineBI
重启BI服务器:FineBI 安装与启动