外置 Tomcat 没这么太用, 今天在 windows 搭 xwiki 服务器, 比预期多花了点时间, 主要是 tomcat 环境变量没配对, tomcat 启动后闪退, 还没有日志. 最后定位到是 tomcat 环境变量问题, 解决起来就容易了.
1. Tomcat 启动后闪退, 关键获知原因的方法:
startup.bat 启动脚本调用 catalina.bat , 而在 catalina.bat 中使用 windows 的 start 方式启动, 即启动一个新的窗口, 一旦闪退, 这个新窗口立即关闭, 看不到日志输出. 这时应该将 start 启动, 调整为本窗体启动, 即删除 start 前置命令.
2. Tomcat 的几个环境变量.
在 tomcat 安装目录的bin子目录下, 新建一个 setenv.bat 文件, 将下面的环境变量设置加到这个文件中, 该文件会在 tomcat startup.bat启动时候被自动加载, 正好用来设置环境变量.
set JAVA_HOME=c:javajdk1.8
set CATALINA_HOME=c: omcat omcat8.5.42
set CATALINA_BASE=c: omcat omcat8.5.42
set JAVA_OPTS="-Xmx1024m -Xms1024m"
需要说明的是, CATALINA_HOME 应指向 tomcat 的 bin和 lib 的父目录, 即 binary 的公共路径.
而 CATALINA_BASE 应指向 tomcat 的conf和logs和webapps和work的父目录, 即网站应用的父目录.
对于单tomcat 实例, 这两个环境变量取值是一样的.
3. 应用程序 war 包部署路径
应用程序 war 应该放置到 webapps 目录下, 多数war包文件一般含有版本号, 但我们期望应用的url 最好只包含应用名, 而不要包含版本号, 需要重新命名 war 包名称, 比如xwiki.org 官网下载的 xwiki-platform-distribute-war-11.5.war, 放置到 webapps 下后, 需要重命名为 xwiki.war, 或者解压war包.
JAVA_OPTS 说明含义:
-Xms128m
表示JVM Heap(堆内存)最小尺寸128MB,初始分配
-Xmx512m
表示JVM Heap(堆内存)最大允许的尺寸256MB,按需分配。
说明:如果-Xmx不指定或者指定偏小,应用可能会导致java.lang.OutOfMemory错误,此错误来自JVM不是Throwable的,无法用try...catch捕捉。
PermSize和MaxPermSize指明虚拟机为java永久生成对象(Permanate generation)如,class对象、方法对象这些可反射(reflective)对象分配内存限制,这些内存不包括在Heap(堆内存)区之中。
-XX:PermSize=64MB 最小尺寸,初始分配
-XX:MaxPermSize=256MB 最大允许分配尺寸,按需分配
过小会导致:java.lang.OutOfMemoryError: PermGen space
MaxPermSize缺省值和-server -client选项相关。
-server选项下默认MaxPermSize为64m
-client选项下默认MaxPermSize为32m