历史版本8 :BI宕机问题排查 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 概述编辑

1.1 问题现象

用户在使用 BI 时,可能会出现宕机而导致无法使用的情况。

1.2 宕机处理流程

42.png

2. 查看进程编辑

这里以 Tomcat 为例。

2.1 方法一

使用 jps -l 命令,如下图所示:

1588916841360977.png

注:Tomcat 直接部署的进程名为Bootstrap ,安装包部署的进程名为UnixLauncher

2.2 方法二

在命令行输入ps -ef|grep tomcat,如下图所示:

6.png

3. 进程消失编辑

3.1 查看系统的OOM Killer

通常在多应用集中部署在一台机器上,Linux 系统在内存不足等条件下会主动干预进程(OOM-Killer 机制)。这个机制会在内存不足的时候 kill 掉任何不受保护的进程,从而释放内存。

执行下面三个命令,

egrep -i 'killed process' /var/log/messages

egrep -i 'killed process' /var/log/dmesg

egrep -i -r 'killed process' /var/log

如果出现此类内容"Out of memory: Kill process 31201 (java) score 783 or sacrifice child,则可以判断发生了 OOM Killer,但是还需要通过内存占用和时间来确认与消失的BI进程是否吻合。

3.2 查看是否有崩溃文件 hs_err_

检查当前用户目录(cwd)是否有 hs_err_$pid.log 文件,大多数时候在 %Tomcat%/bin 目录下。

3.3 以上文件和内容都没有

没有 hs_err_ 崩溃文件,没有 OOM Killer 。

1)确认进程是否在后台运行,若进程不是后台进程,终端退出或连接超时导致进程消失。

2)如果终端是 xshell 连接,选择文件>默认会话属性,确认配置去掉勾选☑️,如下图所示:

1588918956291934.png

4. 进程存在编辑

4.1 访问无响应

4.1.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 命令,如下图所示:

406.png

关注 FGC 一栏,如果数值增加很快,而且 FGCT(Full GC 的总时间)数值很大,例如 FGC 为20 FGCT已经 2000 以上,平均一次 FGC 耗时 100s ,可以确定是内存溢出了导致的宕机,需要获取 dump 。

4.1.2 造成内存溢出的原因排查及对应方案

  • Logger占用内存过高
    若安装了平台日志导出插件,则禁用该插件。

  • 更新任务占用内存过高
    更新任务默认尽可能的占用资源来提升更新性能,若在更新时占用内存过高,请联系技术支持(QQ:800049425)处理问题。

  • 直连数据库读取 Excel 数据占用大量内存

    Excel 数据集默认为分布式,默认抽取数据,如果勾选 内存化 计算,所以会有占用大内存风险,复杂膨胀的分析多会占用大量内存。因此 Excel 数据集可取消勾选内存化,如下图所示:

    0.png

  • 堆外内存 OOM
    图表 J2V8 线程 OOM
    在图表组件分组超过 5000 时,绘图逻辑会在后端处理,此时图表 J2V8 计算使用的是堆外内存,在触发OOM时 JVM 会崩溃并生成 hs 文件,进入%FineBI%bin 路径下即可看到该文件,获取该文件并联系技术支持(QQ:800049425)处理问题。

    4.1.3 内存溢出-获取 dump 文件

    • 方法一:配置 dump 参数

    需要在安装BI后进行参数配置。

    1)Linux 系统

    打开%Tomcat_HOME%/bin/catalina.sh文件,加上:JAVA_OPTS="$JAVA_OPTS -server -XX:+HeapDumpOnOutOfMemoryError,如下图所示:

    4.png

    注:其中不设-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,如下图所示:

    6.gif

    • 方法二:

    若没有配置 dump 参数,则需要手动获取 dump 文件,执行jmap -dump:format=b,live,file=路径   进程pid,例如获取 22374 进程的 dump 文件,如下代码所示:

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

    4.1.4 不是内存溢出 OMM -打堆栈

    若用户环境有 JDK :

    1)查出进程

    Linux 环境 ,执行命令:ps -ef|grep tomcat

    Windows 环境:查看任务管理器,可以查到 FineBI 的进程(pid)

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

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

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

    若用户环境未安装 JDK :

    jstack 命令是依赖 JDK 的,但是客户没安装 JDK ,客户环境也不太方便安装 JDK 的时候,进行如下操作:

    1)将自己电脑本地的 JDK 拷贝到用户工程上。

    2)解压到磁盘目录,最好是根目录

    3)此时利用命令行执行到 bin 目录

    4)然后打 jstack 即可。

    注:如果无法正常执行,可配置环境变量。

    4.2 页面部分功能无响应

    4.2.1 单机环境-打堆栈

    操作步骤参见 4.1.4 节。

    4.2.2 集群环境

    Web 集群环境每个节点都要生成 jstack 文件,操作步骤参见 4.1.3 节。