天天看点

Tomcat热部署和虚拟目录配置

1.tomcat如何配置热部署

默认就是 

1

<code>&lt;</code><code>host</code> <code>appbase="webapps" autodeploy="true" name="localhost" unpackwars="true"&gt;</code>

如果要实现ide修改代码的自动部署,可以使用第三方工具

<a href="http://www.zeroturnaround.com/jrebel/" target="_blank">http://www.zeroturnaround.com/jrebel/</a>

1、解压缩包

2、执行java -jar jrebel-setup.jar

3、会弹出一个安装界面安装

4、在myeclipse中配置,找到服务器(如tomcat)的配置页面,在tomcat的jdk配置页面的optional java vm arguments输入框中加如下参数:

-noverify -javaagent:d:\dev\jrebel\jrebel.jar -drebel.dirs=d:\dev\apache-tomcat-6.0.20\webapps\nmr

第一个路径是jar包的绝对路径,第二个地址是说想让哪个目录下的类更改后不重启服务。

如果optional java vm arguments输入框中有其他参数,用空格隔开。

5、发布项目,就能在控制台看到效果。

类就可以改变之后不用重启tomcat。

目前流行的服务器都支持。详细看官方网站。

2.配置web项目的虚拟目录

配置之前,web项目文件夹里必须新建个文件夹:web-inf,此文件夹里必须有个web.xml的文件。这些都可以直接在tomcat/webapps/root/里复制过来,放到自己的web项目中即可。

如果不配置,则需将web项目的文件夹放在tomcat/webapps/下,访问路径为:http://localhost:8080/web项目文件夹名称

如果web项目放在其他盘符,则在tomcat目录/conf/文件夹下:编辑server.xml文档,

在文档的末尾处,添加:&lt;context path="/nala" docbase="e:\www\nala"&gt;&lt;/context&gt;,如图所示

Tomcat热部署和虚拟目录配置

3.tomcat 如何优化?

这里以tomcat7的参数配置为例,需要修改conf/server.xml文件,修改连接数,关闭客户端dns查询。

参数解释:

uriencoding=”utf-8″ :使得tomcat可以解析含有中文名的文件的url,真方便,不像apache里还有搞个mod_encoding,还要手工编译

maxsparethreads : 如果空闲状态的线程数多于设置的数目,则将这些线程中止,减少这个池中的线程总数。

minsparethreads : 最小备用线程数,tomcat启动时的初始化的线程数。

enablelookups : 这个功效和apache中的hostnamelookups一样,设为关闭。

connectiontimeout : connectiontimeout为网络连接超时时间毫秒数。

maxthreads : maxthreads tomcat使用线程来处理接收的每个请求。这个值表示tomcat可创建的最大的线程数,即最大并发数。

acceptcount : acceptcount是当线程数达到maxthreads后,后续请求会被放入一个等待队列,这个acceptcount是这个队列的大小,如果这个队列也满了,就直接refuse connection

maxprocessors与minprocessors : 在 java中线程是程序运行时的路径,是在一个程序中与其它控制线程无关的、能够独立运行的代码段。它们共享相同的地址空间。多线程帮助程序员写出cpu最 大利用率的高效程序,使空闲时间保持最低,从而接受更多的请求。

通常windows是1000个左右,linux是2000个左右。

useurivalidationhack:

我们来看一下tomcat中的一段源码:

【security】

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

<code>if</code> <code>(connector.getuseurivalidationhack()) {</code>

<code>string uri = validate(request.getrequesturi());</code>

<code>if</code> <code>(uri == </code><code>null</code><code>) {</code>

<code>res.setstatus(</code><code>400</code><code>);</code>

<code>res.setmessage(“invalid uri”);</code>

<code>throw</code> <code>new</code> <code>ioexception(“invalid uri”);</code>

<code>} </code><code>else</code> <code>{</code>

<code>req.requesturi().setstring(uri);</code>

<code>// redoing the uri decoding</code>

<code>req.decodeduri().duplicate(req.requesturi());</code>

<code>req.geturldecoder().convert(req.decodeduri(), </code><code>true</code><code>);</code>

<code>}</code>

  

可以看到如果把useurivalidationhack设成”false”,可以减少它对一些url的不必要的检查从而减省开销。

enablelookups=”false” : 为了消除dns查询对性能的影响我们可以关闭dns查询,方式是修改server.xml文件中的enablelookups参数值。

disableuploadtimeout :类似于apache中的keeyalive一样

给tomcat配置gzip压缩(http压缩)功能

<code>compression=”on” compressionminsize=”</code><code>2048</code><code>″</code>

<code>compressablemimetype=”text/html,text/xml,text/javascript,text/css,text/plain”</code>

http 压缩可以大大提高浏览网站的速度,它的原理是,在客户端请求网页后,从服务器端将网页文件压缩,再下载到客户端,由客户端的浏览器负责解压缩并浏览。相对于普通的浏览过程html,css,javascript , text ,它可以节省40%左右的流量。更为重要的是,它可以对动态生成的,包括cgi、php , jsp , asp , servlet,shtml等输出的网页也能进行压缩,压缩效率惊人。

1)compression=”on” 打开压缩功能

2)compressionminsize=”2048″ 启用压缩的输出内容大小,这里面默认为2kb

3)nocompressionuseragents=”gozilla, traviata” 对于以下的浏览器,不启用压缩

4)compressablemimetype=”text/html,text/xml” 压缩类型

最后不要忘了把8443端口的地方也加上同样的配置,因为如果我们走https协议的话,我们将会用到8443端口这个段的配置,对吧?

<code>&lt;!–enable tomcat ssl–&gt;</code>

<code>&lt;</code><code>connector</code> <code>port=”8443″ protocol=”http/1.1″</code>

<code>uriencoding=”utf-8″ minsparethreads=”25″ maxsparethreads=”75″</code>

<code>enablelookups=”false” disableuploadtimeout=”true” connectiontimeout=”20000″</code>

<code>acceptcount=”300″ maxthreads=”300″ maxprocessors=”1000″ minprocessors=”5″</code>

<code>useurivalidationhack=”false”</code>

<code>compression=”on” compressionminsize=”2048″</code>

<code>sslenabled=”true”</code>

<code>scheme=”https” secure=”true”</code>

<code>clientauth=”false” sslprotocol=”tls”</code>

<code>keystorefile=”d:/tomcat2/conf/shnlap93.jks” keystorepass=”aaaaaa”</code>

<code>/&gt;</code>

好了,所有的tomcat优化的地方都加上了。

tomcat默认可以使用的内存为128mb,windows下,在文件{tomcat_home}/bin/catalina.bat,unix下,在文件catalinahome/bin/catalina.sh的前面,增加如下设置:javaopts=”‘catalinahome/bin/catalina.sh的前面,增加如下设置:javaopts=”‘java_opts” -xms[初始化内存大小] -xmx[可以使用的最大内存] 

或 

设置环境变量:export java_opts=””javaopts”−xms[初始化内存大小]−xmx[可以使用的最大内存]”一般说来,你应该使用物理内存的80javaopts”−xms[初始化内存大小]−xmx[可以使用的最大内存]”一般说来,你应该使用物理内存的80java_opts” -xms700 —xmx700 

# source /etc/profile

【参数说明】

-xms 是指设定程序启动时占用内存大小。一般来讲,大点,程序会启动的 快一点,但是也可能会导致机器暂时间变慢。

-xmx 是指设定程序运行期间最大可占用的内存大小。如果程序运行需要占 用更多的内存,超出了这个设置值,就会抛出outofmemory 异常。

-xss 是指设定每个线程的堆栈大小。这个就要依据你的程序,看一个线程 大约需要占用多少内存,可能会有多少线程同时运行等。

-xx:permsize设置非堆内存初始值,默认是物理内存的1/64 。

-xx:maxpermsize设置最大非堆内存的大小,默认是物理内存的1/4。

tomcat的运行模式有3种.修改他们的运行模式.3种模式的运行是否成功,可以看他的启动控制台,或者启动日志.或者登录他们的默认页面http://localhost:8080/查看其中的服务器状态。

(1)bio

默认的模式,性能非常低下,没有经过任何优化处理和支持.

(2)nio

利用java的异步io护理技术,no blocking io技术.

想运行在该模式下,直接修改server.xml里的connector节点,修改protocol为

&lt;connector port=”80″ protocol=”org.apache.coyote.http11.http11nioprotocol” 

connectiontimeout=”20000″ 

uriencoding=”utf-8″ 

usebodyencodingforuri=”true” 

enablelookups=”false” 

redirectport=”8443″ /&gt;

启动后,就可以生效。

(3)apr

安装起来最困难,但是从操作系统级别来解决异步的io问题,大幅度的提高性能.

必须要安装apr和native,直接启动就支持apr。下面的修改纯属多余,仅供大家扩充知识,但仍然需要安装apr和native