Tomcat简单剖析
Tomcat剖析
Tomcat的目录结构
1. bin目录 该目录下存放的tomcat 的可执行文件,如启动关闭tomcat等。
2. Conf 这是tomcat的一个核心目录
Server.xml 配置整个服务器信息 例如修改端口,添加虚拟机,做集群操作,修改编码等.
Tomcatuser.xml 这里保存的是用户的信息,配置之后可以在 tomcat manager中查看tomcat的运行状态等。
Web.xml 部署描述符文件, 就是客户端请求的是一个html页面,tomact进行比对然后返回一个html页面。
Context.xml 对所有的应用统一配置
3、lib:Tomcat的类库
4.logs 里面存放的是一些日志文件,记录tommcat启动,关闭和异常状态的信息
5.temp 存放的是Tomcat的临时文件 可以在停止tomcat后删除
6.webapps:存放web项目的目录,其中每个文件夹都是一个项目;如果这个目录下已经存在了目录,那么都是tomcat自带的。项目。其中ROOT是一个特殊的项目,在地址栏中没有给出项目目录时,对应的就是ROOT项目。http://localhost:8080/examples,进入示例项目。其中examples就是项目名,即文件夹的名字。在启动toncat的时候,如果你的项目在webapps中放着,那么会启动所有的项目。(注意)
7.work`: 运行时生成的文件,tomcat启动生成的文件都在这里面
Tomcat的请求回应原理
Tomcat体系结构
由上图可看出Tomca的心脏是两个组件:Connecter和Container。一个Container可以选择多个Connecter,多个Connector和一个Container就形成了一个Service。Service可以对外提供服务,而Server服务器控制整个Tomcat的生命周期。
组件的生命周期是由 lifecycle接口来进行管理的(生命周期的)组件只要实现这个接口并且进行对应的重写就可以实现被拥有它的组件控制了,(上层控制)最上层的组件为server 控制server的是startup 等命令来进行server的关闭和启动
Connector组件(连机器组件)
Container组件(容器组件)
上图就是container的体系结构,并且Engine和contriner是平级关系
解析server.xml配置
部分标签属性补充
<Service>元素
它包含一个<Engine>元素,以及一个或多个
<Connector>,这些Connector元素共享用同一个Engine元素
<Engine>元素
defaultHost指定处理客户的默认主机名,在<Engine>中的<Host>子元素中必须定义这一主机
在<Engine>可以包含如下元素<Logger>, <Realm>, <Value>, <Host>
<host元素>
5>alias指定主机别名,可以指定多个别名
6>deployOnStartup如果此项设为true,表示Tomcat服务器启动时会自动发布appBase目录下所有的Web应用
.如果Web应用中的server.xml没有相应的<Context>元素,将采用Tomcat默认的Context
在<Host>元素中可以包含如下子元素
<Logger>, <Realm>, <Value>, <Context>
<Context>元素
cookies指定是否通过Cookies来支持Session,默认值为true
<Connector>元素 重要
2>enableLookups如果设为true,表示支持域名解析,可以把IP地址解析为主机名.WEB应用中调用
request.getRemoteHost方法返回客户机主机名.默认值为true
3>redirectPort指定转发端口.如果当前端口只支持non-SSL请求,在需要安全通信的场命,将把客户请求转
发至SSL的redirectPort端口
HttpConnector元素的属性
3>address如果服务器有二个以上ip地址,此属性可以设定端口监听的ip地址.默认情况下,端口会监听服务
器上所有的ip地址
4>bufferSize设定由端口创建的输入流的缓存大小.默认值为2048byte
5>protocol设定Http协议,默认值为HTTP/1.1
6>maxThreads设定在监听端口的线程的最大数目,这个值也决定了服务器可以同时响应客户请求的最大数
目.默认值为200
JkConnector的属性//集群使用
2>port设定AJP端口号
3>protocol必须设定为AJP/1.3
Tomcat优化处理
1.内存优化
出现这种异常的时候我们就考虑tomcat的优化了
Tomcat内存优化主要是对 tomcat 启动参数优化,我们可以在 tomcat 的启动脚本 catalina.bat 中设置 java_OPTS 参数。
JAVA_OPTS参数说明
-server 启用jdk 的 server 版;
-Xms java虚拟机初始化时的最小内存;
-Xmx java虚拟机可使用的最大内存;
-XX: PermSize 内存永久保留区域
-XX:MaxPermSize 内存最大永久保留区域
服务器参数配置
下面的代码需要放在Execute The Requested Command 下面第一行
Set JAVA_OPTS=’-Xms1024m -Xmx2048m -XX: PermSize=256M -XX:MaxNewSize=256m -XX:MaxPermSize=256m’
配置成功后可在https://jingyan.baidu.com/article/9f63fb916800e0c8410f0e6f.html 查看内存是否调整
2.Tomcat并发优化
可以在connector中配置相关属性达到优化
maxThreads 客户请求最大线程数 1000为单个tomcat的峰值
minSpareThreads Tomcat初始化时创建的 socket 线程数
maxSpareThreads Tomcat连接器的最大空闲 socket 线程数
enableLookups 若设为true, 则支持域名解析,可把 ip 地址解析为主机名
redirectPort 在需要基于安全通道的场合,把客户请求转发到基于SSL 的 redirectPort 端口
acceptAccount 监听端口队列最大数,满了之后客户请求会被拒绝(不能小于maxSpareThreads )
connectionTimeout 连接超时
minProcessors 服务器创建时的最小处理线程数
maxProcessors 服务器同时最大处理线程数
URIEncoding URL统一编码
2>Tomcat中的配置示例
<Connector port="9027"
protocol="HTTP/1.1" //以http协议
maxHttpHeaderSize="8192"
maxThreads="1000" //最大线程数一个线程一为一个人
minSpareThreads="100"//初始化时创建连接数
maxSpareThreads="1000"
minProcessors="100"//最小线程处理数
maxProcessors="1000"
enableLookups="false"
URIEncoding="utf-8"
acceptaCount="1000"//监听端口队列最大数,满了之后客户请求会被拒绝(不能小于maxSpareThreads )
redirectPort="8443"
disableUploadTimeout="true"/>//是否自己更新tomcat
超时时间也要自己设置 connectionTimeout="20000"
compression="on" //打开压缩功能 属于 缓存优化
compressionMinSize="2048" //可压缩的最小值单位kb
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" //压缩类型
Tomcat日志处理
关于寻找异常处理是tomcat服务器中应用的一个很重要的部分
我们以前找错都是在控制台system.out 这太low了并且看的时候也是非常的麻烦。
其实我们项目中出现的异常的在tomcat目录下的logs下都是有显示的,这是tomcat的容器的日志
而我们在控制台中打印的信息是不会放在tomcat的容器日志中的,这时候我们就要进行日志跟踪,要不然控制台突然卡掉了宕机等,里面的日志信息就看不到了,这时候我们就要把控制台里面的日志信息,也保存在tomca的logs目录下
方法如下
打开startup.bat文件,找到call "%EXECUTABLE%" start %CMD_LINE_ARGS%, 改为call "%EXECUTABLE%" run %CMD_LINE_ARGS% 。
打开catalina.bat文件,在4处 %ACTION% 后面加上 >> %CATALINA_HOME%\logs\catalina.%date:~0,4%-%date:~5,2%-%date:~8,2%.out 。重启tomcat,tomcat的logs文件夹下就会出现catalina.out文件了。
这个时候我们就可以把控制台中的日志信息进行跟踪同步在logs目录下了