Tomcat应该在哪里设置JVM参数

看到过很多讲设置JVM的文章写把JVM参数写在Tomcat的catalina.sh(*nix系统中脚本扩展名为sh,Windows系统中脚本扩展名为bat,主文件名相同,以下只以*nix系统为例)文件中,但实际上Tomcat的catalina.sh文件中的注释内容,明确说明不要将变量放在其中,而要放在setenv.sh文件中,以实现用户自定义变量和系统脚本的分离。(“Do not set the variables in this script. Instead put them into a script setenv.sh in CATALINA_BASE/bin to keep your customizations separate.”)

setenv.sh文件认情况是不存在的,如果需要设置用户自定义变量的话,则需要用户自己在CATALINA_BASE/bin或CATALINA_HOME/bin路径下创建,如果这两个变量对应的实际路径不同,并且两个路径都存在setenv.sh文件,则只有CATALINA_BASE/bin下的生效。另外,如果是在Windows系统下将Tomcat注册为服务来启动,则不支持setenv.bat中的设置,用户自定义变量需要保存在Windows的注册表中,可以使用tomcatXw.exe文件来维护(X为版本号),详见catalina.sh脚本中的注释和RUNNING.TXT。

用户自定义变量放在setenv.sh文件中和系统脚本分离,好处在易于维护,比如:在升级Tomcat版本时不需要修改新的catalina.sh来加上原来设置的内容,直接覆盖原路径的catalina.sh(或者是复制setenv.sh到新路径)就可以了;加了什么设置,以后其他人来维护的话,打开setenv.sh文件也一目了然,不用在有很多行代码的catalina.sh文件中查找;避免了修改catalina.sh时将原脚本内容意外改错的情况发生。而坏处则只是需要新建一个脚本文件。何乐而不为呢?

另外,希望大家重视文档的作用,多看成熟产品的文档,多写、多维护自己代码的文档。

相关文章

jinfo 命令可以用来查看 Java 进程运行的 JVM 参数,命令如下...
原文链接:https://www.cnblogs.com/niejunlei/p/5987611.ht...
java 语言, 开发者不能直接控制程序运行内存, 对象的创建都是...
jvm
1.jvm的简单抽象模型:  2.类加载机制     双亲委派模...
堆外内存JVM启动时分配的内存,称为堆内存,与之相对的,在代...
1.springboot和tomcat2.springcloud的请求如何通过网关鉴权?...