场景: 当在服务器上提交jar包,或者是执行java -version 的命令的时候,会出现如下提示
Error occurred during initialization of VM
Could not reserve enough space for object heap
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
有可能的原因是:当执行java -version 命令的时候,会将默认的jvm参数-Xmx500M -Xms500M设置为jvm启动参数,如果当前commited_as + 500M > commitLimit 且 overcommit_memory=2 ,那么就会出现上面的问题。
commited_as 和 commitLimit的值查看: grep -i commit /proc/meminfo
overcommit_memory的值查看: cat /proc/sys/vm/overcommit_memory
overcommit_ratio直接影响着commitLimit 的值成正相关(overcommit_ratio/100),查看: cat /proc/sys/vm/overcommit_ratio
jvm的默认参数查看:
java -XX:+PrintFlagsFinal -version | grep -i newsize 也可以用 PrintFlagsInitial 的参数
java -XX:+PrintCommandLineFlags -version 这个会返回当前的初始化heapsize-->-XX:InitialHeapSize=1583109568
===========================分隔线======================================
处理:只需要以root的身份执行 echo 60 > /proc/sys/vm/overcommit_ratio ,这里的参数根据实际生产的需要进行调整!