从 Java 虚拟机(JVM)层提高 Tomcat 执行效率
2013-04-07 08:58
507 查看
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 行。
[html] view
plaincopyprint?
# Add tomcat-juli.jar to classpath
# tomcat-juli.jar can be over-ridden per instance
if [ -r "$CATALINA_BASE/bin/tomcat-juli.jar" ] ; then
CLASSPATH=$CLASSPATH:$CATALINA_BASE/bin/tomcat-juli.jar
else
CLASSPATH=$CLASSPATH:$CATALINA_HOME/bin/tomcat-juli.jar
fi
# Added by Shane Loo Li at 2012-3-29 Thursday. Use server java virtual machine to run Tomcat
JAVA_OPTS=$JAVA_OPTS" -server"
# Bugzilla 37848: When no TTY is available, don't output to console
have_tty=0
if [ "`tty`" != "not a tty" ]; then
have_tty=1
fi
# For Cygwin, switch paths to Windows format before running java
if $cygwin; then
JAVA_HOME=`cygpath --absolute --windows "$JAVA_HOME"`
JRE_HOME=`cygpath --absolute --windows "$JRE_HOME"`
CATALINA_HOME=`cygpath --absolute --windows "$CATALINA_HOME"`
CATALINA_BASE=`cygpath --absolute --windows "$CATALINA_BASE"`
CATALINA_TMPDIR=`cygpath --absolute --windows "$CATALINA_TMPDIR"`
CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
JAVA_ENDORSED_DIRS=`cygpath --path --windows "$JAVA_ENDORSED_DIRS"`
fi
我是 Shane Loo Li ,其中我增加的那行内容“ JAVA_OPTS=$JAVA_OPTS" -server" ”,就是用来以 -server 方式启动爪哇虚拟机的修改。JAVA_OPTS 是此执行脚本为运行爪哇虚拟机准备的参数变量。最终会追加在启动 Tomcat 的命令后边。添加的位置不宜大幅度调整。从逻辑上来说,这段代码上边是逐一调整各种运行命令行参数。再往下就是执行过程控制的代码了。
对于 catalina.bat (Windows使用),含义与上边一样。不过 Windows 的 cmd壳语法与 bash 不同,修改位置也只是大概一致。对于 Tomcat7.0.22 ,此段代码开始于 168 行。
[html] view
plaincopyprint?
rem Add tomcat-juli.jar to classpath
rem tomcat-juli.jar can be over-ridden per instance
if not exist "%CATALINA_BASE%\bin\tomcat-juli.jar" goto juliClasspathHome
set "CLASSPATH=%CLASSPATH%;%CATALINA_BASE%\bin\tomcat-juli.jar"
goto juliClasspathDone
:juliClasspathHome
set "CLASSPATH=%CLASSPATH%;%CATALINA_HOME%\bin\tomcat-juli.jar"
:juliClasspathDone
rem Added by Shane Loo Li at 2012-1-16 Monday. Use server java virtual machine to run Tomcat
set JAVA_OPTS=%JAVA_OPTS% -server
if not "%LOGGING_CONFIG%" == "" goto noJuliConfig
set LOGGING_CONFIG=-Dnop
if not exist "%CATALINA_BASE%\conf\logging.properties" goto noJuliConfig
set LOGGING_CONFIG=-Djava.util.logging.config.file="%CATALINA_BASE%\conf\logging.properties"
:noJuliConfig
set JAVA_OPTS=%JAVA_OPTS% %LOGGING_CONFIG%
rem 是 cmd壳语法中的注释关键字,相当于bash里边的“#”,C系列里边的“//”,Oracle里边的“--”。
通过这样的修改,再次通过执行脚本“startup.sh”或“startup.bat”启动 Tomcat 的时候,就能够以 -server 方式启动爪哇虚拟机了。
-client 方式启动爪哇虚拟机的。
我们使用 Tomcat 自然是要运行服务器程序。所以经过解读 Tomcat 执行脚本,我在此提供改造方式,使 Tomcat 能够基于 -server 方式的爪哇虚拟机启动。我用 Tomcat7.0.22 的执行脚本为例介绍改造方式。
下面是 catalina.sh 中的一段。大家可以通过查找 tomcat-juli.jar 来定位到这段代码的位置。对于 Tomcat7.0.22 来说,本段代码开始于 195 行。
[html] view
plaincopyprint?
# Add tomcat-juli.jar to classpath
# tomcat-juli.jar can be over-ridden per instance
if [ -r "$CATALINA_BASE/bin/tomcat-juli.jar" ] ; then
CLASSPATH=$CLASSPATH:$CATALINA_BASE/bin/tomcat-juli.jar
else
CLASSPATH=$CLASSPATH:$CATALINA_HOME/bin/tomcat-juli.jar
fi
# Added by Shane Loo Li at 2012-3-29 Thursday. Use server java virtual machine to run Tomcat
JAVA_OPTS=$JAVA_OPTS" -server"
# Bugzilla 37848: When no TTY is available, don't output to console
have_tty=0
if [ "`tty`" != "not a tty" ]; then
have_tty=1
fi
# For Cygwin, switch paths to Windows format before running java
if $cygwin; then
JAVA_HOME=`cygpath --absolute --windows "$JAVA_HOME"`
JRE_HOME=`cygpath --absolute --windows "$JRE_HOME"`
CATALINA_HOME=`cygpath --absolute --windows "$CATALINA_HOME"`
CATALINA_BASE=`cygpath --absolute --windows "$CATALINA_BASE"`
CATALINA_TMPDIR=`cygpath --absolute --windows "$CATALINA_TMPDIR"`
CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
JAVA_ENDORSED_DIRS=`cygpath --path --windows "$JAVA_ENDORSED_DIRS"`
fi
我是 Shane Loo Li ,其中我增加的那行内容“ JAVA_OPTS=$JAVA_OPTS" -server" ”,就是用来以 -server 方式启动爪哇虚拟机的修改。JAVA_OPTS 是此执行脚本为运行爪哇虚拟机准备的参数变量。最终会追加在启动 Tomcat 的命令后边。添加的位置不宜大幅度调整。从逻辑上来说,这段代码上边是逐一调整各种运行命令行参数。再往下就是执行过程控制的代码了。
对于 catalina.bat (Windows使用),含义与上边一样。不过 Windows 的 cmd壳语法与 bash 不同,修改位置也只是大概一致。对于 Tomcat7.0.22 ,此段代码开始于 168 行。
[html] view
plaincopyprint?
rem Add tomcat-juli.jar to classpath
rem tomcat-juli.jar can be over-ridden per instance
if not exist "%CATALINA_BASE%\bin\tomcat-juli.jar" goto juliClasspathHome
set "CLASSPATH=%CLASSPATH%;%CATALINA_BASE%\bin\tomcat-juli.jar"
goto juliClasspathDone
:juliClasspathHome
set "CLASSPATH=%CLASSPATH%;%CATALINA_HOME%\bin\tomcat-juli.jar"
:juliClasspathDone
rem Added by Shane Loo Li at 2012-1-16 Monday. Use server java virtual machine to run Tomcat
set JAVA_OPTS=%JAVA_OPTS% -server
if not "%LOGGING_CONFIG%" == "" goto noJuliConfig
set LOGGING_CONFIG=-Dnop
if not exist "%CATALINA_BASE%\conf\logging.properties" goto noJuliConfig
set LOGGING_CONFIG=-Djava.util.logging.config.file="%CATALINA_BASE%\conf\logging.properties"
:noJuliConfig
set JAVA_OPTS=%JAVA_OPTS% %LOGGING_CONFIG%
rem 是 cmd壳语法中的注释关键字,相当于bash里边的“#”,C系列里边的“//”,Oracle里边的“--”。
通过这样的修改,再次通过执行脚本“startup.sh”或“startup.bat”启动 Tomcat 的时候,就能够以 -server 方式启动爪哇虚拟机了。
相关文章推荐
- 从 Java 虚拟机(JVM)层提高 Tomcat 执行效率
- 从 Java 虚拟机(JVM)层提高 Tomcat 执行效率
- tomcat免重启随意更改java代码 提高开发效率
- 为何多线程就能提高Java程序的执行效率
- 正确认识java JVM与c的执行效率
- tomcat免重启随意更改java代码 提高开发效率
- 如何优化JAVA代码及提高执行效率
- java内功 ---- jvm虚拟机原理总结,侧重于虚拟机类加载执行系统
- 让Andriod虚拟机执行效率提高10倍的方法!
- JAVA 文件编译执行与虚拟机(JVM)简单介绍
- JAVA文件编译执行与虚拟机(JVM)介绍(转)
- 为何多线程就能提高Java程序的执行效率
- 提高开发效率之tomcat免重启(随意更改java代码)
- Java利用多线程执行SQL减少执行时间提高效率
- 优化Tomcat(运行模式、JVM、线程数),提高运行效率
- 如何优化JAVA代码及提高执行效率
- tomcat免重启随意更改java代码 提高开发效率(未测试)
- 【java基础】.class文件由虚拟机的解释器解释为机器码,这个机器码是给JVM执行的机器码,还是类似于.exe给操作系统执行的机器码
- 如何优化JAVA代码及提高执行效率
- tomcat免重启随意更改java代码 提高开发效率(转http://developer.51cto.com/art/201012/241243.htm)