tomcat WEB应用部署及优化
一、部署环境
操作系统:Windows(XP/Win7/Server 2003/Server 2008)
JAVA运行环境:JDK 1.6(最新补丁包)
二、系统部署
1、JDK下载及安装
JDK 1.6下载地址:
http://download.oracle.com/otn/java/jdk/6u39-b04/jdk-6u39-windows-i586.exe
http://download.oracle.com/otn/java/jdk/6u39-b04/jdk-6u39-windows-x64.exe
2、Tomcat下载及安装
Tomcat7下载地址:http://tomcat.apache.org/download-70.cgi
在Windows环境中部署时可以下载32-bit/64-bit Windows Service Installer这个安装包,安装程序会自动添加Windows服务,并提供了两个程序用于配置和监控Tomcat,尤其对于一般用户而言通过图形界面启停Tomcat更易于操作。
3、 应用程序部署
Tomcat目录结构:
bin ----------- 可执行程序目录(Tomcat7w.exe)
conf ----------- 配置文件目录(server.xml, web.xml)
lib ----------- 存放Tomcat依赖的jar文件
logs ----------- 日志文件目录
temp ----------- 临时文件目录
webapps ----------- 应用部署目录,我们的应用程序就部署到该目录中
work ----------- 存放JSP编译后的class文件
在Eclipse环境中将项目导出成war文件,复制到webapps目录下即可。
Tomcat启动时会自动先解压war文件,解压出的目录名为war文件的文件名,然后读取目录中的文件来启动我们的应用程序。
如果需要修改应用程序的配置,可直接修改目录中的配置文件,或覆盖目录中的配置文件或class文件。
三、 系统优化
1、 JVM优化
调整JVM内存
JVM默认的内存配置不适用于生产环境,很容易出现内存溢出等错误,可以使用开始菜单中的Configure Tomcat程序进行优化。(在Win7系统中要以管理员身份运行Configure Tomcat)
2.png
该界面上可以设置初始内存大小和最大内存大小,其对应的JAVA选项分别为-Xms和-Xmx,也可以直接在Java Options输入框中直接输入参数。
优化参数及取值参考如下:
-XX:PermSize=128m
-XX:MaxPermSize=256m
-Xms1200m
-Xmx1200m
-Xss256k
JVM支持的最大内存大小受限于物理内存和操作系统,32位系统下限制在1.5G~2G,64位系统下无限制。
Configure Tomcat界面中修改后的参数存储在Windows注册表中:
3.png
调整JVM为server 版
JVM分为client和server两个版本,对于服务端的JAVA应用最好使用server版,可以使用开始菜单中的Configure Tomcat程序修改,默认的JVM是%JAVA_HOME%\jre\bin\client\jvm.dll,可修改为server版的jvm:
4.png
1、Tomcat优化
使用线程池
打开conf/server.xml,增加:
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="500" minSpareThreads="20" maxIdleTime="60000" />
最大线程500(一般服务器足以),最小空闲线程数20,线程最大空闲时间60秒。然后修改<Connector ...>节点,增加executor属性,如:
<Connector port="80" protocol="HTTP/1.1"
executor="tomcatThreadPool"
connectionTimeout="30000"
redirectPort="443" ....../>
² 调整Connector连接参数
<Connector port="80" protocol="HTTP/1.1"
executor="tomcatThreadPool"
maxHttpHeaderSize="8192"
enableLookups="false"
redirectPort="8443"
acceptCount="100"
connectionTimeout="30000"
disableUploadTimeout="true"
URIEncoding=”UTF-8” />
参数分析:
(1)、maxHttpHeaderSize=”8192”
此选项用于配置:来自于客户端请求的Request和Response的HTTP header的最大长度,以字节计算。如果不设置,该属性为4096(4K)。
(2)、maxThreads="500"
Connector创建的请求处理线程的最大值,它决定了能够同时处理并发请求的最大值。如果不指定,该属性值为200。Tomcat的线程数量太多会导致切换过多,性能下降严重。这个数量应该是你单个机器的承载能力,压力测试下得出的结果。不可任意加大。一般情况下,256-512个已经非常高的数值了。
(3)、minSpareThreads="20"
tomcat初始化时创建的线程数,即最小工作线程数目。
(4)、maxSpareThreads="100"
tomcat所允许的最大线程数,一旦创建的线程超过这个数,Tomcat就将关闭不 再需要的Socket线程。
(5)、enableLookups="false"
使用允许DNS查询,通常情况下设置为false。如果为true则tomcat会损耗一部分系统性能。
(6)、redirectPort="8443"
这里系统默认的,它指定转发端口,如果当前只支持non-SSL请求,在需要安全通信的场所,将把客户请求转发至SSL的redirectPort端口。
(7)、acceptCount=“100”
当所有请求处理线程都被占用时,允许接收请求队列的最大长度。当队列已满时, 任何收到的请求都将被拒绝。缺省值为10。
(8)、connectionTimeout="30000"
Connector接收连接后,等待提供请求URI的时间,缺省值为60000(60秒)。
(9)、disableUploadTimeout="true"
该标志位表明当执行servlet时,是否允许servlet容器使用一个不同的、更长的连接超时。启用该标志位将导致在上传数据时,要么使用更长的时间完成上传,要么出现更长的超时。如果不指定,该属性为“false”。
² 使用APR来增强Tomcat性能(可选)
Tomcat可以使用APR来提供超强的可伸缩性和性能,更好地集成本地服务器技术。APR(Apache Portable Runtime)是一个高可移植库,它是Apache HTTP Server 2.x的核心。APR有很多用途,包括访问高级IO功能(例如sendfile,epoll和open SSL),OS级别的功能(随机数生成、系统状态等等),本地进程管理(共享内存、NT管道和UNIX socket)。这些功能使和Tomcat作为一个通常的前台WEB服务器,能更好的和其它本地WEB技术集成,总体上让Java更有效率作为一个高性能Web服务器平台而不是简单作为后台容器。
下载Tomcat Native:
解压后将tcnative-1.dll文件复制到Tomcat安装目录的bin目录下即可。
² 使用带有NIO的HTTP1.1的超文件传输协议(可选)
Java的IO操作集中在java.io这个包中,是基于流阻塞API(即BIO,Block IO)。对于大多数应用来说,这样的API使用很方便,然而,一些对性能要求较高的应用,尤其是服务器端应用,往往需要一个更为有效的方式来处理IO。从JDK1.4起,NIO API作为一个基于缓冲区,并能提供非阻塞IO操作的API(即NIO,non-blocking IO)被引入。
BIO与NIO一个比较重要的不同,是我们使用BIO的时候往往会引入多线程,每个连接一个单独的线程;而NIO则是使用单线程或者只使用少量的多线程,每个连接共用一个线程。
而Tomcat7应用NIO只是用在处理发送、接收信息的时候用到,也就是说:tomcat7还是传统的多线程Servlet。因此即使我们的JAVA应用使用ThreadLocal的,例如JSF的FaceContext、Hibernate的session管理、Strusts的context的管理等等,也不会因为使用NIO而受到影响。
更改方法:
打开tomcat的配置文件conf/server.xml
找到:
<Connector port="8080" protocol="http1.1" .....
改为:
<Connector port="8080"
protocol="org.apache.coyote.http11.Http11NioProtocol"