# Keycloak Performance Testsuite - Provisioning Parameters ## Keycloak Server Settings: | Category | Setting | Property | Default value | |-------------|-------------------------------|------------------------------------|------------------------------------------------------------------| | JVM | Memory settings | `keycloak.jvm.memory` | -Xms64m -Xmx2g -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m | | Undertow | HTTP Listener max connections | `keycloak.http.max-connections` | 500 | | | AJP Listener max connections | `keycloak.ajp.max-connections` | 500 | | 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 | ## Load Balancer Settings: | Category | Setting | Property | Default value | |-------------|-------------------------------|---------------------------------------|------------------------------------------------------------------| | JVM | Memory settings | `keycloak-lb.jvm.memory` | -Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m | | Undertow | HTTP Listener max connections | `keycloak-lb.http.max-connections` | 500 | | IO | Worker IO thread pool | `keycloak-lb.worker.io-threads` | 2 | | | Worker Task thread pool | `keycloak-lb.worker.task-max-threads` | 16 | ## Infinispan Server Settings | Category | Setting | Property | Default value | |-------------|-------------------------------|-------------------------|-----------------------------------------------------------------------------------------| | JVM | Memory settings | `infinispan.jvm.memory` | -Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -XX:+DisableExplicitGC | ## 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. | Container | Setting | Property | Default value | |-------------|-------------------------------|---------------------------------|-------------------------------------------------------| | Keycloak | Allocated CPUs | `keycloak.docker.cpuset` | 2-3 | | | Allocated CPUs for DC1 | `keycloak.dc1.docker.cpuset` | 2-3 | | | Allocated CPUs for DC2 | `keycloak.dc2.docker.cpuset` | 2-3 | | | Available memory | `keycloak.docker.memlimit` | 2g | | MariaDB | Allocated CPUs | `db.docker.cpuset` | 1 | | | Available memory | `db.docker.memlimit` | 2g | | Monitoring | Allocated CPUs | `monitoring.docker.cpuset` | 0 |