开源BI分析工具使用系列:Metabase性能调优

Metabase运行起来之后,当有大规模用户使用时必须进行系统参数性能调优,否则将面临查询速度慢响应不及时的问题。如下图所示当一个用户查询一个Dashboard时,如果该Dashboard中包含有9个Questions需要查询时,Jetty服务器会占用9个线程。

QQ20190121-234733@2x

从上图可以看到Metabase使用Jetty服务线程最小8个,最大50个,其中9个运行中,40个空闲,0个排队。但如果有10个用户同时进行查询时,服务器就忙不过来了。因此我们需要对Jetty threads最大线程进行调整。

打开core.clj源代码可以看到jetty配置选项port端口、host服务器名称、maxthread最大线程(一般设置>50或<500)、maxqueued最大排队线程、maxideletime最大空闲时间,其中最重要的是最后3个参数。如何进行调整呢?

QQ20190121-234744@2x

通过翻阅./bin/start脚本得知可以设置环境变量,如下图所示:

QQ20190121-235015@2x

export=MB_JETTY_MAXTHREADS=100

再启动Metabase服务

./bin/start

QQ20190121-235224@2x

如上图所示最大线程数生效了,线程扩大到最高100个,可以支持10人同时查询。

参考文档翻阅:Jetty性能优化官方文档 Jetty优化主要包含如下几方面:

Garbage Collection

Jerry官方文档建议,优化JVM收集机制会显著提升性能,它建议配置JVM垃圾收集日志文件,同时禁止明显垃圾收集策略

-XX:+DisableExplicitGC。

Allocate sufficient memory 分配充足内存
Use the -server option 使用-server选项

QQ20190122-001919@2x

操作系统参数调优

QQ20190122-002821@2x

QQ20190122-002836@2x

网络优化

Intermediaries such as nginx can use a non-persistent HTTP/1.0 connection. Make sure to use persistent HTTP/1.1 connections.

Acceptors

The standard rule of thumb for the number of Accepters to configure is one per CPU on a given machine.

Low Resource Limits

Must not be configured for less than the number of expected connections.

Jetty Thread Pool

配置目标减少最大内存的使用量,通常线程池 >50 和 <500

 

设置运行JAVA JVM虚拟机环境变量JAVA_OPTS,开启JMX

JAVA_OPTS=”$JAVA_OPTS -Dcom.sun.management.jmxremote.port=4711″
JAVA_OPTS=”$JAVA_OPTS -Dcom.sun.management.jmxremote.authenticate=false”
JAVA_OPTS=”$JAVA_OPTS -Dcom.sun.management.jmxremote.local.only=false”
JAVA_OPTS=”$JAVA_OPTS -Dcom.sun.management.jmxremote.ssl=false”
JAVA_OPTS=”$JAVA_OPTS -XX:+DisableExplicitGC”
JAVA_OPTS=”$JAVA_OPTS -server”
export JAVA_OPTS

设置JETTY最大线程数

export=MB_JETTY_MAXTHREADS=100

./bin/start

Metabase Jmeter测试报告

1 Thread – 100 Times

1 Thread

10 Thread – 100 Times

10 Threads 100 Times

推荐文章

沪公网安备 31010702002009号