Estoy usando Hazelcast en un octavo núcleo y una máquina Linux Memeory de 264G. El siguiente es mi script de inicio.
nohup java -Djava.rmi.server.hostname=172.19.141.2 -server -Xms40G -Xmx40G -XX:+PrintGCDateStamps -XX:+PrintGCDetails -Xloggc:./logs/gc.log -Xss256k -XX:PermSize=128M -XX:MaxPermSize=512M -Djava.util.Arrays.useLegacyMergeSort=true -XX:+UseG1GC -XX:G1HeapRegionSize=32 -XX:MaxGCPauseMillis=600 -XX:InitiatingHeapOccupancyPercent=70 -XX:+HeapDumpOnOutOfMemoryError -Dhazelcast.jmx=true -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=2222 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.net.preferIPv4Stack=true -Djava.ext.dirs=../lib:../lib-business:../lib-other com.hazelcast.core.server.StartServer &Mi problema es que el gc completo tarda unos 12 segundos, lo cual es inaceptable. He intentado establecer -XX: MaxGCPauseMillis=600 param. Pero no es útil. Este es el registro de gc.
2017-04-28T21:38:17.795+0800: 9237.910: [Full GC (Allocation Failure) 27G->7361M(40G), 15.6893722 secs] [Eden: 1024.0K(2010.0M)->0.0B(2048.0M) Survivors: 38.0M->0.0B Heap: 27.5G(40.0G)->7361.6M(40.0G)], [Metaspace: 17817K->17726K(18432K)] [Times: user=23.49 sys=0.16, real=15.69 secs]Deseo tu ayuda.
Después de algunas pruebas, descubrí que es el objeto grande el que hace que el gc dure mucho tiempo. Cuando elimino el objeto grande, el gc joven es inferior a 500 ms y no hay un gc completo durante tanto tiempo.