参考文档: FineBI
FineBI 启动参数配置
强烈建议手动配置 Xmx 参数,并且推荐内存修改在 8GB <= Xmx < 32 GB(一定要 < 32GB)或者40GB <= Xmx <= 64GB
1
JAVA_OPTS="$JAVA_OPTS -Xms4g -Xmx8g -XX:PerBytecodeRecompilationCutoff=-1 -XX:PerMethodRecompilationCutoff=-1"
注: -Xmx 配置在 32GB ~ 40GB 会导致性能问题严重,> 64GB 性能变差。
-XX:PerBytecodeRecompilationCutoff=-1
和-XX:PerMethodRecompilationCutoff=-1
参数是为了避免 JVM 的 Bug,JIT 的 Deoptimization 机制可能会导致运行缓慢。增加 MaxDirectMemorySize 配置,MaxDirectMemorySize 参数为 NIO 最大堆外内存,若不配置,
MaxDirectMemorySize
的大小即等于-Xmx
1
JAVA_OPTS="$JAVA_OPTS -XX:MaxDirectMemorySize=2g"
配置 headless 模式参数,该参数只需在使用 Linux 下环境修改。
1
JAVA_OPTS="$JAVA_OPTS -Djava.awt.headless=true"
配置垃圾收集器,建议仅使用默认的 Parallel Scavenge 收集器。
若使用了 CMS(-XX:+UseConcMarkSweepGC) /G1(-XX:+UseG1GC) 收集器,该收集器的 Full GC 是单线程的,可能会导致系统长时间无响应,如非必要,建议去掉「 UseConcMarkSweepGC / UseG1GC 」参数,即可使用默认的 Parallel Scavenge 收集器。
可以通过以下方法查看当前使用的垃圾收集器
1
2
3
4
5% java -XX:+PrintCommandLineFlags -version
-XX:InitialHeapSize=2147483648 -XX:MaxHeapSize=32210157568 -XX:+PrintCommandLineFlags -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseParallelGC
java version "1.8.0_202"
Java(TM) SE Runtime Environment (build 1.8.0_202-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.202-b08, mixed mode)修改
vm.max_map_count
参数
max_map_count 文件包含限制一个进程可以拥有的 VMA(虚拟内存区域)的数量。虚拟内存区域是一个连续的虚拟地址空间区域。在进程的生命周期中,每当程序尝试在内存中映射文件,链接到共享内存段,或者分配堆空间的时候,这些区域将被创建。调优这个值将限制进程可拥有 VMA 的数量。限制一个进程拥有 VMA 的总数可能导致应用程序出错,因为当进程达到了 VMA 上线但又只能释放少量的内存给其他的内核进程使用时,操作系统会抛出内存不足的错误。
建议调整 vm.max_map_count 参数的值为 262144 ,以免 VMA 数量到了默认的上限,导致 JVM 进程崩溃。
CentOS 7 配置 Tomcat 服务
为 Tomcat 设置环境变量,创建 /usr/local/tomcat/bin/setenv.sh 文件,内容如下
1
2
3
4
5
6cat > /usr/local/tomcat/bin/setenv.sh <<EOF
#!/bin/bash
export JAVA_HOME=/usr/local/java/jdk1.8.0_202
export CATALINA_PID=\$CATALINA_BASE/tomcat.pid
EOF编写 Systemd 配置文件 /usr/lib/systemd/system/tomcat.service,内容如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19cat > /usr/lib/systemd/system/tomcat.service <<EOF
[Unit]
Description=tomcat Web Server
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
Environment='JAVA_HOME=/usr/local/java/jdk1.8.0_202'
PIDFile=/usr/local/tomcat/tomcat.pid
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecReload=/bin/kill -s HUP \$MAINPID
ExecStop=/bin/kill -s QUIT \$MAINPID
PrivateTmp=true
User=root
Group=root
[Install]
WantedBy=multi-user.target
EOF配置开机启动与启动 Tomcat
1
systemctl enable --now tomcat