从 Java 虚拟机(JVM)层提高 Tomcat 执行效率
Sun 提供的 爪哇虚拟机(JVM)提供了运行时参数“-client”和“-server”。前者 -client 有很快的启动速度,同时内存和线程管理方式利于图形界面控件的调度。后边的 -server 的内存和线程管理方式对于运行JavaEE 的相关类库以及类似模式的程序支持很强大。同时,-client 比 -server 能有更快的加载速度,经过各种环境实地测试,-client 启动时间能够在 -server 的 50% 以下,也就是启动快了一倍以上。可能就是因此,Tomcat 给出的执行脚本,没有提供方便的途径调整此参数。所有程序都是用 -client 方式启动爪哇虚拟机的。
我们使用 Tomcat 自然是要运行服务器程序。所以经过解读 Tomcat 执行脚本,我在此提供改造方式,使 Tomcat 能够基于 -server 方式的爪哇虚拟机启动。我用 Tomcat7.0.22 的执行脚本为例介绍改造方式。
下面是 catalina.sh 中的一段。大家可以通过查找 tomcat-juli.jar 来定位到这段代码的位置。对于 Tomcat7.0.22 来说,本段代码开始于 195 行。
我是 Shane Loo Li ,其中我增加的那行内容“ JAVA_OPTS=$JAVA_OPTS" -server" ”,就是用来以 -server 方式启动爪哇虚拟机的修改。JAVA_OPTS 是此执行脚本为运行爪哇虚拟机准备的参数变量。最终会追加在启动 Tomcat 的命令后边。添加的位置不宜大幅度调整。从逻辑上来说,这段代码上边是逐一调整各种运行命令行参数。再往下就是执行过程控制的代码了。
对于 catalina.bat (Windows使用),含义与上边一样。不过 Windows 的 cmd壳语法与 bash 不同,修改位置也只是大概一致。对于 Tomcat7.0.22 ,此段代码开始于 168 行。
通过这样的修改,再次通过执行脚本“startup.sh”或“startup.bat”启动 Tomcat 的时候,就能够以 -server 方式启动爪哇虚拟机了。