@MWMDAEG
Hi Daniel,
I have not received any useful response from IFS Support so far.
However, based on my own investigation, I made some changes to the ifscloud-values.yaml file. We commonly experience OOM issues with the following services:
-
ifsapp-odata
-
ifsapp-client-services
-
ifsapp-connect
-
ifsapp-reporting
-
ifsapp-reporting-ren
-
ifsapp-native-server
Therefore, I have added the following configurations to the ifscloud-values.yaml files for most of our customers:
ifsappodata:
replicas: 4
addMemory: 7000 # Minmemory 1000 + 7000 = 8G
MaxRAMPercentage: 80
ifsappreporting:
replicas: 6
addMemory: 1200 # Minmemory 800 + 1200 = 2G
MaxRAMPercentage: 30
ifsappreportingren:
replicas: 2
addMemory: 8500 # Minmemory 500 + 8500 = 9G
MaxRAMPercentage: 80
ifsappconnect:
replicas: 2
addMemory: 3000 # Minmemory 1000 + 3000 = 4G
MaxRAMPercentage: 80
ifsappclientservices:
replicas: 2
addMemory: 3500 # Minmemory 500 + 3500 = 4G
MaxRAMPercentage: 80
ifsappnativeserver:
replicas: 2
addMemory: 3000 # Minmemory 1000 + 3000 = 4G
MaxRAMPercentage: 80
- The default memory allocation is defined by the IFS Helm charts. The total memory available to each container is calculated as:
Total Memory = minMemory + addMemory
Therefore, I have added the addMemory directive to ifscloud-values.yaml to increase the total memory available to the required containers, as shown above.
By default, global.memRatio is set to 100. This means that the Kubernetes memory request and limit are both set to the total memory defined in ifscloud-values.yaml or provided by the default IFS Helm charts.
We can change global.memRatio to 50, which sets the memory request to 50% of the total memory while keeping the full amount as the memory limit.
global:
memRatio: 50
For example, if the total memory for a container is 8 GB:
Memory limit: 8 GB
Memory request: 4 GB
The Kubernetes scheduler considers the request memory when scheduling the container on a node, while the container can use memory up to its configured limit when required.
With this approach, we can provide additional memory capacity to the containers when needed without having to increase the middle-tier server memory allocation unnecessarily.
- I have also configured two replicas for each deployment. You can increase the number of replicas further based on your requirements and available resources.
-
The MaxRAMPercentage directive defines how much of the container's total available memory is allocated to the JVM.
For all deployments except ifsapp-reporting, I have set MaxRAMPercentage to 80%, which provides sufficient memory for the JVM heap.
The ifsapp-reporting deployment requires more heap memory. Therefore, I have set MaxRAMPercentage to 30% for this deployment to allow more memory for the heap.
Note: Even if global.memRatio is set to 50%, MaxRAMPercentage is still calculated based on the container's defined memory limit, not the memory request.
After applying the above changes, the pods in all our customer environments have been running without any OOM restarts.
Of course, pod memory requirements are environment-specific. You can monitor the memory usage using a monitoring tool such as Grafana and increase the memory allocation if a container requires additional memory.