发表于: 2018-02-10 23:48:57

2 768


今日完成:

1.       Tomcat 配置文件server.xml

Tomcat隶属于Apache基金会,是开源的轻量级Web应用服务器server.xmlTomcat中最重要的配置文件,server.xml的每一个元素都对应了Tomcat中的一个组件,通过多xml文件中元素的配置,可以实现对Tomcat中各个组件的控制。https://www.cnblogs.com/kismetv/p/7228274.html

Server.xml位于$TOMCAT_HOME/con目录下

基本结构:

<Server> 根元素

<Service> 代表一个Engine元素和一组与之相连的Connector元素

<Connector /> 外部客户端发送请求和接收响应的特定Service的接口;

    <Connector />

  <Engine> 容器,处理Connector接收的请求,并产生相应的响应,一个Engine可以处理Service的所有请求

       <Host> 一个Host组件可以处理发向一个特定虚拟主机的所有请求

 <Context /> 一个Context组件可以处理一个特定web应用的所有请求

</Host>

</Engine>

</Service>

</Server>

内嵌组件:可以内嵌到容器中的组件,其他组件都可以归为内嵌组建

1)  Server(唯一)

最顶层,代表整个Tomcat容器,唯一

shutdown:关闭Server的指令   portServer接收shutdown指令的端口号,设为-1表示禁掉端口

                                             

作用:提供一个让客户端能够访问Service集合的接口,同时维护内部所有的Service的声明周期(初始化、结束服务、访问服务、、、、)

2)  Service(可以多个)

组装ConnectorEngine,对外提供服务

一个Service可以包含多个Connector(从客户端接收请求),但是只能包含一个Engine(处理请求)

3)  Connector(多个)

接收请求,创造RequestResponse对象用于请求端交换数据,分配线程让Engine处理请求,将RequestResponse对象传给Engine

控制Service的协议及端口号

port:规定请求的端口号    protocol:规定请求的协议

redirectPort:当强制要求https而请求http时,重定向到其他Connector

connectionTimeout:链接超时时间

ps:在正式的生产环境中,Tomcat也常常监听8080端口,而不是80端口。这是因为在生产环境中,很少将Tomcat直接对外开放接收请求,而是在Tomcat和客户端之间加一层代理服务器(nginx),用于请求的转发、负载均衡、处理静态文件等;通过代理服务器访问Tomcat时,是在局域网中,因此一般仍使用8080端口。

psAJP协议负责和其他的HTTP服务器(Apache)建立连接

在把Tomcat与其他HTTP服务器集成时,就需要用到这个连接器。之所以使用Tomcat和其他服务器集成,是因为Tomcat可以用作Servlet/JSP容器,但是对静态资源的处理速度较慢,不如ApacheIISHTTP服务器;因此常常将TomcatApache等集成,前者作Servlet容器,后者处理静态资源,而AJP协议便负责TomcatApache的连接。

4)  Engine(唯一)(也就是Servlet容器)

请求处理组件:从多个Cennector接收请求并处理,完成响应返回给Connector(最终到客户端)

name:用于日志和错误信息(唯一)

defaultHost:默认host,当发往本机的请求指定的host名称不存在时进行处理

5)  Host(多个)

每个Host组件代表Engine的一个虚拟主机

运行多个Web应用(一个Context代表一个Web应用),负责安装、展开、启动和结束每个Web应用

psHost组件代表的虚拟主机,对应了服务器中一个网络名实体(如”www.test.com”,或IP地址”116.25.25.25);为了使用户可以通过网络名连接Tomcat服务器,这个名字应该在DNS服务器上注册。

客户端通常使用主机名来标识它们希望连接的服务器;该主机名也会包含在HTTP请求头中。TomcatHTTP头中提取出主机名,寻找名称匹配的主机。如果没有匹配,请求将发送至默认主机。因此默认主机不需要是在DNS服务器中注册的网络名,因为任何与所有Host名称不匹配的请求,都会路由至默认主机。

name:虚拟主机的主机名(一般情况下,主机名需要是在DNS服务器中注册的网络名,但是Engine指定的defaultHost不需要)

unpackWARs:是否将代表Web应用的WAR文件解压;如果为true,通过解压后的文件结构运行该Web应用,如果为false,直接使用WAR文件运行Web应用。

autoDeployappBasexmlBasedeployOnStartupWeb应用自动部署有关

6)  Context(多个)

代表一个Web应用(Web应用基于WAR文件,或者WAR文件解压后对应的应用目录)

Web应用自动部署:(依赖于检查是否有新的或更改过的Web应用)

1.1   Host配置

deployOnStartupautoDeploy设置为true,则tomcat启动自动部署:当检测到新的Web应用或Web应用的更新时,会触发应用的部署(或重新部署)

deployOnStartuptrue时,Tomcat在启动时检查Web应用,且检测到的所有Web应用视作新应用;autoDeploytrue时,Tomcat在运行时定期检查新的Web应用或Web应用的更新。

appBasexmlBase设置了检查Web应用更新的目录

appBase属性指定Web应用所在的目录,默认值是webapps,这是一个相对路径,代表Tomcat根目录下webapps文件夹。

xmlBase属性指定Web应用的XML配置文件所在的目录,默认值为conf/<engine_name>/<host_name>,例如主机localhostxmlBase的默认值是$TOMCAT_HOME/conf/Catalina/localhost/

1.2   检查Web应用更新

Tomcat按照如下的顺序进行扫描,来检查应用更新:

A、扫描虚拟主机指定的xmlBase下的XML配置文件

B、扫描虚拟主机指定的appBase下的WAR文件

C、扫描虚拟主机指定的appBase下的应用目录

1.3   <Context>元素的配置

Context元素最重要的属性是docBasepath,此外reloadable属性也比较常用。

docBase指定了该Web应用使用的WAR包路径,或应用目录。需要注意的是,在自动部署场景下(配置文件位于xmlBase)docBase不在appBase目录中,才需要指定;如果docBase指定的WAR包或应用目录就在docBase中,则不需要指定,因为Tomcat会自动扫描appBase中的WAR包和应用目录,指定了反而会造成问题。

            path指定了访问该Web应用的上下文路径,当请求到来时,Tomcat根据Web应用的 path属性与URI的匹配程度来选择Web应用处理相应请求。例如,Web应用app1path属性是”/app1”,Web应用app2path属性是”/app2”,那么请求/app1/index.html会交由app1来处理;而请求/app2/index.html会交由app2来处理。如果一个Context元素的path属性为””,那么这个Context是虚拟主机的默认Web应用;当请求的uri与所有的path都不匹配时,使用该默认Web应用来处理。

ps:在自动部署场景下(配置文件位于xmlBase),不能指定path属性,path属性由配置文件的文件名、WAR文件的文件名或应用目录的名称自动推导出来。如扫描Web应用时,发现了xmlBase目录下的app1.xml,或appBase目录下的app1.WARapp1应用目录,则该Web应用的path属性是”app1”。如果名称不是app1而是ROOT,则该Web应用是虚拟主机默认的Web应用,此时path属性推导为””。

reloadable属性指示tomcat是否在运行时监控在WEB-INF/classesWEB-INF/lib目录下class文件的改动。如果值为true,那么当class文件改动时,会触发Web应用的重新加载。在开发环境下,reloadable设置为true便于调试;但是在生产环境中设置为true会给服务器带来性能压力,因此reloadable参数的默认值为false

server.xml中静态部署Web应用:

(静态部署与自动部署是可以共存的)

并不推荐使用静态部署,因为server.xml 是不可动态重加载的资源,服务器一旦启动了以后,要修改这个文件,就得重启服务器才能重新加载。而自动部署可以在Tomcat运行时通过定期的扫描来实现,不需要重启服务器。

docBase:静态部署时,docBase可以在appBase目录下,也可以不在;本例中,docBase不在appBase目录下。

path:静态部署时,可以显式指定path属性,但是仍然受到了严格的限制:只有当自动部署完全关闭(deployOnStartupautoDeploy都为false)docBase不在appBase中时,才可以设置path属性。在本例中,docBase不在appBase中,因此path属性可以设置。

reloadable属性的用法与自动部署时相同。

7)  请求处理

(1)       根据协议和端口号选定ServiceEngine

Service中的Connector组件可以接收特定端口的请求,因此,当Tomcat启动时,Service组件就会监听特定的端口。

(2)       根据域名或IP地址选定Host

Service确定后,TomcatService中寻找名称与域名/IP地址匹配的Host处理该请求。如果没有找到,则使用Engine中指定的defaultHost来处理该请求。

(3)       根据URI选定Context/Web应用

Tomcat根据应用的 path属性与URI的匹配程度来选择Web应用处理相应请求

8)  配置多个服务

1)复制<Service>元素,放在当前<Service>后面。

2)修改端口号:根据需要监听的端口号修改<Connector>元素的port属性;必须确保该端口没有被其他进程占用,否则Tomcat启动时会报错,而无法通过该端口访问Web应用。

3)修改ServiceEnginename属性

4)修改HostappBase属性(如webapps2

5Web应用仍然使用自动部署

6)将要部署的Web应用(WAR包或应用目录)拷贝到新的appBase下。

9)  Valve

Valve可以与Tomcat的容器(EngineHostContext)关联。不同的Valve有不同的特性

AccessLogValve的作用是通过日志记录其所在的容器中处理的所有请求,Valve放在Host下,便可以记录该Host处理的所有请求。AccessLogValve记录的日志就是访问日志,每天的请求会写到一个日志文件里。

1className:规定了Valve的类型,是最重要的属性;本例中,通过该属性规定了这是一个AccessLogValve

2directory:指定日志存储的位置,本例中,日志存储在$TOMCAT_HOME/logs目录下。

3prefix:指定了日志文件的前缀。

4suffix:指定了日志文件的后缀。通过directoryprefixsuffix的配置,在$TOMCAT_HOME/logs目录下

%h:远程主机名或IP地址;如果有nginx等反向代理服务器进行请求分发,该主机名/IP地址代表的是nginx,否则代表的是客户端。后面远程的含义与之类似,不再解释。

%l:远程逻辑用户名,一律是”-”,可以忽略。

%u:授权的远程用户名,如果没有,则是”-”。

%t:访问的时间。

%r:请求的第一行,即请求方法(get/post)uri、及协议。

%s:响应状态,200,404等等。

%b:响应的数据量,不包括请求头,如果为0,则是””-

2.       linux常用查看状态

查看指定端口:

侦听状态(LISTEN)已经建立的连接(ESTABLISHED)等待关闭的连接(CLOSE_WAIT

查看指定应用进程状态(进程id):

查看指定进程下有多少个线程:

查看指定进程侦听的端口

3.       Resin4

默认三个端口:

watch dog 用的6600 (配置文件里没有)(resin.xml

Http端口:8080 (对应app.http)(resin.properties

Server监听端口: 127.0.0.1:6800 (对应app_servers )(resin.properties

说明:单个Resin不管同时配置几个应用,每次启动Resin之后,只会启动一个WatchDog监听,killWatchDog后,所有的实例都会停止,WatchDog运行中,kill掉某个实例后,该实例会自动重启。

只要WatchDog在运行中,修改server端口,不需要重启resin

配置文件:

app-default.xml  web应用配置

cluster-default.xml  集群配置

resin.xml

resin.properties  会被修改的变量

resin.xmlresin.properties

resin 4之后把配置文件分成resin.xmlresin.properties两部分.端口/IP修改都在resin.properties文件里面

resin.xml里面,在resin 实例里面,网站分成: cluster -> server -> host -> web-app 4个层级

         access日志(conf/cluster-default.xml):

                   resin服务器在被访问时,会将访问者的IP、时间、get/set方式、域名后的URL、以及所用的代理记录在logsaccess.log文件中。

                  

                   path: 用于设定日志文件的路径,支持El Variables and Functions,也就是resin中的变量,比如${host.name}就是虚拟站点的id名称,${server.id}则是应用的名字(在一台服务器上开多个应用而又不使用域名的情况下很有用),所以如果将它放在下面的话,将path设置为 logs/${host.name}/access.log的话可以将不同站点的日志存放在不同的目录下面。

                   rollover-period表示回滚的周期,1D表示以一天为单位回滚,所谓的回滚是将当前所有写日志操作都先锁住,然后将文件的内容复制到文件名带时间戳的文件里,完成之后access.log文件继续使用。如果配置的是1W就表示以一周为单位。

                   rollover-count表示备份的文件数,这里配置是2,表示最多只备份两个备份文件,超过的就将更早的那个备份文件删除。

                  

                   rollover-size表示回滚的大小,resin并不是实时都在判断access.log大小有没有超过rollover-size,而是每2分钟检查一次文件,如果在这两分钟之内文件大小超过rollover-sizeresin是不做处理的,只有待到两分钟的那一刻,resin才会去将这个大于rollover-size的文件的内容复制到文件名带时间戳的文件里,完成之后access.log文件继续使用。

                   周期回滚和限制大小回滚可以一起使用

log-handlerresin.xml

loggerresin.xml

初始控制台打印内容由conf/resin.xml控制

resin.xml继承cluster-default.xml(集群配置),也就是resin配置的会覆盖cluster-default.xml的相关配置

loggerlog-handler的具体解释,此处的两个logger主要用于启动时参数的配置,get第一次访问出现上述打印日志

logger--主要配置 JDK logging API, logger用于指定需要log的包及level(loggerlog-handler的进一步解释)

     child of <resin>,<server>,<host-default>,<host>,<web-app-default>,<web-app>(可以理解为作用域)

access-log --主要用于http输出

     child of <cluster>,<cluster-default>,<server>,<server-default>,<host>,<host-default>,<web-app>,<web-app-default>

stdout-log-用于标准输出(system.out)

     child of <resin>,<cluster>,<host-default>,<host>,<web-app-default>,<web-app>

stderr-用于错误输出(system.err)

     child of <resin>,<cluster>,<host-default>,<host>,<web-app-default>,<web-app>

一个基本的项目的log配要满足:

日志层级分明(区分log的不同level,正常与异常)

日志错误异常记录

日志存储归类(比如按天存储)

打印请求响应(开发调试阶段)

对于一个容器来讲,还要区分不同的webapp

日志级别:

日志所对应的层

resin.xml编写日志文件

明日计划:

1.       查看Resin日志,统计访问DB时间,Controller处理时间。

2.       将以上数据都贴到日报里去。 执行时间统计要分成 执行了100次。其中的分布是怎么样的。如20MS有多少次。10MS有多少

遇到的问题:

1.       resin日志中com.caucho.sql获得的数据是访问DB的时间吗

2.       计算Controller可以在resin日志中直接读取到,还是需要什么其他方法?没找到解决办法

收获:

1.       解析tomcat配置文件

2.       使用和查看resin日志



返回列表 返回列表
评论

    分享到