Resource Requests and Limits Share Share via LinkedIn Reddit Email Copy Link Print On This Page Overview This page details how to set resource requests and limits for Appian on Kubernetes for self-managed customers. It provides per-component sizing guidelines for different classes of sites and details how to configure resource requests and limits—and related configurations, if applicable. Note: The sizing guidelines on this page should be treated only as a starting point. Actual sizing depends on your usage of Appian. Unlike the Hardware Requirements guidelines for non-Kubernetes sites, the guidelines on this page do not differentiate between development and production sites. Instead, development sites should be thought of as "small" sites. Zookeeper Class CPU requests / limits Memory requests / limits All sizes 100m / 200m 307Mi / 448Mi Zookeeper resource requests and limits are defined via the .spec.zookeeper.resources field on Appian custom resources. Zookeeper's start scripts set the Xms and Xmx flags when starting the Zookeeper JVM to the values of the ZK_HEAP_MIN and ZK_HEAP_MAX environment variables, respectively. If the environment variables are omitted, the flags default to 128m and 256m. If set, .spec.zookeeper.resources.requests.memory and .spec.zookeeper.resources.limits.memory should be assigned values equivalent to those of the aforementioned environment variables—which can be defined via the .spec.zookeeper.env field—plus a small buffer. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 apiVersion: crd.k8s.appian.com/v1beta1 kind: Appian metadata: name: appian spec: zookeeper: env: - name: ZK_HEAP_MIN value: 128m - name: ZK_HEAP_MAX value: 256m resources: requests: cpu: 100m memory: 307Mi # ZK_HEAP_MAX * 1.2 to account for non-heap memory limits: cpu: 200m memory: 448Mi # ZK_HEAP_MAX * 1.75 to account for non-heap memory Kafka Class CPU requests / limits Memory requests / limits All sizes 500m / 2000m 1229Mi / 1792Mi Kafka resource requests and limits are defined via the .spec.kafka.resources field on Appian custom resources. Kafka's start scripts set the Xms and Xmx flags when starting the Kafka JVM to the values of the KAFKA_HEAP_MIN and KAFKA_HEAP_MAX environment variables, respectively. If the environment variables are omitted, the flags default to 512m and 1024m. If set, .spec.kafka.resources.requests.memory and .spec.kafka.resources.limits.memory should be assigned values equivalent to those of the aforementioned environment variables—which can be defined via the .spec.kafka.env field—plus a small buffer. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 apiVersion: crd.k8s.appian.com/v1beta1 kind: Appian metadata: name: appian spec: kafka: env: - name: KAFKA_HEAP_MIN value: 512m - name: KAFKA_HEAP_MAX value: 1024m resources: requests: cpu: 500m memory: 1229Mi # KAFKA_HEAP_MAX * 1.2 to account for non-heap memory limits: cpu: 2000m memory: 1792Mi # KAFKA_HEAP_MAX * 1.75 to account for non-heap memory Search Server Class CPU requests / limits Memory requests / limits Small 100m / 200m 1.5Gi / 3Gi Medium 150m / 500m 1.5Gi / 3Gi Large 200m / 3000m 5Gi / 10Gi Extra Large 250m / 8000m 7Gi / 14Gi Search Server resource requests and limits are defined via the .spec.searchServer.resources field on Appian custom resources. Search Server's start scripts set the Xms and Xmx flags when starting the Search Server JVM to the value of the SS_HEAP environment variable. If the environment variable is omitted, the flags default to 1g. If set, .spec.searchServer.resources.requests.memory should be assigned a value equivalent to that of the aforementioned environment variable—which can be defined via the .spec.searchServer.env field—plus a small buffer. If set, .spec.searchServer.resources.limits.memory should be assigned a value at least double that of the aforementioned environment variable and .spec.searchServer.resources.requests.memory. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 apiVersion: crd.k8s.appian.com/v1beta1 kind: Appian metadata: name: appian spec: searchServer: env: - name: SS_HEAP value: 1280m resources: requests: cpu: 100m memory: 1.5Gi # SS_HEAP + 256Mi to account for non-heap memory limits: cpu: 200m memory: 3Gi # Double requests.memory Data Server Class CPU requests / limits Memory requests / limits Real-time store count Memory circuit breaker bytes Small 1000m / 2000m 4Gi / 10Gi 2 500000000 Medium 2000m / 4000m 10Gi / 20Gi 4 1000000000 Large 5000m / 8000m 20Gi / 36Gi 8 2000000000 Extra Large 7000m / 24000m 52Gi / 100Gi 12 4000000000 Data server resource requests and limits are defined via the .spec.dataServer.resources field on Appian custom resources. Additionally, the real-time store count and memory circuit breaker configurations should be set. If left unset, the real-time store count will be set to 2 and the memory circuit breaker will not be enforced. The real-time store count is configured by setting the rtscount property in the Appian YAML file. The memory circuit breaker, which is used to limit the amount of memory that each real-time store component can use during query execution, is configured using the .spec.customProperties.rts.queryMemoryLimits.circuitBreaker.threshold.bytes field. For more sizing guidance regarding data server memory, see Memory. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 apiVersion: crd.k8s.appian.com/v1beta1 kind: Appian metadata: name: appian spec: customProperties: rts.queryMemoryLimits.circuitBreaker.threshold.bytes: 500000000 dataServer: resources: requests: cpu: 1000m memory: 4Gi limits: cpu: 2000m memory: 10Gi Service Manager JVM Memory Service Manager's start scripts set the Xmx and XX:MaxDirectMemorySize flags when starting the Service Manager JVM to the values of the KOMODO_HEAP_MAX and KOMODO_DIRECT_MEM_MAX environment variables, respectively. If the environment variables are omitted, the flags both default to 8g. Class KOMODO_DIRECT_MEM_MAX KOMODO_HEAP_MAX Small 512m 1g Medium 512m 1g Large 768m 1536m Extra Large 768m 1536m Kubernetes Resources Service Manager resource requests and limits are defined via the .spec.serviceManager.resources field on Appian custom resources. Resource requests and limits can be overridden on a per-engine basis via the .spec.serviceManager.engineOverrides.[ENGINE].resources fields. CPU Class CPU requests / limits Small 200m / 2000m Medium 700m / 2500m Large 1600m / 3000m Extra Large 2000m / 3500m Memory Each Service Manager pod contains one of the Appian Engines, which have unpredictable and unbounded memory usage. As such, the recommended values for .spec.serviceManager.resources.limits.memory are set very high to prevent the engine from being killed during a spike. Optionally the memory limit for the Service Manager pods can be omitted entirely. While it is not necessary to have available memory to cover the limits for each pod, providing worker nodes without enough memory headroom could lead to availability issues. Configuring .spec.serviceManager.resources.requests.memory will depend on a number of factors, but as a general guideline for new sites refer to the table below. Class Memory requests / limits Small 2.5Gi / 32Gi Medium 6.5Gi / 64Gi Large 12.5Gi / 128Gi Extra Large 17.5Gi / 256Gi Note: Service Manager memory requests should be re-evaluated periodically to adjust for engine memory growth. Use the formula below to determine the new values for existing sites. The formula for calculating the memory requests size of an existing engine is KOMODO_DIRECT_MEM_MAX + KOMODO_HEAP_MAX + (size of kdb on disk * 2.5). The sizing table above can still be used to set the memory limits. KOMODO_DIRECT_MEM_MAX KOMODO_HEAP_MAX kdb file size Memory requests / limits 512m 1g 512m 2.75Gi / 32Gi 512m 1g 2g 6.5Gi / 64Gi 768m 1536m 20g 52.25Gi / 256Gi 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 apiVersion: crd.k8s.appian.com/v1beta1 kind: Appian metadata: name: appian spec: serviceManager: env: - name: KOMODO_DIRECT_MEM_MAX value: 512m - name: KOMODO_HEAP_MAX value: 1g resources: requests: cpu: 200m memory: 2.5Gi limits: cpu: 2000m memory: 32Gi In addition to setting .spec.serviceManager.resources.requests.memory, it is recommended that memory requests be set on a per-engine basis to further optimize your deployment. This can be done using each individual .spec.serviceManager.engineOverrides.[ENGINE].resources.requests.memory setting. Note: Resource requests and limits can only be set per engine type and not by specific shard. Therefore these settings should be applied to execution and analytics engines based on the largest kdb file of the respective execution and analytics shards. For example, if you generally have smaller engines but a big execution engine, you could optimize using a configuration similar to the following: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 apiVersion: crd.k8s.appian.com/v1beta1 kind: Appian metadata: name: appian spec: serviceManager: env: - name: KOMODO_DIRECT_MEM_MAX value: 512m - name: KOMODO_HEAP_MAX value: 1g resources: requests: cpu: 200m memory: 2.5Gi limits: cpu: 2000m memory: 32Gi engineOverrides: execution: requests: cpu: 1600m memory: 12.5Gi limits: cpu: 3000m memory: 128Gi Webapp Class CPU requests / limits Memory requests / limits conf.appserver.maxHeapsize Small 100m / 1000m 4.5Gi / 6Gi 3072m Medium 500m / 2000m 6Gi / 8Gi 4096m Large 1000m / 12000m 9Gi / 13Gi 6144m Extra Large 2500m / 16000m 16Gi / 22Gi 12288m Webapp resource requests and limits are defined via the .spec.webapp.resources field on Appian custom resources. Webapp's start scripts set the Xmx flags when starting the Webapp JVM to the value of the conf.appserver.maxHeapSize custom property. If the custom property is omitted, the flag defaults to 4096m. If set, .spec.webapp.resources.requests.memory and .spec.webapp.resources.limits.memory should be assigned values equivalent to those of the aforementioned custom properties—which can be defined via .spec.customProperties—plus a small buffer. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 apiVersion: crd.k8s.appian.com/v1beta1 kind: Appian metadata: name: appian spec: customProperties: conf.appserver.maxHeapSize: 3072m webapp: resources: requests: cpu: 100m memory: 4.5Gi limits: cpu: 1000m memory: 6Gi RPA CPU requests and limits Class CPU requests / limits Small 1000m / 2000m Medium 1000m / 4000m Large 1000m / 4000m RPA resource requests and limits are defined via the .spec.rpa.resources field on Appian custom resources. CPU requests should be set to 1000m. CPU limits should be set to match the number of CPUs the site node has. Memory allocation RPA's start scripts set the Xmx flags when starting the RPA JVM to the value of the rpa.max.memory RPA property. If the RPA property is omitted, the flag defaults to 2048m. .spec.rpa.resources.requests.memory should be assigned a value proportional to rpa.max.memory and can be specified via .spec.rpa.properties. We recommend applying a small buffer to .spec.rpa.resources.requests.memory to account for non-heap memory (rpa.max.memory * 1.2) We do not recommend putting explicit limits on RPA memory in order to leverage swap. Class rpa.max.memory Memory requests Small 2048 2.5Gi Medium 4096 5.0Gi Large 6144 7.5Gi 1 2 3 4 5 6 7 8 9 10 11 12 13 14 apiVersion: crd.k8s.appian.com/v1beta1 kind: Appian metadata: name: appian spec: rpa: resources: requests: cpu: 1000m memory: 5.0Gi limits: cpu: 4000m properties: rpa.max.memory: 4096 Feedback Was this page helpful? SHARE FEEDBACK Loading...