历史版本20 :性能优化指导手册 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 概述编辑

诸如报表加载时间长、系统内存溢出、服务器崩溃等性能问题,影响因素可能有很多,很多时候想要排查也是无从下手。

为了帮助用户在遇到这些性能问题时,可以进行自检调优,现给出性能优化指导方案,可以根据步骤排查工程性能问题,优化系统性能。

单张模板加载慢请按照本文第3节进行优化,其他问题请按照本文第2节进行优化

2. 服务器性能优化编辑

2.1 内存配置检查

根据 运维监控指导手册 中3.4节检查内存配置。

重要提醒:

报表使用内存不只是 Java 堆的内存,报表把日志 IO 打包在堆外内存处理,需要设置堆外内存的上限,以避免 Java 使用过多内存。

设置方法是在内存配置文件后面加上:

-Dfineio.read_mem_limit=2   -Dfineio.write_mem_limit=1   -Dfineio.cache_mem_limit=1 -XX:MaxDirectMemorySize=2g

其中 MaxDirectMemorySize 是 NIO,-Dfineio 是 fineio,设置限制后,两个 IO 能用的最大内存是5G,如果不加限制, IO 可能用到的最大内存是物理内存的一半。

Java堆内存使用建议配置:

1)开启智能释放,操作如下图所示:

Snag_80ef4b8d.png

2)根据建议设置数据上限,操作如下图所示:

Snag_80f2e687.png

详细介绍可参考:模板限制

2.2 环境配置项检查

参考 运维监控指导手册 中3.4节检查环境配置项,重点检查回收器类型、JDK版本。此处给出一些配置建议:

  • 建议 JVM 使用垃圾回收器类型为 ParallelScavenge

  • 建议使用 JDK8 中 1.8.0_181 及以上版本

2.3 基本维护检查

参考 运维监控指导手册 中第4节检查基本维护指标,此处也补充工程重启操作方法:

Linux:

1)使用命令ps -ef | grep  tomcat查询进程 pid ,如果看到有两个进程是正常现象,以 startup.Bootstrap start 结尾的是 Tomcat 的进程,另外一个是宕机处理插件的进程;

2)使用命令kill -9 pid杀掉进程;

3)使用 cd 命令切换到 tomcat/bin 目录 执行./startup.sh(非 root 用户启动,注意执行权限,以及对磁盘的读写权限)

Windows:

关闭 Tomcat 后,任务管理器里找 Java 的进程,如果还有,就手动结束掉。然后在启动 Tomcat。

2.4 其他检查

参考 运维监控指导手册 中3.1、3.2、3.3、3.6节进行检查,包括端口、网络、存储服务、业务配置。

3. 报表性能优化编辑

3.1 抽数缓存

适合数据量不大,取数频繁,且数据更新时效要求不高的场景,可以把 SQL 查出来的数据存到缓存里,规避重复取数,提高执行效率。

详情参考:抽数缓存介绍

3.2 并行取数

报表默认是计算到的数据,再去执行 SQL 查询,用并行取数,可以在开始的时候,就先把要计算的 SQL 一次执行完毕,可以提高取数时间。

详情参考:数据集并行取数优化插件

该方案不适用的场景:单模板的 SQL 不多;有 SQL 执行复杂,数据库性能不好;有模板的 SQL 实际没有使用。

3.3 新计算引擎

如果模板数据量大,业务场景可以接受分页的展现形式,可以考虑用新计算引擎,新计算引擎通过预编译,后台分页计算的形式,大大提高计算的速度。

方案介绍:新计算引擎介绍

开启方法:开启新计算引擎

3.4 大数据集导出

如果有大数据量导出文件的场景,建议用大数据集导出的功能,默认的导出功能,后台肯定是全量计算,内存使用容易过多。

详情参考:大数据集导出

3.5 模板制作优化

在设计模板时可以使用一些技巧规避可能带来的性能问题:巧用参数注入优化报表取数优化报表计算时间巧用相邻连续分组