如果用mvn命令,启动 springboot 1.x版本的项目,并且想限制最大内存,下面写法往往不成功,如下,最大内存并不会被限制在512M。
这个写法应该是只适用于springboot2.x版本。
mvn spring-boot:run -Dmaven.test.skip=true -Dspring-boot.run.jvmArguments="-Xms128m -Xmx512m"
解决办法:修改maven安装目录bin下的启动命令 mvn.cmd,在其中的java启动参数MAVEN_DEBUG_OPTS后面,加入行(编辑器里寻找'MAVEN_DEBUG_OPTS' 来快速定位):
-D(VMD-Z) ^
-Xms128M ^
-Xmx512M ^
其中-D标识当前启动的maven程序的特征,这样可以在“任务管理器”里的“命令行”列里可以观察的更清楚,尤其是当有多个java/maven程序时候。其它2个不多说了;
如果要针对不同的应用,做不同的内存的限制,则可以将mvn.cmd复制多份,去加载不同项目。
但是如果这个maven进程,启动了额外的一个子进程(child process),那么子进程的内存消耗,就不受这个maven父进程(launcher)的约束了,这时候,就要把整个项目打成一个jar包(省略掉luncher),再调用 :
java -Xms100m -Xmx300m -jar target\xxx.jar
--------maven+springboot父子进程(child process)----可以看出,用一个 Launcher .class来启动了 springboot。
父进程:
"D:\jdk1.8\bin\java.exe"
-classpath "D:\apache-maven-3.5.2\bin\..\boot\plexus-classworlds-2.5.2.jar"
"-Dclassworlds.conf=D:\apache-maven-3.5.2\bin\..\bin\m2.conf"
"-Dmaven.home=D:\apache-maven-3.5.2\bin\.."
"-Dlibrary.jansi.path=D:\apache-maven-3.5.2\bin\..\lib\jansi-native"
"-Dmaven.multiModuleProjectDirectory=D:\my-springboot-project\"
org.codehaus.plexus.classworlds.launcher.Launcher -f pom-vdm-A.xml spring-boot:run -Dmaven.test.skip=true -Drun.profiles=230VdmA
------------------------
子进程:
D:\jdk1.8\jre\bin\java.exe -cp D:\my-springboot-project\target\classes;D:\apache-maven-3.5.2\repo\org\apache\commons\commons-lang3\3.4\commons-lang3-3.4.jar;D:\apache-maven-3.5.2\repo\com\zaxxer\HikariCP-java6\2.3.13\HikariCP-java6-2.3.13.jar;D:\apache-maven-3.5.2\repo\com\fasterxml\jackson\core\jackson-annotations\2.8.0\jackson-annotations-2.8.0.jar;D:\apache-maven-3.5.2\repo\org\jboss\logging\jboss-logging\3.3.1.Final\jboss-logging-3.3.1.Final.jar;D:\apache-maven-3.5.2\repo\com\alibaba\fastjson\1.2.62\fastjson-1.2.62.jar;... com.my.Application --spring.profiles.active=230VdmA