There is a java process running on a kubernetes cluster. Jvm start with -Xms512M -Xmx5G. Pod requestMemory: 8Gi, limitMemory: 8Gi. I assume that pod should use nearly 6Gi memory but it reaches 8Gi at the end of day.
I get Heap Dump. it seems Java process use 2.2G memory
I check linux memory management parameters;
/app $ cat /proc/1/statm
6377902 2038023 4219 1 0 6359703 0
/app $ cat /proc/1/status | grep Vm
VmPeak: 25591688 kB
VmSize: 25511608 kB
VmLck: 0 kB
VmPin: 0 kB
VmHWM: 8185536 kB
VmRSS: 8152500 kB
VmData: 25438672 kB
VmStk: 140 kB
VmExe: 4 kB
VmLib: 20648 kB
VmPTE: 17192 kB
VmSwap: 0 kB
/app $ getconf PAGE_SIZE
4096
2038023 * 4K = 8152092 ~ 8.1G memory usage
java process parameters;
java -Xms512M -Xmx5G -Xss256k -XX:SurvivorRatio=8 -XX:NewRatio=6 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -Dio.netty.maxDirectMemory=0 -Dio.netty.noPreferDirect=true -Dio.netty.allocator.type=pooled -Duser.language=en -Duser.country=US -Dserver.port=9102 -jar adapter.jar
if Java process can use Max 5Gi memory, who use 3Gi memory and why