1. 概述
在业务人员使用BI之前,企业的IT部门需要先完成 BI 产品部署阶段。
本文将为你说明 BI 部署的方法以及之后需要完成的参数调优和环境运维工作。跟随这些步骤,你也能够科学地完成企业 BI 平台部署 并保障后续的稳定使用。
2. 产品部署
FineBI 是一个 Servlet 应用。
Servlet 是一种服务器端的 Java 应用程序,具有独立于平台和协议的特性,可以生成动态的 Web 页面。它担当客户请求( Web 浏览器或其他 HTTP 客户程序)与服务器响应( HTTP 服务器上的数据库或应用程序)的中间层。
因此 FineBI 必须部署在 Web 应用服务器如 Tomcat、WebLogic、WebSphere 等下面,启动 Web 应用服务器时就会加载 FineBI 这个 Servlet ,从而交互式地浏览和修改数据,整个过程如下:
FineBI 安装文件本质上就是一个 Tomcat ,若企业使用 FineBI ,推荐服务器部署,满足更稳定的运行效果。
服务器部署将 FineBI 系统置于服务器上,通过 IP 地址访问同一个 BI 系统,从而实现系统平台的作用,达到企业整体工作的业务活动需求。
2.1 环境配置
详情参见: FineBI服务器配置推荐
2.1.1 cpu
cpu16核~32核,2.5GHz及以上
BI数据更新和引擎计算,会对源数据进行加工处理,这个过程是需要使用cpu资源去完成的,如果单表数据量在1kw以上,推荐配置cpu16核~32核,2.5GHz及以上
2.1.2 内存
内存32G以上
跟CPU使用场景差不多,BI在进行更新等操作是也是会申请内存来完成动作,这一部分主要就是堆内内存的使用,是通过xmx控制上限,
其中BI的xmx最大可分配64G,超过64g对于BI的性能提升空间就不大了。可以预估下后续使用的BI量来选择服务器的总内存。
2.1.3 磁盘
①磁盘空间:
BI在运行过程中,会生成大量的文件,比如从数据库抽取存储到BI服务器上的数据文件,比如日常日志文件、比如用户模板文件等。如果后续长期会使用抽取模式的数据,那对于磁盘空间要求是比较高的,推荐磁盘空间600G-1T
②磁盘读写:
FineBI 是 IO 密集型应用,对磁盘 IO 依赖较大,因此推荐使用本地磁盘或固态硬盘,固态硬盘性能会更佳。推荐大于500 MB/s的顺序读写速度,大于50 MB/s的4k随机读写速度。
2.2 容器选择及部署
2.2.1 容器选择
BI支持各种不同容器的部署,其中最常见最流行的是tomcat容器部署,下文都将以tomcat为例讲解如何部署BI工程。(其他容器的部署可参考文档:WebLogic 服务器部署、Wildfly(JBoss)9~18 服务器部署、WebSphere 服务器部署 等)
2.2.2 tomcat部署
1)环境准备
tomcat部署BI需要提前准备 tomcat容器、JDK环境以及BI的工程包。
其中 Tomcat 服务器版本和 JDK 版本如下,版本不对应会导致服务器部署失败。
注:安装的 JDK 版本一定要与操作系统匹配,64 位操作系统可以安装 32 位的 JDK ,但是 FineBI 不支持这样的操作,必须保持统一。
系统 | Tomcat 版本 | JDK 版本 |
---|---|---|
linux 64位 windows 64位 | 8.0 (不支持 Tomcat 8.0.32 版本) | JDK 1.8 且小版本需在 JDK8u102 以上 |
9.0 注:不支持 Tomcat 10.0 版本 |
BI工程包(webroot)可以通过帆软提供的安装包安装后从 FineBI/webapps/webroot 目录下,提取这个 工程包(webroot)
安装包部署可参考:FineBI安装与启动
2)部署步骤
上传 webroot 文件至 Tomcat 环境中
将本地 FineBI 工程的 webroot 文件夹压缩,将压缩包上传至%TOMCAT_HOME%\webapps下
注:不推荐直接上传文件夹,防止文件出现问题。
上传完成后,解压压缩包,代码如下所示:
cd /opt/apache-tomcat-8.5.60/webapps
unzip webroot.zip
引入 JDK 中的 tools.jar 文件
将%JAVA_HOME%\jdk\lib下的 tools.jar 拷贝到部署的服务器中,拷贝到%TOMCAT_HOME%\lib下或者%TOMCAT_HOME%\webapps\工程名\WEB_INF\lib下,代码如下所示:
cp -R /usr/local/java/jdk1.8.0_161/lib/tools.jar /opt/apache-tomcat-8.5.60/lib
确认是否修改端口号
若 Linux 系统中有多个 Tomcat 同时运行,需要确认默认的 8080 端口号是否被占用;若 Linux 系统之前没有部署过工程,可忽略该节内容。
查看默认的 8080 端口号是否被占用,下图为被占用情况。
netstat -anp |grep 8080
若被占用,需要修改 Tomcat 端口号。具体方法请参见 Tomcat 端口配置
启动BI工程
进入到 %Tomcat%/bin 目录下执行 启动命令,代码如下所示:
cd /opt/apache-tomcat-8.5.60/bin # 进入bin目录
nohup ./startup.sh & # 启动 Tomcat
浏览器访问BI
启动浏览器,在地址栏输入:http://ip:服务器端口号/工程名/decision,如下图所示:
2.3 集群部署(非必须)
FineBI 集群目前有 3 种方案,分别为 热备、Web集群&BI的Spider引擎单节点部署方案、Web 集群 。
集群方案选择可根据实际情况参考集群方案推荐。
3. 参数调优
FineBI 在部署后需要修改使用内存和其他参数,确保服务器稳定运行,其中最重要的就是内存参数,跟系统流畅度是直接挂钩的。
接下来主要讲解tomcat修改参数的方式,其它容器修改方式可参考:修改FineBI配置参数
3.1 BI内存使用说明
BI 使用的物理内存分为 Heap 内存和直接物理内存,如下图所示:
FineBI 使用的物理内存 BIMax 要求:BIMax = Xmx + MaxDirectMemorySize + FineIO + Other。为了保障主机稳定性,要求 BIMax <= 用户服务器内存 * 7/8
参数 | 值 |
---|---|
Xmx | 8GB <= Xmx < 32 GB(一定要 < 32GB)或者40GB <= Xmx <= 64GB 注:< 8GB 有宕机风险,32GB ~ 40GB 会导致性能问题严重,> 64GB 性能差 |
Xms | 默认值为物理内存的 1/64,不要配置的太小,避免反复申请内存扩展堆空间大小,造成性能损耗。 在客户内存分配合理的情况下,即-Xmx值没有过大的剩余浪费的情况的话,-Xms 与-Xmx 建议设成一样的值,避免 JVM 反复重新申请内存,但同时不建议太大,建议32G以下。 |
MaxDirectMemorySize | 最少为 2 GB,不限制最大值,但需要考虑用户服务器内存的大小,FineBI 使用的内存(BIMax)<= 用户服务器内存 * 7/8 注:建议参数值为2~4G |
FineIO |
|
Other | min(用户服务器内存/8,6GB) |
3.2 参数配置
参数项 | 调整说明 | 建议值 | 修改方式 | 查询命令 | |
---|---|---|---|---|---|
1 | Max_map_count | max_map_count限制一个进程可以拥有的 VMA(虚拟内存区域)的数量。 虚拟内存区域是一个连续的虚拟地址空间区域。在进程的生命周期中,每当程序尝试在内存中映射文件,链接到共享内存段,或者分配堆空间的时候,这些区域将被创建。 调优这个值将限制进程可拥有 VMA 的数量。 限制一个进程拥有 VMA 的总数可能导致应用程序出错,因为当进程达到了 VMA 上线但又只能释放少量的内存给其他的内核进程使用时,操作系统会抛出内存不足的错误。 | vm.max_map_count = 262144 | 执行 vi /etc/sysctl.conf 增加/修改 vm.max_map_count=262144 vm.overcommit_memory=0 vm.overcommit_ratio=50 保存退出并执行 sysctl -p | linux: sysctl vm windows不需要配置 |
2 | overcommit_memory | vm.overcommit_memory = 0 | |||
3 | overcommit_ratio | vm.overcommit_ratio = 50 | |||
4 | jvm:xmx | 影响 FineBI 计算性能和系统稳定性 | 16g以上31g以下 堆内存:xms,xmx可以为物理内存的二分之一 细分的话,可以用gc日志再判断下,一般不建议xmx太大,影响gc性能 | linux环境通过 tomcat/bin/catalina.sh修改参数 JAVA_OPTS='-Xms16000m -Xmx16000m -XX:MaxDirectMemorySize=2g -Dfineio.read_mem_limit=2 -Dfineio.write_mem_limit=1 -Dfineio.cache_mem_limit=1 -Djava.awt.headless=true -XX:PerBytecodeRecompilationCutoff=-1 -XX:PerMethodRecompilationCutoff=-1 -Duser.language=zh -Duser.country=CN -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=opt/heapdump' | windows环境通过 tomcat/bin/catalina.bat 修改参数 set JAVA_OPTS=%JAVA_OPTS% -Xms16g -Xmx16g -XX:PerBytecodeRecompilationCutoff=-1 -XX:PerMethodRecompilationCutoff=-1 -XX:MaxDirectMemorySize=2g -Dfineio.read_mem_limit=2 -Dfineio.write_mem_limit=1 -Dfineio.cache_mem_limit=1 -server -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=D:\heapdump |
5 | jvm:-Duser.country | 中英文显示混乱 | -Duser.country=CN | ||
6 | jvm:-Duser.language | 中英文显示混乱 | -Duser.language=zh | ||
7 | jvm:-Djava.awt.headless | 1、影响 FineBI系统稳定性 注:windows环境不需要配置 | -Djava.awt.headless=true | ||
8 | jvm:HeapDumpOnOutOfMemoryError | 该参数可以在内存溢出宕机时自动导出 HeapDump 文件以便详细分析定位宕机原因 | -XX:+HeapDumpOnOutOfMemoryError | ||
9 | jvm:PerBytecodeRecompilationCutoff | 为了避免 JVM 的 Bug,JIT 的 Deoptimization 机制可能会导致运行缓慢 导致 spider 引擎数据更新缓慢 | -XX:PerBytecodeRecompilationCutoff=-1 | ||
10 | jvm:PerMethodRecompilationCutoff | 导致 spider 引擎数据更新缓慢 | -XX:PerMethodRecompilationCutoff=-1 | ||
11 | jvm:MaxDirectMemory | 在某些场景下会严重影响 FineBI 计算性能和系统稳定性 | 2048m | ||
12 | host文件信息 | 影响 FineBI 计算性能,更新速度 | 执行 vi /etc/hosts 新增一行如下 127.0.0.1 hostname 保存退出 | linux:/cat/hosts windows不需要配置 | |
13 | 打开文件数信息 | 1、更新失败 2、仪表板预览报错 3、宕机风险 | 65536 | 参考:https://help.fanruan.com/finebi/doc-view-28.html | linux: ulimit -a或cat /proc/PID/limits windows不需要配置 |
BI上不建议配置的几个参数
参数项 | 参数说明 | 建议 | |
---|---|---|---|
1 | jvm:disableExplicitGC | 建议删除该配置 | |
2 | jvm:useConcMarkSweepGC | 该收集器的 Full GC 是单线程的,可能会导致系统长时间无响应,如非必要,建议取消 | 建议删除该配置 |
3 | jvm:UseG1GC | 该收集器的 Full GC 是单线程的,可能会导致系统长时间无响应,如非必要,建议取消 | 建议删除该配置 |
4. 环境运维
4.1 工程目录维护
下文将讲解 Tomcat 部署下的工程目录结构,安装包部署下的目录结构可参考:FineBI安装目录结构
4.1.1 Tomcat部署目录
一级目录 | 二级目录&文件 | 含义 |
---|---|---|
bin 启动程序目录 | startup.sh/bat |
|
shutdown.sh/bat |
| |
catalina.sh/bat |
| |
setclasspath.sh/bat |
| |
daemon.sh/bat |
注:该方式启动默认启动路径为根目录,可能影响fanruan.log文件生成 | |
conf tomcat的配置文件目录 | server.xml | 常见的端口,工程等等配置 |
web.xml | 容器的一些属性配置 | |
logs 日志存放目录 | catalina.out | 容器所有的日志都会输出到这里,linux环境才会有的。而且不会分割,长期运行的话,会变得比较大 |
catalina.xxxx-xx-xx.log | 一般都是容器启动的日志会输出到这里,按日期分割。有时候需要确认客户启动的时间点 或者参数之类的可以看一下 | |
host-mannager.xxxx-xx-xx.log | 估计是tomcat的manager项目的相关日志,可以不关注 | |
localhost_access_logxxxx-xx-xx.txt | 记录了http请求的信息。在处理问题的时候需要确认请求url是否到达tomcat的时候,可以看一下这里的日志 | |
fanruan.log | BI日志,需要注意的是,这里只记录了FineLoggerFactory.getLogger()接口打印的日志。 就是说是BI代码里用BI的日志接口输出的日志才会输出到这里。 BI里面有一些第三方的代码,用的是log4j之类的日志输出,就不会打印到这里,比如spark的日志。 注: FineLoggerFactory.getLogger()接口是BI自己的输出日志的接口,一般情况下,BI自己的代码按照规范输出日志必须使用该接口。 | |
gclogs/ | GC日志存储目录,记录内存GC的相关信息。 | |
temp | 容器的默认缓存目录。可以显式配置-Djava.io.tmpdir参数来自定义路径 | |
webapps | 存放应用程序,当服务启动时会去加载 webapps 目录下的应用程序 |
4.1.2 webroot目录
一级目录 | 二级目录 | 含义 |
---|---|---|
WEB-INF | assests | 资源文件夹,存放工程用到的资源文件等,其中 temp_attach 中存放着上传的图片和 Excel 数据 |
assist | 辅助文件夹,存放一些辅助文件 | |
classes | 编译后的代码文件存放目录,class文件,一般都是放一些二次开发的代码文件 | |
config | 存储一些关键的配置信息 db.properties:外置数据库信息配置文件。 | |
dashboards | BI 模板保存文件夹 | |
demo | BI或者FR工程中携带的demo数据库 | |
embed | 内置数据库配置目录 | |
lib | 存放BI运行依赖的jar包文件,包括第三方的jar包 | |
plugins | 插件安装目录 | |
reportlets | 存放 FineReport 报表 cpt 、frm文件 | |
resources | 存放工程相关的资源配置文件,最常见的即授权文件存在在该目录 | |
schedule | 定时调度任务的结果文件 | |
treasures | 包含报表的功能点及 BI 的埋点信息,正常情况下一个月会自动生成一次 | |
scripts | 插件管理页面的资源文件,一般插件管理页面加载异常的话都是这里的文件出问题了 (注意:BI5119(FR11)版本开始,scripts文件夹存于webroot\WEB-INF\assets,原webroot下的无效了) | |
logs | swfit日志库的文件存储目录 平台日志 LogDB 数据库-https://help.fanruan.com/finebi/doc-view-706.html | |
spider | 5.1.12版本及之后,BI默认的数据存储路 | |
directcache | 实时数据的数据预览的缓存目录 | |
backup | 存放平台备份文件,该路径可在平台上自定义配置。 |
4.1.3 工程文件清理&优化
1)可清理的三类文件
Temp目录下文件
ROOT/db目录下的dummy文件
Logs目录下的历史日志文件
Temp 文件:为 spark 计算生成的临时文件,是默认自动清理七天内的文件的
路径:①如果是tomcat部署,就在tomcat/temp下
②如果是安装包安装,在 BI安装目录/temp 下
会有上图中 blockmgr 或者 spark开头的文件
清理方法:bi服务器关闭时,直接删除里面的文件;
可以设置清理间隔时间;
dummy 文件:数据集更新时生成的临时数据文件,数据更新失败后会有该类型文件,更新成功是没有的
路径:tomcat部署时,默认路径是 \apache-tomcat8\bin\ROOT\db
安装包部署时,默认路径: FineBI\bin\ROOT\db
清理方法:其中dummy开头的文件都可清理(在BI平台没有任何更新任务的情况下)
日志文件:主要是BI运行过程中输出的操作日志等信息
路径:① bin目录下的 error.log文件 和 output.log
② logs目录下的相关文件,Catalina.out ,fanruan.log日志等
清理方式:
BI服务关闭的时候,删除占用空间大的文件(log、output.log等),重启即可
不需要关闭服务,可执行 echo "'" > filename 命令,也能清空当前日志文件。
2)日志输出调优
windows下tomcat窗口输出日志引起的性能问题
原因:tomcat窗口图形化日志输出过多会影响仪表板等功能的数据加载预览
方案:tomcat调整成后台运行,隐藏窗口
编辑TOMCAT_HOME\bin\setclasspath.bat,在文件底部找到 set _RUNJAVA="%JRE_HOME%\bin\java" 修改为:set _RUNJAVA="%JRE_HOME%\bin\javaw"
然后重启BI
安装包部署下减少 output.log和 error.log的输出信息
方案:BI5.1.18 版本以后, 在 fiendb表fine_conf_entity 表中添加参数 Log4jConfig.consoleLog 可以减少该日志的输出,加参数后需要重启BI
比如 insert into fine_conf_entity value('Log4jConfig.consoleLog', 'false')
注:要调整参数的前提建议是已经将内置库finedb外迁到外置数据库后,可以从外置库中调整参数配置 MySQL5外接数据库 ,具体参数修改步骤请联系技术支持提供方案。
4.2 端口检查
帆软应用正常使用过程中,需要服务器开放一些端口,因此需要对这些端口进行检查是否开放,避免出现系统功能异常。详情参见 运维监控指导手册 3.1 节
4.3 异常情况处理
在使用BI进行业务分析的过程中,因为不可控因素会出现一些异常现象,比如更新突然变得卡慢、数据一直在加载中、cpu&内存占用高等情况。
在遇到这些异常情况时,除了常规的日志分析来定位原因外,往往需要堆栈等特殊日志辅助定位。
详情参见:BI宕机问题排查步骤