Tomcat使用总结

来源:互联网 发布:js 键值对动态赋值 编辑:程序博客网 时间:2024/06/17 11:59

一.目录结构


   以Tomcat7为例进行说明:


   1.bin:该目录下存放的是二进制可执行文件,如果是安装版,那么这个目录下会有两个exe文件:tomcat7.exe、tomcat7w.exe,前者是在控制台下启动Tomcat,后者是弹出UGI窗口启动Tomcat;如果是解压版,那么会有startup.batshutdown.bat文件,startup.bat用来启动Tomcat,但需要先配置JAVA_HOME环境变量才能启动,shutdawn.bat用来停止Tomcat


   2、conf这是一个非常非常重要的目录,这个目录下有四个最为重要的文件:

    • server.xml配置整个服务器信息。例如修改端口号,添加虚拟主机等
    • tomcatusers.xml:存储tomcat用户的文件,这里保存的是tomcat的用户名及密码,以及用户的角色信息。可以按着该文件中的注释信息添加tomcat用户,然后就可以在Tomcat主页中进入Tomcat Manager页面了;
    • web.xml:部署描述符文件,这个文件中注册了很多MIME类型,即文档类型。这些MIME类型是客户端与服务器之间说明文档类型的,如用户请求一个html网页,那么服务器还会告诉客户端浏览器响应的文档是text/html类型的,这就是一个MIME类型。客户端浏览器通过这个MIME类型就知道如何处理它了。当然是在浏览器中显示这个html文件了。但如果服务器响应的是一个exe文件,那么浏览器就不可能显示它,而是应该弹出下载窗口才对。MIME就是用来说明文档的内容是什么类型的!
  • context.xml:对所有应用的统一配置,通常我们不会去配置它

    3、libTomcat的类库,里面是一大堆jar文件。如果需要添加Tomcat依赖的jar文件,可以把它放到这个目录中,当然也可以把应用依赖的jar文件放到这个目录中,这个目录中的jar所有项目都可以共享之,但这样你的应用放到其他Tomcat下时就不能再共享这个目录下的Jar包了,所以建议只把Tomcat需要的Jar包放到这个目录下;

    4、logs这个目录中都是日志文件,记录了Tomcat启动和关闭的信息,如果启动Tomcat时有错误,那么异常也 会记录在日志文件中。

    5、temp存放Tomcat的临时文件,这个目录下的东西可以在停止Tomcat后删除!

    6、webapps存放web项目的目录,其中每个文件夹都是一个项目;如果这个目录下已经存在了目录,那么都是tomcat自带的。项目。其中ROOT是一个特殊的项目,在地址栏中没有给出项目目录时,对应的就是ROOT项目。http://localhost:8080/examples,进入示例项目。其中examples就是项目名,即文件夹的名字。

    7、work运行时生成的文件,最终运行的文件都在这里。通过webapps中的项目生成的!可以把这个目录下的内容删除,再次运行时会生再次生成work目录。当客户端用户访问一个JSP文件时,Tomcat会通过JSP生成Java文件,然后再编译Java文件生成class文件,生成的javaclass文件都会存放到这个目录下。

    8、LICENSE许可证。

    9、NOTICE说明文件。

二、热部署

    如果是使用eclipse的话进行配置Tomcat的时候选择

  

   也可以直接修改在eclipse里面项目下面的一个server.xml文件,将 reloadable="true"即可

<Context docBase="C:\Program Files\Java\apache-tomcat-7.0.67\wtpwebapps\jimp" path="/jimp" reloadable="true" source="org.eclipse.jst.jee.server:jimp"/>

  如果是idea的话选择

  


三、支持的协议


   同时支持http和https协议,AJP和自身带的JMX


四、Tomcat性能优化


    在项目完成后进行性能测试的时候,通过模拟一定数量的并发用户访问系统,发现速度较慢,除了提高代码质量,加缓存,把静态资源放到nginx上之外还进行了Tomcat的性能优化


    在Tomcat下面conf有一个server.xml文件,我的里面的默认配置是,运行模式为bio的:

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>

(1)修改运行模式

    Tomcat connector有三种运行模式,分别是bio,nio,apr。bio blocking I/O,阻塞式I/O操作,是默认的模式,性能最差,没有经过任何优化处理和支持;nio 非阻塞式,拥有比传统I/O操作更好的并发运行性能;Apr Apache Portable Runtime安装起来最困难,但是从操作系统级别来解决异步的IO问题,可以大幅度的提高性能(详细了解三种模式)。因此决定采用nio的模式,修改protocol

protocol="org.apache.coyote.http11.Http11NioProtocol"

(2)修改线程参数

    在tomcat配置文件server.xml中的<Connector />配置中,和连接数相关的参数有:


     maxThreads="150"     表示最多同时处理150个连接,Tomcat使用线程来处理接收的每个请求。这个值表示Tomcat可创建的最大的线程数。默认值200。

   
     minSpareThreads="25"     表示即使没有人使用也开这么多空线程等待,这里是25代表开25个线程,如果有人连接也不会临时再重新进行线程的一系列操作比较耗时,能够提高性能。 

 
     maxSpareThreads="75"     表示如果最多可以空75个线程,例如某时刻有80人访问,之后没有人访问了,则tomcat不会保留80个空线程,而是关闭5个空的。  (一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。默认值50。 

   
    acceptCount="100"   当同时连接的人数达到maxThreads时,还可以接收排队的连接数量,超过这个连接的则直接返回拒绝连接。(指定当任何能够使用的处理请求的线程数都被使用时,能够放到处理队列中的请求数,超过这个数的请求将不予处理。默认值100。 )


    其中和最大连接数相关的参数为maxThreads和acceptCount。如果要加大并发连接数,应同时加大这两个参数。


    web server允许的最大连接数还受制于操作系统的内核参数设置,通常Windows是2000个左右,Linux是1000个左右。因此对Tomcat的配置修改为:


maxThreads="800" acceptCount="800" minSpareThreads="100"

(3)JVM调优

    在TOMCAT_HOME/bin/catalina.sh 中增加如下语句,具体数值视情况而定,在cygwin=false这一行上方添加。

    -XmsJVM初始化堆内存大小
    -XmxJVM堆的最大内存
    -Xss 线程栈大小-XX:PermSizeJVM非堆区初始内存分配大小
    -XX:MaxPermSizeJVM非堆区最大内存
    -Xms和-Xmx选项设置为相同堆内存分配,以避免在每次GC 后调整堆的大小,堆内存建议占内存的60%~80%;非堆内存是不可回收内存,大小视项目而定;线程栈大小推荐1024k。

JAVA_OPTS="-Xms1024m -Xmx1024m -Xss1024K -XX:PermSize=64m -XX:MaxPermSize=128m"

(4)关闭DNS反向查询

    当web应用程序向要记录客户端的信息时,它也会记录客户端的IP地址或者通过域名服务器查找机器名转换为IP地址。DNS查询需要占用网络,并且包括可能从很多很远的服务器或者不起作用的服务器上去获取对应的IP的过程,这样会消耗一定的时间。为了消除DNS查询对性能的影响我们可以关闭DNS查询,所以在connector port="8080"中加入enableLookups=“false”

(5)启用Gzip压缩

    compression: off/on/force(不启用/启用压缩文本内容/强制压缩所有请求包含图片) 
    compressionMinSize: 2048 对小于该配置大小的文件不进行压缩(单位:B,即默认2K。该属性自Tomcat7有效 。) 
    noCompressionUserAgents: 指定不需要压缩的浏览器Agent,使用逗号间隔 
    compressableMimeType: “text/html,text/xml,text/plain”(这是默认值,指定需要压缩的请求文档类型)
compression="on"   compressionMinSize1="2048"   noCompressionUserAgents="gozilla, traviata"                compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"/>

五、乱码问题

    和上面的一样同样是修改Tomcat的server.xml文件,在connector中加入URIEncoding="UTF-8" 

六、连接超时时长

    在connector标签下面加入connnectionTimeout,默认值60000,单位:毫秒。配置为0表示永不超时,这样配置有隐患的。通常可配置为30000毫秒。