我正在使用Spring Cloud Zuul设置HTTP网关服务。该代码确实可以正常运行,但是我想进行一些内存优化。
这是我的启动命令:
java -XX:NativeMemoryTracking=detail -XX:MaxDirectMemorySize=64m -XX:-UseCompressedClassPointers -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Xms256m -Xmx256m -Xmn64m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCApplicationConcurrentTime -XX:+PrintHeapAtGC -Xloggc:gateway_gc.log -jar gateway-service.jar --spring.config.location=bootstrap.yml
我希望网关进程分配的总内存为64m + 128m + 256m + (256k * num_of_threads)
,大约为540MB。但是当我使用top进行检查时,网关进程分配了983444 RES(960MB)。
超出了我的预期400MB。
然后我使用jcmd VM.native_memory检查了网关进程,该进程显示jvm提交的内存为789720KB(771MB),仍然小于960MB。
我还检查了/proc/<pid>smaps
文件,并将该文件中的所有Rss
字段加起来,结果就是960MB。但是我无法理解文件中显示的映射。
So,
1. How can I check the exactly memory usage of JVM?
2. Is there any way I can restrict the JVM memory allocation via JVM arguments?
-我正在使用HotSpot Java版本“ 1.8.0_181”。