分析 Tomcat startup.bat 启动脚本
闲来无事,平常容器多使用tomcat,所以今天就想打开tomcat启动脚本看看。都说tomcat是纯Java的,这东西只有自己打开看看才能知道。呵呵!
说来tomcat的脚本确实不难,启动脚本更是没有几行,以下是我解释的tomcat startup.bat脚本。
rem Guess CATALINA_HOME if not defined 确定该命令(脚本)是否在tomcat目录里
set CURRENT_DIR=%cd% 设定 CURRENT_DIR 为当前目录
if not "%CATALINA_HOME%" == "" goto gotHome 如果 CATALINA_HOME 不为空,跳转到 gotHome 位置
set CATALINA_HOME=%CURRENT_DIR% 如果为空,CATALINA_HOME设成 CURRENT_DIR(即当前目录)
if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome 如果存在catalina.bat, 就去 gotHome
cd .. 否则返回上级目录 (你可以尝试把startup.bat拷贝到上级目录,它一样可以启动)
set CATALINA_HOME=%cd% 把CATALINA_HOME 重新设为当前目录。(应该是tomcat\)
cd %CURRENT_DIR% 转到 CURRENT_DIR目录,即 tomcat\bin\下
:gotHome gotHome 位置
if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome 如果存在catalina.bat,就去 okHome
echo The CATALINA_HOME environment variable is not defined correctly 否则输出下面两行,并终结
echo This environment variable is needed to run this program
goto end
:okHomeset EXECUTABLE=%CATALINA_HOME%\bin\catalina.bat 为EXECUTABLE变量设定值
rem Check that target executable exists 查询catalina.bat 命令是否存在
if exist "%EXECUTABLE%" goto okExec 查看 catalina.bat 是否存在,如果存在,就去okExec位置
echo Cannot find %EXECUTABLE% 否则输出下面两行,并终结
echo This file is needed to run this program
goto end
:okExecrem Get remaining unshifted command line arguments and save them in the 将命令参数存入变量里
set CMD_LINE_ARGS=
:setArgs 前面两行是注释,这里是setArgs 位置的返回点
if ""%1""=="""" goto doneSetArgs 如果没有参数,转到doneSetArgs位置
set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1 如果有参数,将参数放入CMD_LINE_ARGS里,加在CMD_LINE_ARGS变量的后面
shift 把变量%2 里移到%1
goto setArgs 返回setArgs位置,进行循环
:doneSetArgscall "%EXECUTABLE%" start %CMD_LINE_ARGS% 如果一切顺利调用 "%EXECUTABLE%" start 并加上 结尾参数
:end
从上文的分析中我们可以看见,startup.bat脚本实际上并没有做什么实际的工作,主要是查看当前命令所在目录。看是否在tomcat\或tomcat\bin\目录下。以及查看将调用该命令的参数传递给catalina.bat。最后调用catalina.bat start命令。与tomcat书中说startup.bat与catalina.bat start功能一样,相吻合。即startup.bat的主要作用是调用catalina.bat start命令。
我之后,会在另一篇文章上对catalina.bat 脚本进行解析!
tomcat startup.bat 解读
if "%OS%" == "Windows_NT" setlocal //判断当前系统是否是window系统
rem --------------------------------------------------------------------------- //rem 是注释(下同)
rem Start script for the CATALINA Server
rem
rem $Id: startup.bat 302918 2004-05-27 18:25:11Z yoavs $
rem ---------------------------------------------------------------------------
rem Guess CATALINA_HOME if not defined
set CURRENT_DIR=%cd% //设置当前目录
if not "%CATALINA_HOME%" == "" goto gotHome //如果设置了CATALINA_HOME环境变量 ,就直接到下面的gotHome处
set CATALINA_HOME=%CURRENT_DIR% //如果没有设置CATALINA_HOME,就设置CATALINA_HOME为当前目录(其实这里她假设你进入tomcat的安装目录)
if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome//判断一下catalina.bat是否找到了,找到了就直接到下面的gotHome处
cd .. //这里他是假设你开始已经进入到了tomcat的bin目录,所以就退到上一级目录
set CATALINA_HOME=%cd%//现在再设置CATALINA_HOME为tomcat的安装目录
cd %CURRENT_DIR% //这里是进入dos的当前目录
:gotHome
if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome //再次判断catalina.bat是否找到了,找到了就直接到下面的okHome处,没有的话,就只能提示你啦!
echo The CATALINA_HOME environment variable is not defined correctly
echo This environment variable is needed to run this program
goto end
:okHome
set EXECUTABLE=%CATALINA_HOME%\bin\catalina.bat //设置要执行的文件
rem Check that target executable exists
if exist "%EXECUTABLE%" goto okExec //再次判断catalina.bat是否找到了,找到了就直接到下面的okExec处,没有的话,就提示。
echo Cannot find %EXECUTABLE%
echo This file is needed to run this program
goto end
:okExec
rem Get remaining unshifted command line arguments and save them in the
set CMD_LINE_ARGS= //这里是设置参数
:setArgs
if ""%1""=="""" goto doneSetArgs //判断参数是否加入完成
set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1 //将参数组成一行,接在后面
shift
goto setArgs
:doneSetArgs
call "%EXECUTABLE%" start %CMD_LINE_ARGS% //执行catalina.bat,最好将这行改为:echo "%EXECUTABLE%" start %CMD_LINE_ARGS% 以便阅读、理解本文件的作用
:end
//这个批处理文件,主要是正确的找到catalina.bat,并且执行。
- 当把tomcat解压到一个地方时,通常是设置一个CATALINA_HOME的环境变量,执行这个文件时,就很容易找到 catalina.bat
- 如果没有设置CATALINA_HOME的环境变量,那么你需要在dos中进入tomcat的安装目录,或者bin...子目录,再执行这个文件,如果在其他目录,将会出现提示找不到文件。 【针对startup.bat文件】
- 双击该文件时,%cd%的值为当前目录的值,所有执行是没有问题的。
Apache HTTP Server 与 Tomcat jackey
整合 Apache Http Server 和 Tomcat 可以提升对静态文件的处理性能、利用 Web
服务器来做负载均衡以及容错、无缝的升级应用程序。本文介绍了三种整合 Apache 和 Tomcat 的方式。
首先我们先介绍一下为什么要让 Apache 与 Tomcat 之间进行连接。事实上 Tomcat 本身已经提供了 HTTP
服务,该服务默认的端口是 8080,装好 tomcat 后通过 8080 端口可以直接使用 Tomcat
所运行的应用程序,你也可以将该端口改为 80。
既然 Tomcat 本身已经可以提供这样的服务,我们为什么还要引入 Apache 或者其他的一些专门的 HTTP
服务器呢?原因有下面几个:
1. 提升对静态文件的处理性能
2. 利用 Web 服务器来做负载均衡以及容错
3. 无缝的升级应用程序
这三点对一个 web 网站来说是非常之重要的,我们希望我们的网站不仅是速度快,而且要稳定,不能因为某个 Tomcat
宕机或者是升级程序导致用户访问不了,而能完成这几个功能的、最好的 HTTP 服务器也就只有 apache 的 http server
了,它跟 tomcat 的结合是最紧密和可靠的。
接下来我们介绍三种方法将 apache 和 tomcat 整合在一起。
JK
这是最常见的方式,你可以在网上找到很多关于配置JK的网页,当然最全的还是其官方所提供的文档。JK 本身有两个版本分别是 1 和 2,目前
1 最新的版本是 1.2.19,而版本 2 早已经废弃了,以后不再有新版本的推出了,所以建议你采用版本 1。
JK 是通过 AJP 协议与 Tomcat 服务器进行通讯的,Tomcat 默认的 AJP Connector 的端口是 8009。JK
本身提供了一个监控以及管理的页面 jkstatus,通过 jkstatus 可以监控 JK 目前的工作状态以及对到 tomcat
的连接进行设置,如下图所示:
图 1:监控以及管理的页面 jkstatus
在这个图中我们可以看到当前JK配了两个连接分别到 8109 和 8209 端口上,目前 s2 这个连接是停止状态,而 s1
这个连接自上次重启后已经处理了 47 万多个请求,流量达到 6.2 个 G,最大的并发数有 13 等等。我们也可以利用 jkstatus
的管理功能来切换 JK 到不同的 Tomcat 上,例如将 s2 启用,并停用
s1,这个在更新应用程序的时候非常有用,而且整个切换过程对用户来说是透明的,也就达到了无缝升级的目的。关于 JK
的配置文章网上已经非常多了,这里我们不再详细的介绍整个配置过程,但我要讲一下配置的思路,只要明白了配置的思路,JK
就是一个非常灵活的组件。
JK 的配置最关键的有三个文件,分别是
httpd.conf
Apache 服务器的配置文件,用来加载 JK 模块以及指定 JK 配置文件信息
workers.properties
到 Tomcat 服务器的连接定义文件
uriworkermap.properties
URI 映射文件,用来指定哪些 URL 由 Tomcat 处理,你也可以直接在 httpd.conf 中配置这些
URI,但是独立这些配置的好处是 JK 模块会定期更新该文件的内容,使得我们修改配置的时候无需重新启动 Apache 服务器。
其中第二、三个配置文件名都可以自定义。下面是一个典型的 httpd.conf 对 JK 的配置
# (httpd.conf)
# 加载 mod_jk 模块
LoadModule jk_module modules/mod_jk.so
#
# Configure mod_jk
#
JkWorkersFile conf/workers.properties
JkMountFile conf/uriworkermap.properties
JkLogFile logs/mod_jk.log
JkLogLevel warn
接下来我们在 Apache 的 conf 目录下新建两个文件分别是
workers.properties、uriworkermap.properties。这两个文件的内容大概如下#
# workers.properties
#
# list the workers by name
worker.list=DLOG4J, status
# localhost server 1
# ------------------------
worker.s1.port=8109
worker.s1.host=localhost
worker.s1.type=ajp13
# localhost server 2
# ------------------------
worker.s2.port=8209
worker.s2.host=localhost
worker.s2.type=ajp13
worker.s2.stopped=1
worker.DLOG4J.type=lb
worker.retries=3
worker.DLOG4J.balanced_workers=s1, s2
worker.DLOG4J.sticky_session=1
worker.status.type=status
以上的 workers.properties 配置就是我们前面那个屏幕抓图的页面所用的配置。首先我们配置了两个类型为 ajp13 的
worker 分别是 s1 和 s2,它们指向同一台服务器上运行在两个不同端口 8109 和 8209 的 Tomcat
上。接下来我们配置了一个类型为 lb(也就是负载均衡的意思)的 worker,它的名字是 DLOG4J,这是一个逻辑的
worker,它用来管理前面配置的两个物理连接 s1 和 s2。最后还配置了一个类型为 status 的 worker,这是用来监控
JK 本身的模块。有了这三个 worker 还不够,我们还需要告诉 JK,哪些 worker 是可用的,所以就有 worker.list
= DLOG4J, status 这行配置。
接下来便是 URI 的映射配置了,我们需要指定哪些链接是由 Tomcat 处理的,哪些是由 Apache
直接处理的,看看下面这个文件你就能明白其中配置的意义
/*=DLOG4J
/jkstatus=status
!/*.gif=DLOG4J
!/*.jpg=DLOG4J
!/*.png=DLOG4J
!/*.css=DLOG4J
!/*.js=DLOG4J
!/*.htm=DLOG4J
!/*.html=DLOG4J
相信你已经明白了一大半了:所有的请求都由 DLOG4J 这个 worker 进行处理,但是有几个例外,/jkstatus 请求由
status 这个 worker 处理。另外这个配置中每一行数据前面的感叹号是什么意思呢?感叹号表示接下来的 URI 不要由 JK
进行处理,也就是 Apache 直接处理所有的图片、css 文件、js 文件以及静态 html 文本文件。
通过对 workers.properties 和 uriworkermap.properties
的配置,可以有各种各样的组合来满足我们前面提出对一个 web 网站的要求。您不妨动手试试!
http_proxy
这是利用 Apache 自带的 mod_proxy 模块使用代理技术来连接 Tomcat。在配置之前请确保是否使用的是 2.2.x
版本的 Apache 服务器。因为 2.2.x 版本对这个模块进行了重写,大大的增强了其功能和稳定性。
http_proxy 模式是基于 HTTP 协议的代理,因此它要求 Tomcat 必须提供 HTTP 服务,也就是说必须启用
Tomcat 的 HTTP Connector。一个最简单的配置如下
ProxyPass /images !
ProxyPass /css !
ProxyPass /js !
ProxyPass / http://localhost:8080/ 在这个配置中,我们把所有 http://localhost 的请求代理到 http://localhost:8080/ ,这也就是
Tomcat 的访问地址,除了 images、css、js 几个目录除外。我们同样可以利用 mod_proxy
来做负载均衡,再看看下面这个配置ProxyPass /images !
ProxyPass /css !
ProxyPass /js !
ProxyPass / balancer://example/
<Proxy balancer://example/>
BalancerMember http://server1:8080/ BalancerMember http://server2:8080/ BalancerMember http://server3:8080/ </Proxy>
配置比 JK 简单多了,而且它也可以通过一个页面来监控集群运行的状态,并做一些简单的维护设置。
图 2:监控集群运行状态
ajp_proxy
ajp_proxy 连接方式其实跟 http_proxy 方式一样,都是由 mod_proxy 所提供的功能。配置也是一样,只需要把
http:// 换成 ajp:// ,同时连接的是 Tomcat 的 AJP Connector 所在的端口。上面例子的配置可以改为:ProxyPass /images !
ProxyPass /css !
ProxyPass /js !
ProxyPass / balancer://example/
<Proxy balancer://example/>
BalancerMember ajp://server1:8080/
BalancerMember ajp://server2:8080/
BalancerMember ajp://server3:8080/
</Proxy>
采用 proxy 的连接方式,需要在 Apache 上加载所需的模块,mod_proxy 相关的模块有
mod_proxy.so、mod_proxy_connect.so、mod_proxy_http.so、mod_proxy_ftp.so、mod_proxy_ajp.so,
其中 mod_proxy_ajp.so 只在 Apache 2.2.x 中才有。如果是采用 http_proxy 方式则需要加载
mod_proxy.so 和 mod_proxy_http.so;如果是 ajp_proxy 则需要加载 mod_proxy.so 和
mod_proxy_ajp.so这两个模块。
三者比较
相对于 JK 的连接方式,后两种在配置上是比较简单的,灵活性方面也一点都不逊色。但就稳定性而言就不像 JK 这样久经考验,毕竟
Apache 2.2.3 推出的时间并不长,采用这种连接方式的网站还不多,因此,如果是应用于关键的互联网网站,还是建议采用 JK
的连接方式。
Tomcat配置多虚拟主机:
Tomcat配置多虚拟主机:
第一步:修改%Tomcat_Home%\conf\server.xml:
添加一组Host元素,
<Host name="test" debug="0" appBase="D:\Proj\test"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Context path="" docBase="." debug="0" privileged="true" reloadable="true"/>
</Host>
第二步:修改文件%windir%\system32\drivers\etc\hosts,在文件中找到
127.0.0.1 localhost
新启一行,添加:
127.0.0.1 test
保存,重启Tomcat即可.
注意:第二步的文件要找对,win2k是Winnt目录下,winxp是在Windows目录下.
若未修改Tomcat的端口,现在启动Tomcat,在ie的地址栏输入
http://test:8080
即可看到你配置的新应用了.与此同时,还可以输入
http://localhost:8080
Linux下Apache与Tomcat整合的简单方法
Linux下Apache与Tomcat整合的简单方法
2009-07-23 09:42
1、准备,下载需要的文件。这里假定你已经正确安装配置好了JDK。 httpd-2.2.0.tar.gz 其中httpd和jakarta-tomcat-connectors为源码包,apache-tomcat为二进制包。 2、安装Apache。 # tar xzvf httpd-2.2.0.tar.gz # cd httpd-2.2.0 # ./configure --prefix=/usr/local/apache2 --enable-so # make # make install 3、安装Tomcat。 # cp apache-tomcat-5.5.12.tar.gz /usr/local/ # cd /usr/local # tar xzvf apache-tomcat-5.5.12.tar.gz # ln -s apache-tomcat-5.5.12 tomcat 4、编译生成mod_jk。 # tar xzvf jakarta-tomcat-connectors-1.2.15-src.tar.gz # cd jakarta-tomcat-connectors-1.2.15-src/jk/native # ./configure --with-apxs=/usr/local/apache2/bin/apxs # make # cp ./apache-2.0/mod_jk.so /usr/local/apache2/modules/ 5、配置。 在/usr/local/apache2/conf/下面建立两个配置文件mod_jk.conf和workers.properties。 # vi mod_jk.conf 添加以下内容: # 指出mod_jk模块工作所需要的工作文件workers.properties的位置 JkWorkersFile /usr/local/apache2/conf/workers.properties # Where to put jk logs JkLogFile /usr/local/apache2/logs/mod_jk.log # Set the jk log level [debug/error/info] JkLogLevel info # Select the log format JkLogStampFormat "[%a %b %d %H:%M:%S %Y]" # JkOptions indicate to send SSL KEY SIZE, JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories # JkRequestLogFormat set the request format JkRequestLogFormat "%w %V %T" # 将所有servlet 和jsp请求通过ajp13的协议送给Tomcat,让Tomcat来处理 JkMount /servlet/* worker1 JkMount /*.jsp worker1 # vi workers.properties 添加以下内容: # Defining a worker named worker1 and of type ajp13 worker.list=worker1 # Set properties for worker1 worker.worker1.type=ajp13 worker.worker1.host=localhost worker.worker1.port=8009 worker.worker1.lbfactor=50 worker.worker1.cachesize=10 worker.worker1.cache_timeout=600 worker.worker1.socket_keepalive=1 worker.worker1.socket_timeout=300
增加关于加载mod_jk的语句: LoadModule jk_module modules/mod_jk.so Include /usr/local/apache2/conf/mod_jk.conf 最后编辑Tomcat的配置文件server.xml,在HOST段中加入: <Context path="" docBase="/var/wwwroot" debug="0" reloadable="true" crossContext="true"/> 在/var/wwwroot下建立一个index.jsp,启动Apache和Tomcat,用浏览器访问http://localhost/,应该可以看到正确的页面了。 |
解压版本的tomcat服务安装
以下适合各个版本的tomcat(注意启动时8080端口要确保未被占用)
今天搭一个Tomcat服务器,为了方便决定将解压版(非windows的安装方式)的tomcat添加为一个windows服务。
环境:
JDK 1.5.0_06
Tomcat-5.5.20
Windows2003
瑞星防火墙
步骤:
1.把JDK解压放到C:\jdk1.5.0_06下,把Tomcat解压放到C:\Tomcat-5.5.20-WEB下
2.添加系统环境变量:
JAVA_HOME=C:\jdk1.5.0_06
CLASSPATH=.;%JAVA_HOME%\LIB
TOMCAT_HOME=C:\Tomcat-5.5.20-WEB
修改系统环境变量PATH,在它的最前面加入:
%JAVA_HOME%\BIN;
注:放在最前面是预防有其它的JDK或JRE路径占先,如你装了Oracle就会有一个低版本的JRE。
3.在"开始"菜单运行CMD进入DOS窗口,执行cd c:\Tomcat-5.5.20-WEB\bin命令进入执行文件的目录。执行如下命令(是从DOS直接COPY出来的,含提示信息):
C:\Tomcat-5.5.20-WEB\bin>service install tomcat
Installing the service 'tomcat' ...
Using CATALINA_HOME: C:\Tomcat-5.5.20-WEB
Using CATALINA_BASE: C:\Tomcat-5.5.20-WEB
Using JAVA_HOME: C:\jdk1.5.0_06
Using JVM: C:\jdk1.5.0_06\jre\bin\server\jvm.dll
The service 'tomcat' has been installed.
C:\Tomcat-5.5.20-WEB\bin>net start tomcat
Apache Tomcat tomcat 服务正在启动 ..
Apache Tomcat tomcat 服务已经启动成功。
4.这时你可以打开IE,放问http://localhost:8080测试了(注意你自己指的端口)。
注:为什么我在环境那声明瑞星防火墙,是因为防火运行时老装不成功,退出防火墙后才可以.重启防火墙后它才会问你是否允许Tomcat运行并打开端口,所以大家注意了.
同时启动多个Tomcat服务器的配置
修改server.xml中的端口为空闲端口:
(1) 修改http访问端口(默认为8080端口)
<
Connector
className
="org.apache.coyote.tomcat4.CoyoteConnector"
port
="8080"
minProcessors
="5"
maxProcessors
="75"
enableLookups
="true"
redirectPort
="8443"
acceptCount
="100"
debug
="0"
connectionTimeout
="20000"
useURIValidationHack
="false"
disableUploadTimeout
="true"
/>
(2) 修改Shutdown端口(默认为8005端口)
<Server port="8005" shutdown="SHUTDOWN" debug="0">
(3) 修改JVM启动端口(默认为8009端口)
< Connector className ="org.apache.coyote.tomcat4.CoyoteConnector"
port ="8009" minProcessors ="5" maxProcessors ="75"
enableLookups ="true" redirectPort ="8443"
acceptCount ="10" debug ="0" connectionTimeout ="20000"
useURIValidationHack ="false"
protocolHandlerClassName ="org.apache.jk.server.JkCoyoteHandler" />
修改catalina.bat中的dt_socket端口:
可以在启动tomcat查看当前的端口,第一句信息就是:
Listening for transport dt_socket at address: 2005
把tomcat服务器java最大内存使用量调整为
把tomcat服务器java最大内存使用量调整为512m,有如下两种方式:
【1】设置环境变量
[root@WWW root]# vi .bash_profile
添加 export JAVA_OPTS="-mx512m -ms128m ",重启tomcat
【2】编辑catalina.sh文件
在 tomcat_home/bin/catalina.sh 这个文件里
找到下面:
# ----- Execute The Requested Command -----------------------------------------
echo "Using CATALINA_BASE: $CATALINA_BASE"
echo "Using CATALINA_HOME: $CATALINA_HOME"
echo "Using CATALINA_TMPDIR: $CATALINA_TMPDIR"
echo "Using JAVA_HOME: $JAVA_HOME"
然后增加一行..
# ----- Execute The Requested Command -----------------------------------------
JAVA_OPTS="-server -Xmx512m -Xms128m -Djava.awt.headless=true "
echo "Using CATALINA_BASE: $CATALINA_BASE"
echo "Using CATALINA_HOME: $CATALINA_HOME"
echo "Using CATALINA_TMPDIR: $CATALINA_TMPDIR"
echo "Using JAVA_HOME: $JAVA_HOME"
最后重启tomcat
如何配置Tomcat的JVM虚拟机内存大小
Tomcat本身不能直接在电脑上运行,需要依赖于硬件基础之上的操作系统和一个java虚拟机。您能够选择自己的需要选择不同的操作系统和对应的JDK的版本(只要是符合Sun发布的Java规范的),但我们推荐您使用Sun公司发布的JDK。确保您所使用的版本是最新的,因为Sun公司和其他一些公司一直在为提高性能而对java虚拟机做一些升级改进。一些报告显示JDK1.4在性能上比JDK1.3提高了将近10%到20%。
能够给Java虚拟机配置使用的内存,但是假如您的选择不对的话,虚拟机不会补偿。可通过命令行的方式改变虚拟机使用内存的大小。如下表所示有两个参数用来配置虚拟机使用内存的大小。
参数
描述
-Xms
JVM初始化堆的大小
-Xmx
JVM堆的最大值
这两个值的大小一般根据需要进行配置。初始化堆的大小执行了虚拟机在启动时向系统申请的内存的大小。一般而言,这个参数不重要。但是有的应用程式在大负载的情况下会急剧地占用更多的内存,此时这个参数就是显得很重要,假如虚拟机启动时配置使用的内存比较小而在这种情况下有许多对象进行初始化,虚拟机就必须重复地增加内存来满足使用。由于这种原因,我们一般把-Xms和-Xmx设为相同大,而堆的最大值受限于系统使用的物理内存。一般使用数据量较大的应用程式会使用持久对象,内存使用有可能迅速地增长。当应用程式需要的内存超出堆的最大值时虚拟机就会提示内存溢出,并且导致应用服务崩溃。因此一般建议堆的最大值配置为可用内存的最大值的80%。
Tomcat默认能够使用的内存为128MB,在较大型的应用项目中,这点内存是不够的,需要调大。
Windows下,在文档/bin/catalina.bat,Unix下,在文档/bin/catalina.sh的前面,增加如下配置:
JAVA_OPTS='-Xms【初始化内存大小】 -Xmx【能够使用的最大内存】'
需要把这个两个参数值调大。例如:
JAVA_OPTS='-Xms256m -Xmx512m'
表示初始化内存为256MB,能够使用的最大内存为512MB。
另外需要考虑的是Java提供的垃圾回收机制。虚拟机的堆大小决定了虚拟机花费在收集垃圾上的时间和频度。收集垃圾能够接受的速度和应用有关,应该通过分析实际的垃圾收集的时间和频率来调整。假如堆的大小很大,那么完全垃圾收集就会很慢,但是频度会降低。假如您把堆的大小和内存的需要一致,完全收集就很快,但是会更加频繁。调整堆大小的的目的是最小化垃圾收集的时间,以在特定的时间内最大化处理客户的请求。在基准测试的时候,为确保最好的性能,要把堆的大小设大,确保垃圾收集不在整个基准测试的过程中出现。
假如系统花费很多的时间收集垃圾,请减小堆大小。一次完全的垃圾收集应该不超过 3-5 秒。假如垃圾收集成为瓶颈,那么需要指定代的大小,检查垃圾收集的周详输出,研究 垃圾收集参数对性能的影响。一般说来,您应该使用物理内存的 80% 作为堆大小。当增加处理器时,记得增加内存,因为分配能够并行进行,而垃圾收集不是并行的。
Tomcat 5常用优化和配置
1、JDK内存优化:
Tomcat默认能够使用的内存为128MB,Windows下,在文档{tomcat_home}/bin/catalina.bat,Unix下,在文档{tomcat_home}/bin/catalina.sh的前面,增加如下配置:
JAVA_OPTS='-Xms[初始化内存大小] -Xmx[能够使用的最大内存]
一般说来,您应该使用物理内存的 80% 作为堆大小。
2、连接器优化:
在tomcat配置文档server.xml中的配置中,和连接数相关的参数有:
maxThreads:
Tomcat使用线程来处理接收的每个请求。这个值表示Tomcat可创建的最大的线程数。默认值200。
acceptCount:
指定当任何能够使用的处理请求的线程数都被使用时,能够放到处理队列中的请求数,超过这个数的请求将不予处理。默认值10。
minSpareThreads:
Tomcat初始化时创建的线程数。默认值4。
maxSpareThreads:
一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。默认值50。
enableLookups:
是否反查域名,默认值为true。为了提高处理能力,应配置为false
connnectionTimeout:
网络连接超时,默认值60000,单位:毫秒。配置为0表示永不超时,这样配置有隐患的。通常可配置为30000毫秒。
maxKeepAliveRequests:
保持请求数量,默认值100。
bufferSize:
输入流缓冲大小,默认值2048 bytes。
compression:
压缩传输,取值on/off/force,默认值off。
其中和最大连接数相关的参数为maxThreads和acceptCount。假如要加大并发连接数,应同时加大这两个参数。web server允许的最大连接数还受制于操作系统的内核参数配置,通常Windows是2000个左右,Linux是1000个左右。
3、tomcat中如何禁止和允许列目录下的文档
在{tomcat_home}/conf/web.xml中,把listings参数配置成false即可,如下:
<servlet>
...
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
...
</servlet>
4、tomcat中如何禁止和允许主机或IP地址访问
<Host name="localhost" ...>
...
<Valve className="org.apache.catalina.valves.RemoteHostValve"
allow="*.mycompany.com,www.yourcompany.com"/>
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
deny="192.168.1.*"/>
...
</Host>
这是我们服务器的配置,具体文档不能给您,因为涉及到公司机密,所以那一行我给您,我拷贝下来了
JAVA_OPTS='-server -Xms512m -Xmx768m -XX:NewSize=128m -XX:MaxNewSize=192m -XX:SurvivorRatio=8'
Linux下配置Tomcat
1.JDK安装。
1.1
从sun公司网站下载你所需要的JDK版本,现在sun公司主推最新版jdk,下载时选择previous Release可以下载以前的版本。
根据linux服务器硬件的不同选择不同版本的jdk,安腾服务器有单独的版本。下载后文件
linux下bin文件chmod a+x授权后变成可执行文件,即可在Terminal命令模式下执行.
1.2
root用户执行:[root@server1 Desktop]# ./j2sdk-1_4_2_15-linux-i586.bin
1.3
安装完成后root用户设置环境变量(linux下环境变量的分隔符是:冒号,windows系统是;分号)
vi /etc/profile 编辑此文件,增加下面三行
export JAVA_HOME=/opt/j2sdk1.4.2
export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
2.Tomcat安装
2.1
下载相应的linux系统下的版本
2.2
解压:[root@server1]tar -zxvf jakarta-tomcat-5.0.30.tar.gz
解压后目录名称很长,可以修改为Tomcat5
2.3 root用户tomcat设置环境变量
vi /etc/profile 编辑此文件,增加下面一行
export TOMCAT_HOME=/opt/Tomcat5
2.4 增加admin用户
编辑 $Tomcat_home/conf/tomcat-user.xml
增加 <user username="admin" password="admin" roles="admin,manager"/>
3.重启服务器后(环境变量会起作用),启动tomcat
3.1 查看环境变量是否起作用
echo $TOMCAT_HOME 此命令的是输出环境变量$TOMCAT_HOME的值:
/opt/Tomcat5
(同样可以看$CLASSPATH,$PATH,$JAVA_HOME)
3.2 修改TOMCAT目录的拥有者:
chown -R db2inst1 Tomcat5
3.3 启动tomcat(以db2inst1用户启动)
$Tomcat_home/bin/startup.sh
启动后,网页测试,在浏览器中输入http://ip:8080。看能否显示tomcat界面,用admin用户登录试试。
4. Tomcat配置
4.1设置Tomcat虚拟内存
$TOMCAT_HOME/bin/catalina.sh的前面,增加如下设置:
JAVA_OPTS='-Xms【初始化内存大小】 -Xmx【可以使用的最大内存】'
需要把这个两个参数值调大。例如:
JAVA_OPTS='-Xms256m -Xmx512m'
表示初始化内存为256MB,可以使用的最大内存为512MB。
iereport开发的报表乱码,增加如下设置
CATALINA_OPTS='-Djava.awt.headless=true'
4.2 修改server.xml设置TOMCAT字体及端口 .增加URIEncoding="GBK",port是访问端口
<Connector
port="8080" URIEncoding="GBK" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
debug="0" connectionTimeout="20000"
disableUploadTimeout="true" />
5.让Tomcat开机自动启动
创建tomcat.sh文件
vi tomcat.sh
内容为:
date
su - db2inst1 -c $TOMCAT_HOME/bin/startup.sh
##这里是切换用户执行tomcat启动。如果使用db2数据库的兄弟会理解这一点。
修改tomcat.sh的可操作权限
chmod a+x tomcat.sh
在同一目录下(我这里的目录是/opt)新建日志文件
touch tomcat.log
修改tomcat.log的可写权限
chmod a+w tomcat.log
在 /etc/rc.d/rc.local 增加如下内容:
export JAVA_HOME=/opt/j2sdk1.4.2_14
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export TOMCAT_HOME=/opt/Tomcat
export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
(这四个环境变量与上边一直)
/opt/tomcat.sh >> /opt/tomcat.log
注意:还有一种把tomcat作为linux服务启动一种方式。
6.Tomcat应用JSP网页乱码问题
尽量linux系统字体与JSP网页设定字体一致。如果如果JSP系统是GBK
所以vi /etc/sysconfig/i18n,内容(linux下环境变量的分隔符是冒号):
LANG="zh_CN.GBK"
SUPPORTED="zh_CN.UTF-8:zh_CN:zh:zh_CN.gbk:en_US.UTF-8:en_US:en:zh_CN.gb2312:zh_CN.GBK"
SYSFONT="latarcyrheb-sun16"
转]tomcat的server.xml文件详解
5L"p(W7}6c;t PR0 tomcat中的server.xml元素详解
7bKX b G-N0 元素名 属性 解释
server port 指定一个端口,这个端口负责监听关闭tomcat的请求
shutdown 指定向端口发送的命令字符串
service name 指定service的名字
Connector(表示客户端和service之间的连接) port 指定服务器端要创建的端口号,并在这个端口监听来自客户端的请求
minProcessors 服务器启动时创建的处理请求的线程数
maxProcessors 最大可以创建的处理请求的线程数
enableLookups 如果为true,则可以通过调用request.getRemoteHost()进行DNS查询来得到远程客户端的实际主机名,若为false则不进行DNS查询,而是返回其ip地址
redirectPort 指定服务器正在处理http请求时收到了一个SSL传输请求后重定向的端口号
acceptCount 指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理
connectionTimeout 指定超时的时间数(以毫秒为单位)
Engine(表示指定service中的请求处理机,接收和处理来自Connector的请求) defaultHost 指定缺省的处理请求的主机名,它至少与其中的一个host元素的name属性值是一样的
Context(表示一个web应用程序,通常为WAR文件,关于WAR的具体信息见servlet规范) docBase 应用程序的路径或者是WAR文件存放的路径
path 表示此web应用程序的url的前缀,这样请求的url为http://localhost:8080/path/****
reloadable 这个属性非常重要,如果为true,则tomcat会自动检测应用程序的/WEB-INF/lib 和/WEB-INF/classes目录的变化,自动装载新的应用程序,我们可以在不重起tomcat的情况下改变应用程序
host(表示一个虚拟主机) name 指定主机名
appBase 应用程序基本目录,即存放应用程序的目录
unpackWARs 如果为true,则tomcat会自动将WAR文件解压,否则不解压,直接从WAR文件中运行应用程序
Logger(表示日志,调试和错误信息) className 指定logger使用的类名,此类必须实现org.apache.catalina.Logger 接口
prefix 指定log文件的前缀
suffix 指定log文件的后缀
timestamp 如果为true,则log文件名中要加入时间,如下例:localhost_log.2001-10-04.txt
Realm(表示存放用户名,密码及role的数据库) className 指定Realm使用的类名,此类必须实现org.apache.catalina.Realm接口
Valve(功能与Logger差不多,其prefix和suffix属性解释和Logger 中的一样) className 指定Valve使用的类名,如用org.apache.catalina.valves.AccessLogValve类可以记录应用程序的访问信息
directory 指定log文件存放的位置
pattern 有两个值,common方式记录远程主机名或ip地址,用户名,日期,第一行请求的字符串,HTTP响应代码,发送的字节数。combined方式比common方式记录的值更多
*ay'x.r.e)F gu0
tomcat中的server.xml元素详解
元素名
属性
解释
server
port
指定一个端口,这个端口负责监听关闭tomcat的请求
shutdown
指定向端口发送的命令字符串
service
name
指定service的名字
Connector(表示客户端和service之间的连接)
port
指定服务器端要创建的端口号,并在这个端口监听来自客户端的请求
minProcessors
服务器启动时创建的处理请求的线程数
maxProcessors
最大可以创建的处理请求的线程数
enableLookups
如果为true,则可以通过调用request.getRemoteHost()进行DNS查询来得到远程客户端的实际主机名,若为false则不进行DNS查询,而是返回其ip地址
redirectPort
指定服务器正在处理http请求时收到了一个SSL传输请求后重定向的端口号
acceptCount
指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理
connectionTimeout
指定超时的时间数(以毫秒为单位)
Engine(表示指定service中的请求处理机,接收和处理来自Connector的请求)
defaultHost
指定缺省的处理请求的主机名,它至少与其中的一个host元素的name属性值是一样的
Context(表示一个web应用程序,通常为WAR文件,关于WAR的具体信息见servlet规范)
docBase
应用程序的路径或者是WAR文件存放的路径
path
表示此web应用程序的url的前缀,这样请求的url为http://localhost:8080/path/****
reloadable
这个属性非常重要,如果为true,则tomcat会自动检测应用程序的/WEB-INF/lib 和/WEB-INF/classes目录的变化,自动装载新的应用程序,我们可以在不重起tomcat的情况下改变应用程序
host(表示一个虚拟主机)
name
指定主机名
appBase
应用程序基本目录,即存放应用程序的目录
unpackWARs
如果为true,则tomcat会自动将WAR文件解压,否则不解压,直接从WAR文件中运行应用程序
Logger(表示日志,调试和错误信息)
className
指定logger使用的类名,此类必须实现org.apache.catalina.Logger 接口
prefix
指定log文件的前缀
suffix
指定log文件的后缀
timestamp
如果为true,则log文件名中要加入时间,如下例:localhost_log.2001-10-04.txt
Realm(表示存放用户名,密码及role的数据库)
className
指定Realm使用的类名,此类必须实现org.apache.catalina.Realm接口
Valve(功能与Logger差不多,其prefix和suffix属性解释和Logger 中的一样)
className
指定Valve使用的类名,如用org.apache.catalina.valves.AccessLogValve类可以记录应用程序的访问信息
directory
指定log文件存放的位置
pattern
有两个值,common方式记录远程主机名或ip地址,用户名,日期,第一行请求的字符串,HTTP响应代码,发送的字节数。combined方式比common方式记录的值更多
元素
它代表整个容器,是Tomcat实例的顶层元素.由org.apache.catalina.Server接口来定义.它包含一个元素.并且它不能做为任何元素的子元素.
1>className指定实现org.apache.catalina.Server接口的类.默认值为org.apache.catalina.core.StandardServer
2>port指定Tomcat监听shutdown命令端口.终止服务器运行时,必须在Tomcat服务器所在的机器上发出shutdown命令.该属性是必须的.
3>shutdown指定终止Tomcat服务器运行时,发给Tomcat服务器的shutdown监听端口的字符串.该属性必须设置
元素
该元素由org.apache.catalina.Service接口定义,它包含一个元素,以及一个或多个,这些Connector元素共享用同一个Engine元素
第一个处理所有直接由Tomcat服务器接收的web客户请求.
第二个处理所有由Apahce服务器转发过来的Web客户请求
1>className 指定实现org.apahce.catalina.Service接口的类.默认为org.apahce.catalina.core.StandardService
2>name定义Service的名字
元素
每个Service元素只能有一个Engine元素.元素处理在同一个中所有元素接收到的客户请求.由org.apahce.catalina.Engine接口定义.
1>className指定实现Engine接口的类,默认值为StandardEngine
2>defaultHost指定处理客户的默认主机名,在中的子元素中必须定义这一主机
3>name定义Engine的名字
在可以包含如下元素, , ,
元素
它由Host接口定义.一个Engine元素可以包含多个元素.每个的元素定义了一个虚拟主机.它包含了一个或多个Web应用.
1>className指定实现Host接口的类.默认值为StandardHost
2>appBase指定虚拟主机的目录,可以指定绝对目录,也可以指定相对于的相对目录.如果没有此项,默认为/webapps
3>autoDeploy如果此项设为true,表示Tomcat服务处于运行状态时,能够监测appBase下的文件,如果有新有web应用加入进来,会自运发布这个WEB应用
4>unpackWARs如果此项设置为true,表示把WEB应用的WAR文件先展开为开放目录结构后再运行.如果设为false将直接运行为WAR文件
5>alias指定主机别名,可以指定多个别名
6>deployOnStartup如果此项设为true,表示Tomcat服务器启动时会自动发布appBase目录下所有的Web应用.如果Web应用中的server.xml没有相应的元素,将采用Tomcat默认的Context
7>name定义虚拟主机的名字
在元素中可以包含如下子元素
, , ,
元素
它由Context接口