1. 概述编辑
1.1 版本
BI 服务器版本 |
---|
5.1.14 |
1.2 功能简介
本文将简单介绍 系统检查 功能的检查逻辑和检查项。
注1:若无法检测出当前配置,当前配置为空,修改意见为「暂不支持此项」,点击状态后面的「详情」,即可查看具体原因。
注2:若所有检查项均没有问题时,会提示:当前系统运行良好,无需调整。
注3:若系统为集群环境,在「系统检查」页面左上角可选择具体的集群节点进行检测。
2. 内存检测项编辑
内存检测项的检测逻辑如下表所示:
序号 | 检查项 | 检查内容 | 检查结果 | 改进建议 |
---|---|---|---|---|
1 | 当前物理内存 | 检测当前物理内存是否大于等于BI运行要求最小值16G | 若当前系统物理内存不小于16G,则该项检查合格,进入第 2 项检查 | - |
若当前物理内存小于16G,则提示修改,并结束检测进程。 | 当前系统物理内存较小,建议增加物理内存至16G以上 | |||
2 | 单机多进程 | 检测工程所在的系统中,除 BI 进程之外的其他进程占用的内存是否过大 | 若除 BI 进程之外的其他进程占用的内存适当,则该项检查合格,进入第 3 项检查 | - |
若除 BI 进程之外的其他进程占用的内存过大,则认为该系统为单机多进程系统,系统稳定性较差,提示修改,并进入第 3 项检查 | 当前系统疑似为多进程,存在宕机隐患,建议仅保留BI工程 建议关闭系统中其他无用进程,仅保留 BI 工程相关的进程 | |||
3 | 堆外内存当前值 | BI 需要占用一定的堆外内存(MaxDirectMemorySize),堆外内存小于 2G 时不够用,所以需要提前检测是否满足使用要求 | 若堆外内存当前值不小于2G,则该项检查合格,进入第 4 项检查 | - |
若堆外内存当前值小于2G,提示修改,并进入第 4 项检查 | 建议JVM NIO使用堆外内存设置为2GB 请参考 2.2 节修改堆外内存 | |||
4 | fineIO读内存 | 检测fineIO读内存(-Dfineio.read_mem_limit)参数配置大小是否小于2G | 若当前fineIO读内存不小于2G,则该项检查合格,进入第 5 项检查 | - |
若当前fineIO读内存小于2G,则提示修改,并进入第 5 项检查 | 建议JVM fineIO读内存使用堆外内存设置为2G 请参考 2.3 节修改 fineIO读内存 | |||
5 | fineIO写内存 | 检测fineIO写内存(-Dfineio.write_mem_limit)参数配置大小是否小于1G | 若当前fineIO写内存不小于1G,则该项检查合格,进入第 6 项检查 | - |
若当前fineIO写内存小于1G,则提示修改,并进入第 6 项检查 | 建议JVM fineIO写内存使用堆外内存设置为1G 请参考 2.4 节修改 fineIO写内存 | |||
6 | 当前系统配置 | 检测 BI 工程所所有参数所用内存是否已经超过了最大值(BImax) BImax=max(2,NIO)+max(3g,FIO)+max(8,V)+other NIO:堆外内存当前值 FIO:fineIO读内存+fineIO写内存 V:堆内内存当前值 other:min(min(物理内存-15,物理内存/8), 6GB) | 若 BImax≤7/8物理内存,则跳转至第 13 项检查 | - |
若 BImax>7/8物理内存,则认为此时内存使用超标,需要继续检测每个参数是否超标,即进行第 7 项检查 | - | |||
7 | 堆外内存当前值 | 判断堆外内存(MaxDirectMemorySize)是否超过 2G | 若堆外内存当前值等于2G,则跳转至第 9 项检查 | - |
若堆外内存当前值大于2G,提示修改,并进入第 8 项检查 | 建议JVM NIO使用堆外内存设置为2GB 请参考 2.2 节修改堆外内存 | |||
8 | 判断BImax是否符合要求 | 将堆外内存NIO=2G代入公式进行计算,判断是否符合要求 | 若BImax=NIO=2g+ FIO=max(3g,FIO),+V=max(8,V)+other≤7/8P,则认为符合要求,跳转至第 13 项检查 | - |
若BImax=NIO=2g+ FIO=max(3g,FIO),+V=max(8,V)+other>7/8P,则认为不符合要求,进入第 9 项检查 | - | |||
9 | fineIO读内存 | 检测fineIO读内存(-Dfineio.read_mem_limit)是否超过2G | 若当前fineIO读内存等于2G,则跳转至第 11 项检查 | - |
若当前fineIO读内存大于2G,则提示修改,并进入第 10 项检查 | 建议JVM fineIO读内存使用堆外内存设置为2G 请参考 2.3 节修改 fineIO读内存 | |||
10 | 判断BImax是否符合要求 | 将堆外内存NIO=2G,fineIO读内存=2G代入公式进行计算,判断是否符合要求 | 若BImax=NIO(2G)+ fineIO读内存(2G)+max(1G,fineIO写内存)+max(8,V)+other≤7/8P,则认为符合要求,跳转至第 13 项检查 | - |
若BImax=NIO(2G)+ fineIO读内存(2G)+max(1G,fineIO写内存)+max(8,V)+other>7/8P,则认为不符合要求,进入第 9 项检查 | - | |||
11 | fineIO写内存 | 检测fineIO写内存(-Dfineio.write_mem_limit)是否超过1G | 若当前fineIO写内存等于1G,则进入第 12 项检查 | - |
若当前fineIO写内存小于1G,则提示修改,并进入第 12 项检查 | 建议JVM fineIO写内存使用堆外内存设置为1G 请参考 2.4 节修改 fineIO写内存 | |||
12 | 判断BImax是否符合要求 | 将堆外内存NIO=2G,fineIO读内存=2G,fineIO写内存=1G 代入公式进行计算,判断是否符合要求 | 若BImax=NIO(2G)+ fineIO读内存(2G)+fineIO写内存(1G)+max(8,V)+other≤7/8P,则此时肯定为xmx配置出现问题,进入第 13 项检查 | - |
若BImax=NIO(2G)+ fineIO读内存(2G)+fineIO写内存(1G)+max(8,V)+other>7/8P,则跳转至第 14 项检查 | - | |||
13 | 堆内内存一次判断 | 判断当前配置的堆内内存是否满足最低配置以及规避了GC性能最差的配置 | 若31.5<xmx<40或xmx<8,则进入第 14 项检查 | - |
若不满足31.5<xmx<40或xmx<8,则结束判断流程 | - | |||
14 | 堆内内存二次判断 | 判断各个推荐值修改后根据BImax公式得出的xmx是否满足31.5<V<40 | 若31.5<V<40,提示修改堆内内存,并结束判断流程 | 设置堆内内存为30G 请参考 2.1 节配置堆内内存 |
若不满足31.5<V<40,提示修改堆内内存,并结束判断流程 | 设置堆内内存为一个系统计算后的值 请参考 2.1 节配置堆内内存 |
2.1 修改堆内内存
堆内内存的修改方法,请参见下方表格文档:
参数介绍 | 服务器类型 | 参考文档 |
---|---|---|
-Xmx 参数:最大堆内内存 -Xms 参数:初始化内存大小 注1:Xmx/Xms 与数字之间不要有空格 注2:建议配置Xms=Xmx,以防止内存扩容失败情况 | Tomcat 服务器 | Tomcat 服务器内存修改 |
WebLogic 服务器 | WebLogic 服务器内存修改 | |
WebSphere 服务器 | WebSphere 服务器 | |
JBoss 服务器 | JBoss 服务器 | |
Resin 服务器 | Resin 服务器内存修改 |
2.2 修改堆外内存
堆外内存由-XX:MaxDirectMemorySize这个参数来设置。本文以工程部署在 Tomcat 上为例介绍修改方法。
Windows:修改%Tomcat%/bin目录下的 catalina.bat 文件,增加配置,配置完成后重启工程。
set JAVA_OPTS=%JAVA_OPTS% -XX:MaxDirectMemorySize=2g
Linux/Unix:修改%Tomcat%/bin目录下的 catalina.sh 文件,增加配置,配置完成后重启工程。
JAVA_OPTS="$JAVA_OPTS -XX:MaxDirectMemorySize=2g"
如下图所示:
2.3 修改 fineIO 读内存
fineIO 读内存由-Dfineio.read_mem_limit这个参数来设置。请根据自身工程部署情况选择修改方法。本节展示 Tomcat 环境下设置 fineIO读内存 的步骤。
读内存的默认单位为 GB,支持小数,但不支持使用 g、m 等。建议读内存为写内存的2-3倍,缓存大小建议与写内存大小一致。
Windows:在%Tomcat%/bin目录下的catalina.bat文件中新增配置,配置完成后重启工程。
Linux:在%Tomcat%/bin目录下的catalina.sh文件中新增配置,配置完成后重启工程。
JAVA_OPTS="$JAVA_OPTS -Dfineio.read_mem_limit=2"
2.4 修改 fineIO 写内存
fineIO 写内存由-Dfineio.write_mem_limit这个参数来设置。请根据自身工程部署情况选择修改方法。本节展示 Tomcat 环境下设置 fineIO写内存 的步骤。
写内存的默认单位为 GB,支持小数,但不支持使用 g、m 等。建议读内存为写内存的2-3倍,缓存大小建议与写内存大小一致。
Windows:在%Tomcat%/bin目录下的catalina.bat文件中新增配置,配置完成后重启工程。
Linux:在%Tomcat%/bin目录下的catalina.sh文件中新增配置,配置完成后重启工程。
JAVA_OPTS="$JAVA_OPTS -Dfineio.write_mem_limit=1"
3. 其他检查项编辑
检查结果和改进建议具体如下表所示:
检查项 | 当前配置 | 检测出问题标准 | 改进建议 |
---|---|---|---|
root目录磁盘 | 显示当前root目录磁盘空闲值大小 | 检测到root目录磁盘当前剩余空间小于5G时 | 建议root目录磁盘剩余空间不小于5G,请及时进行清理 |
db 更新目录磁盘 | 显示当前db 更新目录磁盘空闲值大小 | 检测到db更新目录磁盘当前剩余空间小于10G时 | 建议db更新目录磁盘剩余空间不小于10G,请及时进行清理 |
temp目录磁盘 | 显示当前temp目录磁盘空闲值大小 | 检测到temp目录磁盘当前剩余空间小于10G时 | 建议temp目录磁盘剩余空间不小于10G,请及时进行清理 |
磁盘(root/db更新/temp任意多个目录挂载在同一磁盘时显示此项) | 显示当前多目录磁盘空闲值大小 | 检测到多目录磁盘当前剩余空间小于20G时 | 建议root/db 更新/temp 目录磁盘剩余空间不小于20G,请及时清理(这里会给出具体任意多目录的具体目录类别) |
spark_memory_fracrtion | 显示当前配置值大小 | 检测到spark_memory_fraction > min(Xmx/8 * 0.3, 0.6)时 | 建议spark_memory_fraction 参数不超过min(Xmx/8 * 0.3, 0.6) |
垃圾回收器类型 | 显示当前垃圾回收器类型 | GC 类型不为 ParallelScavenge | 建议 JVM 使用垃圾回收器类型为 ParallelScavenge 请参考 3.1 节进行修改 |
堆内老年代与新生代的比例 | 显示当前堆内老年代与新生代大小比例 | 堆内老年代与新生代大小比例不为 2 | 建议 JVM 老年代与新生代大小比例设置为 2 请参考 3.2 节进行修改 |
栈空间 | 显示当前 -Xss 的值 | -Xss 的值大于 512 | 建议单线程使用栈空间不超过 1024 KB 请参考 3.3 节进行修改 |
JDK 版本 | 显示当前 JDK 版本 | JDK 版本低于 1.8.101 版本 | 建议使用「JDK8」中 1.8.0_181 及以上版本 |
finedb | 多工程共用 | 与其他工程共用 finedb ,如: 1)两个及以上报表工程共用 2)两个及以上 BI 工程共用 3)报表 BI 集成工程与报表单独工程共用 4)报表 BI 集成工程与 BI 单独工程共用 5)报表工程与 BI 工程共用 | 建议一个 finedb 仅对应一个工程,杜绝多个工程共用一个 finedb 请参考 配置外接数据库 文档迁移 finedb |
finedb | HSQL | 使用内置数据库 | 建议将 finedb 迁移至更稳定的外接数据库中 请参考 配置外接数据库 文档迁移 finedb |
DisableExplicitGC 参数 | 已配置 | 配置 DisableExplicitGC 参数时提示 | 建议取消该 DisableExplicitGC 参数配置 请参考 3.4 节取消参数配置 |
headless 模式 | 未启用 | 未配置 -Djava.awt.headless=true 时提示 | 建议配置 -Djava.awt.headless=true 以启用 headless 模式 请参考 3.5 节进行配置 |
debug模式 | 已启用 | 已配置-Xrunjdwp或者-agentlib:jdwp参数时提示 | 建议取消debug模式 |
dump导出 | 未配置 | 未配置 HeapDumpOnOutOfMemoryError 及 HeapDumpPath时提示 | 建议配置HeapDumpOnOutOfMemoryError 及 HeapDumpPath以保证正常导出dump 请参考 3.8 节进行修改 |
vm.max_map_count | 当前配置值 | vm.max_map_count<262144时提示 | 建议配置 vm.max_map_count 参数为 262144 请参考 3.9 节进行修改 |
日志级别 | DEBUG | 当前日志级别配置为 DEBUG 级别时提示 | 建议设置日志级别为 ERROR 请参考 日志简介 2.2 节设置日志级别 |
堆内存 | 显示当前配置 | 超过 40G 时提示 | 建议堆内存不超过64G 请参考 2.1 节配置堆内内存 |
最大文件打开数 | 显示当前配置 | 参数配置值低于65536时提示 | 建议open_files参数配置不低于65536 请参考 3.6 节修改最大文件打开数 |
resultSetRowLimit | 显示当前配置 | 参数配置值大于${阈值}时提示 | 建议resultSetRowLimit配置不超过${阈值} 请修改 BI/Spider参数 中的「数据访问量」参数 |
recompilationCutoff | 显示当前配置 | 参数配置值大于${阈值}时提示 | 建议recompilationCutoff相关参数配置值为-1 请参考 3.7 节设置参数值 |
spider_update_fast_compute_limit_cell | 显示当前配置 | 参数配置值大于${阈值}时提示 | 建议 spider_update_fast_compute_limit_cell 配置不超过${阈值} 修改方法请参考:FINE_CONF_ENTITY可视化配置 |
spark_driver_maxResultSize | 显示当前配置 | 参数配置值大于${阈值}时提示 | 建议spark_driver_maxResultSize配置不超过${阈值} 修改方法请参考:FINE_CONF_ENTITY可视化配置 |
spider_fast_compute_limit_row | 显示当前配置 | 参数配置值大于${阈值}时提示 | 建议spider_fast_compute_limit_row配置不超过${阈值} 修改方法请参考:FINE_CONF_ENTITY可视化配置 |
spider_fast_compute_limit_unit | 显示当前配置 | 参数配置值大于${阈值}时提示 | 建议spider_fast_compute_limit_unit配置不超过${阈值} 修改方法请参考:FINE_CONF_ENTITY可视化配置 |
spider_fast_compute_limit_memory | 显示当前配置 | 参数配置值大于${阈值}时提示 | 建议spider_fast_compute_limit_memory配置不超过${阈值} 修改方法请参考:FINE_CONF_ENTITY可视化配置 |
3.1 修改垃圾回收器类型
本节以工程部署在 Tomcat 上为例, 介绍设置垃圾收集器为Parallel Scavenge(并行收集器)的方法。
Windows 系统:打开%Tomcat%/bin目录下的catalina.bat文件进行配置,配置完成后重启工程即可生效。
set JAVA_OPTS= -XX:+UseParallelGC
Linux:打开%Tomcat%/bin目录下的catalina.sh文件进行配置,配置完成后重启工程即可生效。
JAVA_OPTS="$JAVA_OPTS -XX:+UseParallelGC"
3.2 设置堆内老年代与新生代大小比例
堆内老年代与新生代大小比例建议为 2(-XX:NewRatio=2,JVM的默认值);NewRatio 大小正常生效需要用户不限制新生代大小。
在设置-Xmx、-Xms参数的位置,添加 NewRatio 的值即可,本节展示 Tomcat 环境下设置 NewRatio 的步骤。
Windows:在%Tomcat%/bin目录下的catalina.bat文件中新增配置,配置完成后重启工程。
Linux:在%Tomcat%/bin目录下的catalina.sh文件中新增配置,配置完成后重启工程。
JAVA_OPTS="$JAVA_OPTS -Xms2048M -Xmx8196M -XX:NewRatio=2"
3.3 设置单线程使用栈空间
建议单线程使用栈空间不超过1024KB,即 -Xss 的值不超过 1024 。
在设置-Xmx、-Xms参数的位置,添加 -Xss 的值即可,本节展示 Tomcat 环境下设置 -Xss 的步骤。
Windows:在%Tomcat%/bin目录下的catalina.bat文件中新增配置,配置完成后重启工程。
Linux 系统:在%Tomcat%/bin目录下的catalina.sh文件中新增配置,配置完成后重启工程。
JAVA_OPTS="$JAVA_OPTS -Xms2048M -Xmx8196M -Xss1024K"
3.4 设置 DisableExplicitGC 参数
-XX:+DisableExplicitGC参数的作用是禁用 System.gc()。System.gc() 是一种保护机制,例如堆外内存满时清理它的堆内引用对象.
用户需要根据实际情况选择是否使用该参数,建议删除该参数(删除下文设置的配置即可)。
本节展示 Tomcat 环境下设置 DisableExplicitGC 参数的步骤。
Windows:在%Tomcat%/bin目录下的catalina.bat文件中新增配置,配置完成后重启工程。
Linux:在%Tomcat%/bin目录下的catalina.sh文件中新增配置,配置完成后重启工程。
JAVA_OPTS="$JAVA_OPTS -XX:+DisableExplicitGC"
3.5 修改 headless 模式参数
headless 模式是系统的一种工作模式,如果系统属性 java.awt.headless被设置true,那么headless工具包就会被使用。
本节展示 Tomcat 环境下启用 headless 模式的步骤。
Windows:在%Tomcat%/bin目录下的catalina.bat文件中新增配置,配置完成后重启工程。
Linux:在%Tomcat%/bin目录下的catalina.sh文件中新增配置,配置完成后重启工程。
JAVA_OPTS="$JAVA_OPTS -Djava.awt.headless=true"
3.6 修改最大文件打开数
修改linux的软硬件限制文件/etc/security/limits.conf,在文件尾部添加如下代码, 配置完成后重启工程即可生效。
* soft nofile 65536
* hard nofile 65536
3.7 设置 recompilationCutoff 参数
没有配置 RecompilationCutoff 参数/配置的 RecompilationCutoff 参数太小,可能会导致 spider 引擎数据更新缓慢。
本节展示 Tomcat 环境下设置 recompilationCutoff 参数的步骤。
Windows:在%Tomcat%/bin目录下的catalina.bat文件中新增配置,配置完成后重启工程。
Linux:在%Tomcat%/bin目录下的catalina.sh文件中新增配置,配置完成后重启工程。
JAVA_OPTS="$JAVA_OPTS -XX:PerMethodRecompilationCutoff=-1 -XX:PerBytecodeRecompilationCutoff=-1"
3.8 设置 HeapDumpOnOutOfMemoryError 及 HeapDumpPath 参数
1)-XX:+HeapDumpOnOutOfMemoryError参数表示当JVM发生OOM时,自动生成DUMP文件。
2)-XX:HeapDumpPath=${目录}参数表示生成dump文件的路径,也可以指定文件名称,例如:-XX:HeapDumpPath=${目录}/java_heapdump.hprof。
如果不指定文件名,默认为:java_<pid>_<date>_<time>_heapDump.hprof。
本节展示 Tomcat 环境下设置 recompilationCutoff 参数的步骤。
Windows:在%Tomcat%/bin目录下的catalina.bat文件中新增配置,配置完成后重启工程。
set JAVA_OPTS=%JAVA_OPTS% -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${目录}
Linux:在%Tomcat%/bin目录下的catalina.sh文件中新增配置,配置完成后重启工程。
JAVA_OPTS="$JAVA_OPTS -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${目录}"
3.9 设置 vm.max_map_count 参数
max_map_count文件包含限制一个进程可以拥有的VMA(虚拟内存区域)的数量
建议配置 vm.max_map_count 参数为 262144,本节展示 Linux 环境下设置 vm.max_map_count 参数的步骤。
vim /etc/sysctl.conf
vm.max_map_count=262144
sysctl -p