您的位置:首页 > 运维架构 > Tomcat

Tomcat学习总结

2015-11-10 11:45 567 查看

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

侦听8080端口的Http/1.1 Connector获得该请求。

Connector将请求交给Engine,并等待Engine回应。

Engine将请求与其所拥有的所有虚拟主机匹配

Engine匹配到localhost对应的虚拟主机host(匹配不到交给默认host)

host获取请求/test/index.jsp匹配其所有的Context

host匹配到/test的Context(匹配不到交给path为”“的Context处理)

Context匹配到对应的Servlet,构造HttpServletRequest和HttpServletResponse对象,作为JspServlet的doGet和doPost方法的参数传入。

Context将执行后的HttpServletResponse对象返回host

host将HttpServletResponse对象返回Engine

Engine将HttpServletResponse对象返回Connector

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”
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  tomcat