暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Infinispan篇(二):如何对Infinispan进行压力测试?

架构至美 2023-01-19
291

【摘要】如何对Infinispan进行压力测试?

大家好,我是小盒子。上次推文:Infinispan篇(一):一个被遗忘了的分布式集群缓存系统。从各种姿势讲解了Infinispan部署,感受到了它强大的集群模式缓存。

今天的主题:如何对Infinispan进行压力测试?

一、前言

我们生产环境中Keycloak用的Infinispan的三节点分布式缓存,前段时间Infinispan的其中一个节点竟然莫名的挂了,差不多有一个月的时间了,由于其它两个节点健在,所以Keycloak服务并没受到影响。

二、日志分析

我们将挂了的节点的Infinispan的日志拷贝出来,进行分析,发现大量的java.lang.OutOfMemoryError: Java heap space,JVM堆内存溢出了。查看gc.log发现从11月25号-12月6号gc很频繁,且有大量的Full GC发生。如下所示:

通过Infinispan部署目录/bin/server.conf中看到,其默认的JAVA_OPTS如下:

JAVA_OPTS="-Xms512m -Xmx512m -XX:MetaspaceSize=64M -Djava.net.preferIPv4Stack=true"
JAVA_OPTS="$JAVA_OPTS -Djava.awt.headless=true"

上面的JVM内存配置显然不足以支持我们Keycloak的会话存储。

三、压力测试

3.1 测试目的

为了搞清楚infinispan服务在高并发情况下的稳定性,并分析infinispan服务的日志,有无内存溢出的情况。

3.2 Infinispan部署说明

Infinispan采用集群模式,共有三个节点,如下:

192.168.0.201:11222
192.168.0.202:11222
192.168.0.203:11222

Version: Infinispan 'Triskaidekaphobia' 13.0.2.Final,同在线Keycloak使用同版本。

初始压测Infinispan JVM启动参数设置: JAVA_OPTS="-Xms64m -Xmx512m -XX:MetaspaceSize=64M -Djava.net.preferIPv4Stack=true

Infinispan部署服务器配置:

192.168.0.201 内存:11G(目前剩余可用内存8G)  磁盘:500G (目前剩余可用磁盘400G)  CPU: 4
192.168.0.202 内存:11G(目前剩余可用内存3G)  磁盘:500G (目前剩余可用磁盘440G)  CPU: 4
192.168.0.203 内存:11G(目前剩余可用内存5G)  磁盘:500G (目前剩余可用磁盘330G)  CPU: 4

3.3 Keycloak部署说明

Version: 14.0.0

单节点部署,服务器配置:

192.168.0.201 内存:11G(目前剩余可用内存8G) 磁盘:500G (目前剩余可用磁盘400G) CPU: 4
启动参数: -Xms1024M -Xmx2048M -XX:MaxPermSize=2048M -XX:MaxHeapSize=2048M

3.4 mysql部署说明

Version: 5.7.27

参数配置:

[mysqld]
character_set_server=utf8
init_connect='SET NAMES utf8'
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
max_allowed_packet=512M
innodb_log_file_size=2G
transaction-isolation=READ-COMMITTED
lower_case_table_names=1
innodb_file_per_table=1
[client]
default-character-set=utf8

3.5 测试方案

  • 测试时间:2022.12.22-2022.12.28
  • 压测工具:Apache JMeter5.5
  • 用户账号:25个

压测环境说明:

测试工具部署地址:
     Master:192.168.0.1
     Slave1:192.168.0.2
     Slave2:192.168.0.3
     Slave3:192.168.0.4
     Slave4:192.168.0.5
压测kc接口地址:192.168.0.201
服务器配置:磁盘:500G (目前剩余可用磁盘400G) CPU: 4

压测接口:

密码登录:/auth/realms/fabao/protocol/openid-connect/token
查看token是否在线:/auth/realms/fabao/protocol/openid-connect/token/introspect

接口说明:查看token是否在线接口依赖于密码登录接口,参数token为上一接口返回值access_token

压测策略:

通过jmeter循环请求密码登录接口产生8w个会话,用Beanshell脚本把8w个token值存到本地,会话失效时间是1个月;
模拟增加线程数由每秒起30/60/90/100持续对8w个token是否在线进行持续压测,观察内存是否溢出,是否有其他报错;

我们Infinispan常驻会话大概8w多个。

3.6 测试场景记录

我主要分析了4次有效的压测记录。前面3次是调整Infinispan JVM启动参数之前。

1. 压测日期为2022.12.22

Infinispan中会话数8万+,压测kc在线状态接口,一台机器,并发30的情况下。截止2022.12.22日09:26到2022.12.22日16点。

192.168.0.201节点共gc了227次,其中Full GC了9次。
192.168.0.202节点共gc了234次,其中Full GC了9次。
192.168.0.203节点共gc了187次,其中Full GC了9次。

其中201、202、203节点server日志中除了infinispan Console 展示序列化的错误,无其他报错。kc服务日志中无报错。

2. 压测日期为2022.12.23

Infinispan中会话数8万+,压测kc在线状态接口,一台机器,并发60的情况下。截止2022.12.23日11点到2022.12.23日16点。

192.168.0.201节点共gc了2548次,其中Full GC了28次。
192.168.0.202节点共gc了2364次,其中Full GC了21次。
192.168.0.203节点共gc了2501次,其中Full GC了21次。

其中201、202、203节点server日志中除了infinispan Console 展示序列化的错误,无其他报错。kc服务日志中无报错。

3. 压测日期为2022.12.26

Infinispan中会话数8万+,压测kc在线状态接口,5台机器(每台机器并发60),并发300的情况下。截止2022.12.26日15:37到2022.12.26日16:30。

192.168.0.201节点共gc了72次,其中Full GC了3次,平均一分钟进行1次gc。
192.168.0.202节点共gc了77次,其中Full GC了4次,平均一分钟进行1次gc。
192.168.0.203节点共gc了67次,其中Full GC了2次,平均一分钟进行1次gc。

其中201、202、203节点server日志中除了infinispan Console 展示序列化的错误,无其他报错。kc服务日志中无报错。

4. 压测日期为2022.12.28

调整Infinispan JVM启动参数之后,JAVA_OPTS="-Xms2048m -Xmx2048m -XX:MetaspaceSize=512M -Djava.net.preferIPv4Stack=true。

Infinispan中会话数8万+,压测kc在线状态接口,5台机器(每台机器并发100),并发500的情况下。截止2022.12.27日18:19到2022.12.28日15:50。


192.168.0.201节点共gc了43次,其中Full GC了0次,平均约一个小时进行了一次gc
192.168.0.202节点共gc了43次,其中Full GC了0次,平均约一个小时进行了一次gc
192.168.0.203节点共gc了42次,其中Full GC了0次,平均约一个小时进行了一次gc

其中201、202、203节点server日志中除了infinispan Console 展示序列化的错误,无其他报错。kc服务日志中无报错。

四、测试结论分析

从jmeter聚合报告可知,接口错误率为0,TPS显示400-1000/sec。调整内存后,请求数已经达到5212w+垃圾回收有明显减少,无内存溢出错误。

参考:
https://infinispan.org/documentation/


· END ·

如果这篇文章对您有帮助或者有所启发的话,请帮忙三连暴击点赞、转发和在看。您的支持是我坚持更新的最大动力。

最后,欢迎关注架构至美微信公众号,查看历史文章,希望我的文章可以给您带来收获,哪怕只是一点点。

文章转载自架构至美,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论