Keycloak Performance Testsuite - Provisioning Parameters
Overview of Provisioned Services
Testing
Deployment |
Keycloak Server |
Database |
Load Balancer |
Infinispan Server |
Singlenode |
1 instance |
1 instance |
- |
- |
Cluster |
N instances |
1 instance |
1 instance |
- |
Cross-DC |
K instances in DC1 + L instances in DC2 |
1 instance per DC |
1 instance per DC |
1 instance per DC |
Monitoring
Deployment |
CAdvisor |
Influx DB |
Grafana |
Monitoring |
1 instance |
1 instance |
1 instance |
Service Parameters
Keycloak Server
Category |
Setting |
Property |
Default Value |
Scaling[1] |
Scale for cluster |
keycloak.scale |
Maximum size[2] of cluster. |
|
Scale for DC1 |
keycloak.dc1.scale |
Maximum size of DC1. |
|
Scale for DC2 |
keycloak.dc2.scale |
Maximum size of DC2. |
Docker |
Allocated CPUs |
keycloak.docker.cpusets |
2-3 for singlenode, 2 3 for cluster deployment |
|
Allocated CPUs for DC1 |
keycloak.dc1.docker.cpusets |
2 |
|
Allocated CPUs for DC2 |
keycloak.dc2.docker.cpusets |
3 |
|
Available memory |
keycloak.docker.memlimit |
2500m |
JVM |
Memory settings |
keycloak.jvm.memory |
-Xms64m -Xmx2g -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m |
Undertow |
HTTP Listener max connections |
keycloak.http.max-connections |
50000 |
|
AJP Listener max connections |
keycloak.ajp.max-connections |
50000 |
IO |
Worker IO thread pool |
keycloak.worker.io-threads |
2 |
|
Worker Task thread pool |
keycloak.worker.task-max-threads |
16 |
Datasources |
Connection pool min size |
keycloak.ds.min-pool-size |
10 |
|
Connection pool max size |
keycloak.ds.max-pool-size |
100 |
|
Connection pool prefill |
keycloak.ds.pool-prefill |
true |
|
Prepared statement cache size |
keycloak.ds.ps-cache-size |
100 |
[ 1 ] The scaling parameters are optional. They can be set within interval from 1 to the maximum cluster size].
If not set they are automatically set to the maximum size of the cluster (DC1/DC2 respectively).
[ 2 ] Maximum cluster size is determined by provisioner-specific parameter such as keycloak.docker.cpusets
for the default docker-compose provisioner.
The maximum cluster size corresponds to the number of cpusets.
Database
Category |
Setting |
Property |
Default Value |
Docker |
Allocated CPUs |
db.docker.cpusets |
1 |
|
Allocated CPUs for DC1 |
db.dc1.docker.cpusets |
1 |
|
Allocated CPUs for DC2 |
db.dc2.docker.cpusets |
1 |
|
Available memory |
db.docker.memlimit |
2g |
Load Balancer
Category |
Setting |
Property |
Default Value |
Docker |
Allocated CPUs |
lb.docker.cpusets |
1 |
|
Allocated CPUs for DC1 |
lb.dc1.docker.cpusets |
1 |
|
Allocated CPUs for DC2 |
lb.dc2.docker.cpusets |
1 |
|
Available memory |
lb.docker.memlimit |
1g |
JVM |
Memory settings |
lb.jvm.memory |
-Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m |
Undertow |
HTTP Listener max connections |
lb.http.max-connections |
50000 |
IO |
Worker IO thread pool |
lb.worker.io-threads |
2 |
|
Worker Task thread pool |
lb.worker.task-max-threads |
16 |
Infinispan Server
Category |
Setting |
Property |
Default Value |
Docker |
Allocated CPUs for DC1 |
infinispan.dc1.docker.cpusets |
1 |
|
Allocated CPUs for DC2 |
infinispan.dc2.docker.cpusets |
1 |
|
Available memory |
infinispan.docker.memlimit |
1500m |
JVM |
Memory settings |
infinispan.jvm.memory |
-Xms64m -Xmx1g -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -XX:+DisableExplicitGC |
Monitoring
Category |
Setting |
Property |
Default Value |
Docker |
Allocated CPUs |
monitoring.docker.cpusets |
0 |
Note on Docker settings
By default, there are 4 CPU cores allocated: core 0 for monitoring, core 1 for database (MariaDB), and cores 2 and 3 for Keycloak server.
Default memory limits for database and Keycloak server are 2g. The cpuset
and memlimit
parameters set here are set to cpuset
and
mem_limit
parameters of docker-compose configuration. See docker-compose documentation for meaning of the values. How to set the parameters
correctly depends on number of factors - number of cpu cores, NUMA, available memory etc., hence it is out of scope of this document.
Example CPU Settings
HW |
Development Machine |
"Fat Box" |
Cores |
4 |
48 |
NUMA Nodes |
0-3 |
0-23, 24-47 |
Cluster
Setting |
Development Machine |
"Fat Box" |
monitoring.docker.cpusets |
0 |
0 |
db.docker.cpusets |
1 |
1 |
lb.docker.cpusets |
1 |
2 |
keycloak.docker.cpusets |
2-3 |
3-6 7-10 11-16 … 43-46 |
Cross-DC
Setting |
Development Machine |
"Fat Box" |
monitoring.docker.cpusets |
0 |
0 |
db.dc1.docker.cpusets |
1 |
1 |
lb.dc1.docker.cpusets |
1 |
2 |
infinispan.dc1.docker.cpusets |
1 |
3 |
keycloak.dc1.docker.cpusets |
2 |
4-7 8-11 12-15 16-19 20-23 |
db.dc2.docker.cpusets |
1 |
24 |
lb.dc2.docker.cpusets |
1 |
25 |
infinispan.dc2.docker.cpusets |
1 |
26 |
keycloak.dc2.docker.cpusets |
3 |
27-30 31-34 35-38 39-42 43-46 |