Tomcat setenv.sh
前言
在使用 Tomcat 部署 Java 项目的时候,有时候需要限定 JVM 内存的使用,还有些时候,服务器上需要部署多个 Java 项目,但是项目依赖的 Java 版本不同,这个时候我们需要为每个 Tomcat 实例指定不同的 Java 版本,本文将会介绍如何使用 setenv.sh 实现这两个需求。
什么是 setenv.sh
setenv.sh 可以认为是 Tomcat 留给我们的扩展点,在这个文件中,我们可以指定 JAVA_OPTS 和一些其他的环境变量,如:JAVA_HOME。
我们知道启动 Tomcat, 可以运行 Tomcat bin 目录下的 startup.sh,startup.sh 脚本中会使用到 bin 目录下的 catalina.sh,该文件中有这么一段:
# Environment Variable Prerequisites
#
# 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.
#
# CATALINA_HOME May point at your Catalina "build" directory.
这一段的意思是告诉我们不要直接修改 catalina.sh,应该去 bin 目录下新建一个 setenv.sh,并在该文件做相应的配置。 只要有这个文件,catalina.sh 会自动应用该文件中的配置,catalina.sh 使用 setenv.sh 的代码片段如下:
if [ -r "$CATALINA_BASE/bin/setenv.sh" ]; then
. "$CATALINA_BASE/bin/setenv.sh"
elif [ -r "$CATALINA_HOME/bin/setenv.sh" ]; then
. "$CATALINA_HOME/bin/setenv.sh"
fi
另外需要提醒一点,setenv.sh 需要具备执行权限,给 setenv.sh 添加执行权限很简单,使用 chmod 即可:
chmod u+x setenv.sh
注意:windows 上的后缀名为.bat,所以 setenv.sh 在 windows 上对应文件为 setenv.bat。另外本文中提到的所有 .sh 后缀名的文件,在 window 上应该为 .bat。
setenv.sh 限制内存使用 Xmx
可以使用 Xmx 限制 JVM heap 内存最大值。只需要在 setenv.sh 中加入这么一段即可:
export JAVA_OPTS="$JAVA_OPTS -Xms1024M -Xmx1024M"
setenv.sh 指定 JAVA_HOME
有时候线上可能部署了多个 Java 应用,这些应用使用不同的 Tomcat 实例并且这些应用要求的 Java 版本各不相同,这个时候我们可以为每个 Tomcat 实例配置不同的 Java 版本,在 setenv.sh 中加入下面这段:
export JAVA_HOME=/usr/lib/jvm/java-7-oracle/jre
注意不要照抄,JAVA_HOME 后面的路径 ‘/usr/lib/jvm/java-7-oracle/jre’ 需要根据实际情况来。什么?你不知道 JAVA_HOME?oh god please no!自己去查一下吧。实在不行,也可以去问问 ChatGPT。
总结
本文介绍了如何使用 setenv.sh 来配置 Tomcat,并介绍了两个常见场景的配置方法。最后给大家分享一个 setenv.sh 的 gist,可以拿来做参照。
温馨提示:反馈需要登录