Tomcat学习总结

来源:互联网 发布:dafa888信誉第一js 编辑:程序博客网 时间:2024/06/05 17:50

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>
元素 属性 说明 server port 指定负责监听tomcat关闭请求的端口 shutdown 指定向端口发送的命令字符串 service name 指定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类可以记录应用程序的访问信息 directory log文件的存放目录 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”

0 0