Tomcat学习

Tomcat之server.xml设置:

一、二级域名设置:

<Engine name="Catalina" defaultHost="www.XXXtech.com">

         …………

         <!-- 一级域名 -->

         <Host name="www.XXXtech.com" appBase="" unpackWARs="true" autoDeploy="true">                        

                   <Context path="" docBase="D:\\han" reloadable="true"/>

         </Host>

        

         <!-- 二级域名 -->

         <Host name="linf.XXXtech.com" appBase="webapps" unpackWARs="true" autoDeploy="true"

                            xmlValidation="false" xmlNamespaceAware="false">

                   <Alias>linf.XXXtech.com</Alias>

                   <Context path="" docBase="han1" reloadable="true"/>

         </Host>

                  

         <!-- 二级域名 -->

         <Host name="busfreight.XXXtech.com" appBase="D:\\busfreight_demo" unpackWARs="true" autoDeploy="true"

                            xmlValidation="false" xmlNamespaceAware="false">

                   <Alias>busfreight.XXXtech.com</Alias>

                   <Context path="" docBase="" reloadable="true"/>

         </Host>

</Engine>

备注:

<Host name="www.abc.com" appBase="F:/testMain" unpackWARs="true" autoDeploy="true" > 

<Context path="/testPath" docBase="F:/test" reloadable="true" /> 

</Host> 

其中appBase="F:/testMain"的意思是默认www.abc.com访问F:/testMain这个工程。

<Context>配置的意思就是在浏览器输入www.abc.com/testPath它就去访问F:/test这个工程。path就是加在www.abc.com后面的访问路径,而docBase应该用实际项目在本地磁盘的绝对路径。 

Tomcat服务器模型:

1、收到一个请求就处理,这个时候就不能处理新的请求,这种为阻塞,这个是单线程模型,无法并发,一个请求没处理完服务器就会阻塞,不会处理下一个请求。一般的服务器不会使用这种方式实现。

2、收到一个请求就新开一个线程去处理任务,主线程返回,继续处理下一个任务,这种为非阻塞。首先纠正一个错误,这并不是非阻塞,它也是阻塞的。相对第一个模型来说,它解决了主线程阻塞的问题,有了一定程度的并发量,但是在每个新开的线程中还是阻塞的。如果100个人同时访问,将会开100个线程,那1000个人,10000个人呢?频繁开关线程很消耗资源,这样实现的服务器性能依然不高。

3、类似2的模型,但是不是每次收到请求就开一个新的线程,而是使用线程池。线程池管理多线程,性能比频繁创建线程高得多。这种方式实现的服务器性能会比2高。不过,它依然是阻塞的。线程池的线程数量通常有限制的,如果所有线程都被阻塞(例如网速慢,或者被人恶意占用连接),那么接下来的请求将会排队等待。

4、基于Java NIO实现的服务器模型。上面说到的几种模型,都是基于BIO(阻塞IO)。而NIO则是非阻塞IO,它是基于IO多路复用技术(例如Reactor模式)实现,只需要一个线程或者少量线程,就可以处理大量请求。从性能上来说NIO实现的服务器并发性一般大于BIO,所以可以实现高性能的服务器。如果感兴趣,可以学习一些基于NIO的网络编程框架,例如Netty、MINA。

Tomcat运行可以选择BIO或者NIO模型,原理分别对应上面的34两种方式。Tomcat默认是BIO方式运行,如果想要换成NIO,可以配置server.xml

<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" .../>

从性能上考虑建议使用NIO

补充:目前tomcat支持BIO、NIO、APR模式,默认NIO模式,其中APR为高并发处理的首选。

对Tomcat的四种基于HTTP协议的Connector性能比较,具体内容如下:

<Connector port="8081" protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000" redirectPort="8443"/>
<Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"/>
<Connector executor="tomcatThreadPool" port="8081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
<Connector executor="tomcatThreadPool" port="8081" protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000" redirectPort="8443" />

我们姑且把上面四种Connector按照顺序命名为 NIO, HTTP, POOL, NIOP
为了不让其他因素影响测试结果,我们只对一个很简单的jsp页面进行测试,这个页面仅仅是输出一个Hello World。假设地址是 http://tomcat1/test.jsp。我们依次对四种Connector进行测试,测试的客户端在另外一台机器上用ab命令来完成,测试命令为: ab -c 900 -n 2000 http://tomcat1/test.jsp ,最终的测试结果如下表所示(单位:平均每秒处理的请求数):

NIO HTTP POOL NIOP
281 65 208 365
666 66 110 398
692 65 66 263
256 63 94 459
440 67 145 363

由这五组数据不难看出,HTTP的性能是很稳定,但是也是最差的,而这种方式就是Tomcat的默认配置。NIO方式波动很大,但没有低于280 的,NIOP是在NIO的基础上加入线程池,可能是程序处理更复杂了,因此性能不见得比NIO强;而POOL方式则波动很大,测试期间和HTTP方式一样,不时有停滞。
由于linux的内核默认限制了最大打开文件数目是1024,因此此次并发数控制在900。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值