|
部署 Smartbi 时,很多人会忽略 JVM 参数配置 —— 但这串看似不起眼的配置,直接决定了你的 BI 系统:
- 是否会频繁内存溢出(OOM)宕机?
- 高并发查询时是否卡顿超时?
- 故障发生后能否快速定位问题?
而作为企业级 BI 系统,Smartbi 依赖大量内存计算和多线程并发,JVM 参数就是为它量身定制的运行地基:
- 精准分配内存,避免 OOM;
- 优化垃圾回收,减少系统卡顿出现的频率;
- 开启监控诊断,故障排查有依据;
- 适配物理机 / 容器,充分利用硬件资源。
本文整理了 Smartbi 常用的JVM参数,并提供 Tomcat 服务器的配置示例(可根据实际环境、应用服务器调整),供运维 / 部署人员收藏备用。
一、是什么:JVM 参数的 3 种类型(避免配置出错)
JVM 参数有明确的命名规则:
类型
|
命名规则
|
示例
|
说明
|
标准参数
|
- 开头
|
-version、-help
|
所有 JVM 实现都支持,一般无需调整
|
非标准参数
|
-X 开头
|
-Xms、-Xmx、-Xloggc
|
特定于 HotSpot VM,常用内存控制参数
|
高级参数
|
-XX 开头
|
-XX:+UseG1GC、-XX:MaxMetaspaceSize
|
调整 JVM 内部行为,需结合场景谨慎使用
|
小技巧:使用 java -XX:+PrintFlagsFinal -version 可查看当前 JDK 支持的所有 - XX 参数及默认值。
二、配哪些:为 Smartbi 定制运行地基
1、内存管理:避免 OOM 的基石
Smartbi 执行数据抽取、大报表计算、复杂报表展示时,会创建大量对象并缓存数据,合理分配堆内存是首要任务:
参数
|
作用
|
推荐值(参考)
|
配置示例
|
补充说明
|
-Xms
|
初始堆大小
|
一般建议物理内存的 70%~80%
|
-Xms16G
|
一般xms可以不设置,但如若是部署了多个组件,存在抢占内存的可能时,则可以考虑设置,配置的值可考虑与 - Xmx 设为相同,避免运行时动态扩容损耗
|
-Xmx
|
最大堆大小
|
一般建议物理内存的 70%~80%
|
-Xmx16G
|
例如是16G 物理机可设为 12G,如若是生产环境建议最少给BI分配32g
|
-XX:MetaspaceSize
|
元空间初始大小
|
一般建议配置1024m
|
-XX:MetaspaceSize=1024m
|
存储类元数据,Smartbi 插件多需适当调大
|
-XX:MaxMetaspaceSize
|
元空间最大大小
|
一般建议配置1024m
|
-XX:MaxMetaspaceSize=1024m
|
防止类加载过多导致本地内存泄漏
|
注:关于Xms及Xmx是建议物理内存的70%~80%是该服务器只部署BI主应用的情况下,若有其他组件(如OLAP、导出引擎等),所有组件的-Xmx总和,建议不超过物理内存的80%,为操作系统和基础服务保留必要的运行空间。
2、 垃圾回收优化:减少卡顿的关键
根据目前收集到的情况,推荐使用低延迟的 G1 GC:
参数
|
作用
|
推荐值
|
示例
|
补充说明
|
-XX:+UseG1GC
|
启用 G1 垃圾回收器
|
无
|
-XX:+UseG1GC
|
JDK9 + 默认,适合多核大内存,控制停顿时间
|
-XX:MaxGCPauseMillis
|
目标最大 GC 停顿时间
|
200ms
|
-XX:MaxGCPauseMillis=200m
|
如果无法满足此时间,JVM会自动调整年轻代大小,以满足此值
|
-XX:ParallelGCThreads
|
并行 GC 线程数
|
CPU 核心数
|
-XX:ParallelGCThreads
|
多应用混布时可适当减少(如 CPU 核心数的 1/2)
|
3、监控诊断:故障排查有依据
生产环境建议开启以下参数,便于事后将对应生成的文件发回,用于分析 OOM、GC 频繁、系统访问卡顿等问题:
参数
|
作用
|
示例
|
补充说明
|
-XX:+HeapDumpOnOutOfMemoryError
|
OOM 时生成堆转储
|
-XX:+HeapDumpOnOutOfMemoryError
|
必备,第一时间保留故障现场
同时加上文件生成的存放路径,例如(请根据实际的路径调整):
-XX:HeapDumpPath=/path/to/dumps
|
禁用JVM对频繁抛出的同一异常的优化
|
-XX:-OmitStackTraceInFastThrow
|
使得系统能够显示完整的栈信息,再将相应日志发回以便进一步分析问题原因所在。
启用后每次异常都会打印完整堆栈,便于定位重复异常的根本原因
|
-Xloggc
|
GC 日志文件
|
-Xloggc:/opt/smartbi/logs/gc.log
|
1. 配置原则
JDK 8 及以前:使用传统的 -Xloggc 及配套参数。
JDK 9+:使用统一的 -Xlog 日志系统。
启用日志轮转:避免单个文件过大或磁盘写满。
注意:IBM JDK(如WebSphere)生成的GC日志格式特殊,需使用IBM提供的分析工具(如IBM Monitoring and Diagnostic Tools)解析。
2. JDK 8 及以前配置
-Xloggc:/opt/smartbi/logs/gc.log # GC日志输出路径-XX:+PrintGCDetails # 输出详细GC信息-XX:+PrintGCDateStamps # 打印日期时间戳(便于与业务日志关联)-XX:+UseGCLogFileRotation # 启用GC日志轮转-XX:NumberOfGCLogFiles=10 # 最多保留10个轮转文件-XX:GCLogFileSize=10M # 每个日志文件最大10MB
参数说明:
-XX:+UseGCLogFileRotation:当GC日志达到指定大小时,自动切换新文件,并覆盖最旧的文件,防止磁盘空间耗尽。
-XX:NumberOfGCLogFiles:保留的轮转文件数量(与文件大小配合控制总占用空间)。
-XX:GCLogFileSize:单个日志文件上限。
3. JDK 9+ 配置
-Xlog:gc*:file=/opt/smartbi/logs/gc.log:time,uptime,level,tags:filecount=10,filesize=10M
参数分解:
gc*:输出所有GC相关日志(*表示包含GC的所有子标签)。
file=/opt/smartbi/logs/gc.log:指定日志文件路径。
time,uptime,level,tags:输出时间戳、JVM运行时间、日志级别和标签,便于过滤和分析。
filecount=10,filesize=10M:保留10个轮转文件,每个最大10MB(与JDK8的轮转参数对应)。
4. 补充
确保日志目录存在且应用有写入权限,否则JVM启动会报错。
- 容器环境:如果使用JDK 8u191+,建议同时添加-XX:+UseContainerSupport,使JVM能正确识别容器内存限制。
|
-XX:+PrintGCDetails
|
打印详细 GC 信息
|
-XX:+PrintGCDetails
|
-XX:InitialCodeCacheSize
|
初始化代码缓存区大小
|
-XX:InitialCodeCacheSize=300m
|
生产环境必须配置
|
-XX:ReservedCodeCacheSize
|
最大代码缓存区大小
|
-XX:ReservedCodeCacheSize=512m
|
-XX:+UseG1GC
|
开启G1GC
|
-XX:+UseG1GC
|
-XX:+UseStringDeduplication
|
减少重复字符串导致的内存浪费
|
-XX:+UseStringDeduplication
|
-XX:+UseContainerSupport
|
使用容器内存。允许JVM从主机读取cgroup限制,例如可用的CPU和RAM,并进行相应的配置。当容器超过内存限制时,会抛出OOM异常,而不是强制关闭容器。
|
-XX:+UseContainerSupport
|
容器部署必须配置,其中有版本区别:
1、JDK 8u191+:只需 -XX:+UseContainerSupport,无需其他参数。
2、JDK 8u131 ~ 8u191:使用
-XX:+UnlockExperimentalVMOptions
-XX:+UseCGroupMemoryLimitForHeap。
3、JDK 10+:-XX:+UseContainerSupport 默认开启,无需显式设置。
|
-XX:+UnlockExperimentalVMOptions
|
正确的识别容器限制
|
-XX:+UnlockExperimentalVMOptions
|
-XX:+UseCGroupMemoryLimitForHeap
|
正确的识别容器限制
|
-XX:+UseCGroupMemoryLimitForHeap
|
-XX:+G1Uncommit
|
G1GC内存伸缩
|
-XX:+G1Uncommit
|
bishengJDK调优配置
|
-XX:+G1ParallelFullGC
|
G1 Full GC并行化
|
-XX:+G1ParallelFullGC
|
-XX:+UseNUMA
|
NUMA-Aware特性
|
-XX:+UseNUMA
|
4、 系统属性配置:解决中文、时区等问题
这类参数通过 -D 开头配置 JVM 运行时的属性,是部署中解决环境兼容的关键,建议默认添加:
参数
|
作用
|
示例
|
补充说明
|
-Dfile.encoding
|
设置 JVM 默认字符集
|
-Dfile.encoding=GBK
-Dfile.encoding=UTF-8
|
1. Unix 环境必须设置,需与操作系统语言区域一致(系统需预先安装对应字符集)
2. 避免中文报表名称、数据乱码
3. 建议与 Smartbi 应用编码保持一致
|
-Duser.timezone
|
设置 JVM 默认时区
|
-Duser.timezone=Asia/Shanghai
|
1. 解决时间转换偏差(如灵活分析数据时间相差 8 小时)
2. 服务器时区无法被 JVM 正确识别时必设
3. 替代 Asia/Shanghai,适配国内时区更精准
|
-Djava.awt.headless
|
启用 headless 模式
|
-Djava.awt.headless=true
|
1. 服务器无图形界面(如 Linux 服务器)时必设
2. 避免 Smartbi 图表生成、打印功能因缺少图形环境报错
3. 生产环境默认开启,避免启动bi时无法正常启动
|
-Duser.region
|
设置默认区域
|
-Duser.region=CN
|
设置后影响数字、日期等显示格式等。
|
-Duser.language
|
设置默认语言
|
-Duser.language=zh
|
-Dmail.mime.splitlongparameters
|
防止发邮件乱码
|
-Dmail.mime.splitlongparameters=FALSE
|
若使用邮件发送功能,例如是计划任务的定时发送邮件功能,则建议设为 false 防止乱码
|
-DANTLR_DO_NOT_EXIT
|
防止自动退出
|
-DANTLR_DO_NOT_EXIT=true
|
例如是数据库有自定义添加的jar,而自行添加的第三方jar可能会退出应用服务器,为了避免这样的情况,需要在对应的服务器上添加该参数
|
5、一些必备的JVM参数&配置示例
上面列举了这么多的参数,有哪些是必备的呢?或者有没有配置参考的示例?有的,我们有的。
下面配置可以下面列到的。
- 黑色部分是必须要的
- 红色部分是需要根据服务器内存进行修改
- 蓝色部分需要根据实际的项目路径修改,需确保目录存在且 JVM 有写入权限,且确保容器环境正确挂载日志目录,否则可能会启动失败。
- 橙色部分则需要根据JDK版本、以及是否有部署在容器时添加,需确保目录存在且 JVM 有写入权限,且确保容器环境正确挂载日志目录,否则可能会启动失败。
(1)JDK 8u191+(Linux)-Xloggc
JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8 -Duser.region=CN -Duser.language=zh -Djava.awt.headless=true -Dmail.mime.splitlongparameters=false -Xms16G -Xmx16G -XX:MaxMetaspaceSize=1024m -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/smartbi/dumps -XX:-OmitStackTraceInFastThrow -Xloggc:/opt/smartbi/logs/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseContainerSupport"
|
(2)JDK 8u131 ~ 8u190(Linux)
JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8 -Duser.region=CN -Duser.language=zh -Djava.awt.headless=true -Dmail.mime.splitlongparameters=false -Xms16G -Xmx16G -XX:MaxMetaspaceSize=1024m -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/smartbi/dumps -XX:-OmitStackTraceInFastThrow -Xloggc:/opt/smartbi/logs/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap"
|
(3)JDK 8u131 以下(Linux)
JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8 -Duser.region=CN -Duser.language=zh -Djava.awt.headless=true -Dmail.mime.splitlongparameters=false -Xms16G -Xmx16G -XX:MaxMetaspaceSize=1024m -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/smartbi/dumps -XX:-OmitStackTraceInFastThrow -Xloggc:/opt/smartbi/logs/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps"
|
(4)若 JDK 9+,将 GC 日志部分替换为-XX:+UseContainerSupport
JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8 -Duser.region=CN -Duser.language=zh -Djava.awt.headless=true -Dmail.mime.splitlongparameters=false -Xms16G -Xmx16G -XX:MaxMetaspaceSize=1024m -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/smartbi/dumps -XX:-OmitStackTraceInFastThrow -Xlog:gc*:file=/opt/smartbi/logs/gc.log:time,uptime,level,tags:filecount=10,filesize=10M -XX:+UseContainerSupport"
|
(5)Windows环境配置参考 将路径改为Windows格式(如 C:/smartbi/logs)
方案 A:针对 JDK 8 及以下(使用老式 GC 日志)
set "JAVA_OPTS=%JAVA_OPTS% -Dfile.encoding=UTF-8 -Duser.region=CN -Duser.language=zh -Djava.awt.headless=true -Dmail.mime.splitlongparameters=false -Xms16G -Xmx16G -XX:MaxMetaspaceSize=1024m -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=C:/smartbi/dumps -XX:-OmitStackTraceInFastThrow -Xloggc:C:/smartbi/logs/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps"
|
方案 B:针对 JDK 9+(使用统一日志)
set "JAVA_OPTS=%JAVA_OPTS% -Dfile.encoding=UTF-8 -Duser.region=CN -Duser.language=zh -Djava.awt.headless=true -Dmail.mime.splitlongparameters=false -Xms16G -Xmx16G -XX:MaxMetaspaceSize=1024m -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=C:/smartbi/dumps -XX:-OmitStackTraceInFastThrow -Xlog:gc*:file=C:/smartbi/logs/gc.log:time,uptime,level,tags:filecount=10,filesize=10M"
|
三、怎么配:Tomcat 服务器配置示例
以常见的Tomcat为例,介绍说明JVM参数的配置方式。
1、前提说明
(1)Tomcat并不建议单独调整catalina.bat或startup.bat脚本,建议是配置在tomcat\bin\setenv.sh这个文件中。如若是环境中有此文件,则在此文件中配置即可,如若是没有,建议参考下述说明添加对应文件后配置。
关于该文件的创建方式可参考:⬝ 修改Tomcat启动参数的推荐方法
(2)关于JAVA_HOME,JAVA_HOME 用于指定 Tomcat 运行时所使用的 JDK 路径,与 JVM 参数(JAVA_OPTS)无关。
若系统已配置全局 JAVA_HOME 环境变量,则无需在脚本中重复设置;如需指定特定 JDK,可在 setenv.sh 中单独添加 export JAVA_HOME=/path/to/jdk。
2、Windows系统
A、如果Tomcat应用服务器是使用Smartbi的exe安装包进行安装的,那么这个Tomcat是smartbi自带的,是经过改造的。设置JVM参数的步骤如下:
(1)关闭应用服务器
(2)进入Tomcat\bin目录,使用编辑方式打开startup.cmd(可以使用notepad++、UltraEdit等编辑工具)
(3)在startup.cmd中最下端找到以下内容,修改其中的-Xms ,-Xmx , -XX:MaxPermSize,比如将Xms设置为16384m,Xmx修改为 16384m, MaxPermSize修改为1024m,可以在红框所示部分添加-Djava.awt.headless=true。修改后如下:
 B.如果Smartbi是使用war包部署的,也就是说Tomcat应用服务器是自行安装的,那么设置步骤如下:
(1)关闭应用服务器
(2)进入Tomcat\bin目录。在windows上tomcat是通过startup.bat进行启动的,启动时需要使用到tomcat的一些启动信息。可以用编辑方式打开startup.bat,找到set "EXECUTABLE 设置项,看看该设置项是指向哪个文件,一般是catalina.bat,那么tomcat的启动信息就是在catalina.bat中定义的。

(3)找到步骤2中所指向的文件,一般是catalina.bat。用编辑方式打开catalina.bat,在catalina.bat中,一般前面会有一些注释,这些注释列出了此脚本中的一些设置项。其中JAVA_OPTS就是我们接下来即将进行设置的设置项。(如果没有JAVA_OPTS,而只有JAVA_OPTIONS,那么设置项就是JAVA_OPTIONS,下面的内容中的JAVA_OPTS都换成JAVA_OPTIONS)
(4)首先在catalina.bat中,搜索"JAVA_OPTS",检查一下该文件中是否已经对该设置项进行了设置。
 若文件中已经有对该设置项进行设置,检查一下设置项的内容中是否包含 -Xms ,-Xmx, -XX:PermSize 和 -XX: MaxPermSize。如果已经存在,则可以直接修改对应项的值。 如下:已存在

对其直接修改值,比如设置-Xms为256m,-Xmx为10240m,-XX:MaxPermSize为1024m ( 注:建议对于BI的xmx建议配置在16G以上。) (5)如果检查过整个catalina.bat,发现没有对相应的设置项有进行过设置。那么可以在catalina.bat中注释下方的第一行,添加如下设置(该行添加的位置不要求必须在这个位置) set JAVA_OPTS=%JAVA_OPTS% -Xms256m -Xmx16348m -XX:MaxPermSize=1024m 如果是tomcat6.0以上,也可使用 set JAVA_OPTS=%JAVA_OPTS% -Dfile.encoding=GBK -Duser.region=CN -Duser.language=zh -Djava.awt.headless=true -Xms8192m -Xmx16348m -XX:MaxPermSize=1024m

3、Linux系统
Linux操作系统如果是Linux一键部署包部署的,修改JVM参数,只需要修改smartbi_env文件,具体可以参考文档(9.1JVM内存大小修改):Linux系统一键安装包部署Smartbi
 其他方式,比如手工部署的方式设置JVM参数步骤如下:
(1)关闭应用服务器
(2)进入Tomcat\bin目录
在linux上tomcat是通过startup.sh进行启动的,启动时需要使用到tomcat的一些启动信息。可以用编辑方式打开startup.sh,找到 EXECUTABE 设置项,看看该设置项是指向哪个文件,一般是catalina.sh,那么tomcat的x相关启动信息就是在catalina.sh中定义的。

(3)找到步骤2中所指向的文件,一般是catalina.sh。用编辑方式打开catalina.sh
在catalina.sh中,一般前面会有一些注释,这些注释列出了此脚本中的一些设置项。其中JAVA_OPTS就是我们接下来即将进行设置的设置项。
(如果没有JAVA_OPTS,而只有 JAVA_OPTIONS,那么设置项就是JAVA_OPTIONS,下面的内容中的JAVA_OPTS都换成JAVA_OPTIONS)

(4)首先在catalina.sh中,搜索"JAVA_OPTS",检查一下该文件中是否已经对该设置项进行了设置。
 若文件中已经有对该设置项进行设置,检查一下设置项的内容中是否包含 -Xms ,-Xmx, -XX:PermSize 和 -XX: MaxPermSize。如果已经存在,则可以直接修改对应项的值,并检查是否有上述列举的JVM参数,如果没有,建议添加。 (5)如果检查过整个catalina.sh,发现没有对相应的设置项有进行过设置。那么可以在catalina.sh中注释下方的第一行,添加如下设置:
(该行添加的位置不要求必须在这个位置,但不能加在文本的末尾,否则是无效的)
JAVA_OPTS="$JAVA_OPTS -Xms256m -Xmx16384m -XX:MaxPermSize=1024m -Djava.awt.headless=true" (注意有没有双引号)
4、配置成功了吗?
配置完之后怎么才能知道有没有配成功?可以启动成功后访问BI的系统监控→概述界面(需要登录用户有admins角色才可以看到此界面):

如下图,概述页面列出了BI系统相关的一些信息,可在jvm参数页签下查看后续新配置的jvm参数是否有列出,如有列出说明已添加成功。
以上就是本次介绍的JVM参数配置相关的全部内容了~要注意,JVM 参数配置没有万能模板,核心是结合 Smartbi 的部署环境(物理机 / 容器)、服务器硬件、业务场景(并发量、报表复杂度)灵活调整。 本文提供的参数详解和 Tomcat 配置示例,整合了内存管理、GC 优化、监控诊断、环境兼容四大核心场景,可作为基础参考 —— 实际部署时建议先套用示例,再根据运行监控数据微调,配置得当能让 Smartbi 的稳定性和性能提升一个档次!
恭喜你已阅读完全文,来做做题巩固下学习内容,答题可赢取麦豆哦——>点击领取任务 |