以下内容,以tomcat-8.0.14和jdk1.8.0_20为基准,服务器为ubuntu。
“java -Xmx3550m -Xms3550m -Xmn2g -Xss128k ”是可以直接命令行设置JVM参数吗?是一次性的而重启后失效吗?
这样可以设置jvm的参数;是一次性的。
设置系统环境变量JAVA_OPTS="-Xms256m -Xmx512m"就是永久性的没错吧。
这个得看你是具体怎么设置,以及tomcat是怎么启动的。若你的环境变量是针对个人用户设置的,而tomcat是在服务器启动时,默认启动的,则不会应用这个环境变量。
比如我在命令行“java -Xmx3550m -Xms3550m -Xmn2g -Xss128k ”
或者设置系统环境变量JAVA_OPTS="-Xms256m -Xmx512m"
是不是就是把机器上的JVM优化方案定死了
环境变量`JAVA_OPTS`并不是java本身所支持的环境变量,而是各个java应用自己使用的,例如tomact和jetty。
针对tomcat本身的设置,应该使用环境变量`CATALINA_OPTS`,而不是`JAVA_OPTS`。它们的区别如下:
# CATALINA_OPTS (Optional) Java runtime options used when the "start",
# "run" or "debug" command is executed.
# Include here and not in JAVA_OPTS all options, that should
# only be used by Tomcat itself, not by the stop process,
# the version command etc.
# Examples are heap size, GC logging, JMX ports etc.
# JAVA_OPTS (Optional) Java runtime options used when any command
# is executed.
# Include here and not in CATALINA_OPTS all options, that
# should be used by Tomcat and also by the stop process,
# the version command etc.
# Most options should go into CATALINA_OPTS.
针对HotSpot VM这个具体的JVM实现,它其实还支持自动从两个环境变量获取VM参数:
_JAVA_OPTIONS
JAVA_TOOL_OPTIONS
其实现在:jdk8u/jdk8u/hotspot: 68de83e1d912 src/share/vm/runtime/arguments.cpp
所以只要设置了这俩环境变量的任何一个,都可以影响到HotSpot VM的配置。
参数的优先级是:
-XX:Flags=
< $JAVA_TOOL_OPTIONS
< java命令行参数
< $_JAVA_OPTIONS
(优先级更高的会覆盖掉优先级更低的)
题主说的JAVA_OPTS是Tomcat自己的启动脚本里用的环境变量,对应到上面我说的优先级是属于“java命令行参数”那一类。