Tomcat学习总结

Tomcat学习总结

本篇主要介绍tomcat服务器的详细配置,请求处理流程,以及简单的优化方法:

  • tomcat详细配置
  • 请求处理流程
  • 简单的优化方法

tomcat详细配置

server.xml的基本结构
<?xml version="1.0" encoding="UTF-8"?>
<Server>
    <Listener />
    <GlobaNamingResources />
    <Service>
        <Connector />
        <Engine>
            <Logger />
            <Realm />
               <host>
                   <Logger />
                   <Context />
               </host>
        </Engine>
    </Service>
</Server>
元素属性说明
serverport指定负责监听tomcat关闭请求的端口
shutdown指定向端口发送的命令字符串
servicename指定service的名字
Connector(客户端与service之间的连接)port用于监听客户端的端口号
minProcessors服务器启动时创建的用于处理请求的线程数
maxProcessors最大可以创建的处理请求的线程数
redirectPort指定服务器正在处理http请求时收到一个SSL传输请求后重定向的端口号
acceptCount当所有处理请求的线程都被使用时,可以放到处理队列中的请求数,超过这个数的请求不予处理
connectionTimeout指定连接超时
Engine(service中的请求处理机,接收和处理来自Connector的请求)defaultHost缺省的处理请求的虚拟主机名,必须与其中一个host元素的name属性值一样。
Context(表示一个web应用,通常为WAR文件)docBase应用程序的路径或者WAR文件存放路径
path此应用程序的url前缀
reloadable是否自动检测WEB-INF/lib和WEB-INF/classes目录的变化,自动装载新的应用程序
host(表示一个虚拟主机)name虚拟主机名
appBase应用程序的基本目录,一般为webapps
unpackWARS如果为true,则tomcat自动解压WAR文件,否则不解压,直接从WAR文件中运行
Logger(日志、调试和错误)className指定logger使用类名,该类必须实现org.apache.catalina.Logger接口
prefix指定log文件的前缀
suffix指定log文件的后缀
timestamp文件名是否加入时间,如:localhost_log.001-10-04.txt
Realm(存放用户名,密码及role的数据库)className指定类名,必须实现org.apache.catalina.Realm接口
Value(功能和Logger差不多)className指定Valve使用的类名,如用org.apache.catalina.valves.AccessLogValve类可以记录应用程序的访问信息
directorylog文件的存放目录
pattern有两个值,common方式记录远程主机名或ip地址,用户名,日期,第一行请求的字符串,HTTP响应代码,发送的字节数。combined方式比common方式记录的值更多

配置示例
<Connector 
    port="8080" 
    minSpareThreads="5" 
    maxSpareThread="75" 
    enableLookups="false" 
    redirectPort="8443"  
    acceptCount="100" 
    debug="0" 
    connectionTimeout="20000"
    disableUploadTimeout="true" />

建立一个连接器用于监听8080端口,初始创建minSpareThreads(5)个线程等待客户请求,每个请求由一个线程负责。设定服务器可以同时响应的客户请求的最大数目为maxSpareThread(75),当现有线程已经达到最大值maxSpareThread(75)时,用户请求被排队等待处理,当队列中请求数量超过acceptCount(100)时,请求将不予处理。当用户请求的是https时,该请求被转发到端口8443。将enableLookups设置为false可以禁用DNS查询,web应用中调用request.getRemoteHost方法将返回客户IP。connectionTimeout定义建立连接超时。


请求处理流程

举例说明Tomcat处理客户请求的流程:
假设来自客户的请求为 http://localhost:8080/test/index.jsp

  1. 侦听8080端口的Http/1.1 Connector获得该请求。
  2. Connector将请求交给Engine,并等待Engine回应。
  3. Engine将请求与其所拥有的所有虚拟主机匹配
  4. Engine匹配到localhost对应的虚拟主机host(匹配不到交给默认host)
  5. host获取请求/test/index.jsp匹配其所有的Context
  6. host匹配到/test的Context(匹配不到交给path为”“的Context处理)
  7. Context匹配到对应的Servlet,构造HttpServletRequest和HttpServletResponse对象,作为JspServlet的doGet和doPost方法的参数传入。
  8. Context将执行后的HttpServletResponse对象返回host
  9. host将HttpServletResponse对象返回Engine
  10. Engine将HttpServletResponse对象返回Connector
  11. Connector将HttpServletResponse对象返回客户端

简单的优化方法

1. 扩大JVM内存
在catalina.bat中适当位置加入 set JAVA_OPTS=-Xms256M -Xmx512M
-Xms 初始化JVM内存, -Xmx最大内存(设置过小会导致内存溢出)

2. 增加处理线程
在server.xml中配置Connector属性,增加minSpareThreads,maxSpareThreads,acceptCount,maxThreads,maxProcessors,minProcessors等来合理配置服务器用于处理请求的线程数量。
3. 关闭DNS查询
在server.xml中配置Connector属性,增加enableLookups=”false”,可禁用DNS查询。
4. 启用gzip压缩
在server.xml中配置Connector属性,增加
compression=”on”
compressionMinSize=”2048”
compressableMimeType=”text/html,text/xml,text/javascript,text/css,text/plain”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值