Java笔记 ·

tomcat基础小结

目录结构

bin:可执行文件,包含启动脚本
conf:配置文件
lib:tomcat的依赖库
logs:日志
temp:临时文件
webapp:默认的应用部署目录
work:供web应用使用,tomcat的工作目录,放置tomcat运行中产生的一些文件,如,跑jsp时,翻译出来的servlet一般在这里面。
LICENSE:许可证文件
NOTICE、RELEASE-NOTES、RUNNING.txt:

JVM启动参数配置
环境变量JAVA_OPTS
-server-Xms512m -Xmx521m
最小堆内存,最大堆内存,一般可以一样大
如:

//在本发起有效
export JAVA_OPTS = "-server-Xms2048m -Xmx2048m"
//设置一直有效
cat ~/.bashrc

//启动-运行bin目录下的对应启动脚本
./bin/startup.sh

配置文件

重要配置文件 server.xml
结构
enter description here
enter description here
Server
最顶层

Service
一个Server可配置多个Service

Connector
一个Service可以有多个Connector
用来接收用户请求。

Engine
一个Service有一个Engine
用于处理Connect接收到的请求,包括平时写的代码也是由其执行。

Host
一个Engine可以有多个Host
Host是虚拟主机的概念,即配置域名和ip。

Context
一个Host可有一个或多个Context。
一个Context即一个web应用。

对应组件的实现

Connector

1、Coyote组件,实现了许多不同的Connector
默认BIO Connector
使用传统的 阻塞式的bio的操作的方式,实现方式也是传统的java I/O的实现。
客户端一个链接过来,服务端分配一个线程处理,若请求比较大,时间很久请求头没发完,对应的处理线程就只能一直等待。
2、Container
容器具体执行web应用代码逻辑的部分。
具体实现:Catalina
tomcat中实现容器的组件,最终都是由Catalina中的代码执行的。

请求处理流程
enter description here
java_tomcat_request01

参数配置

Connector

port
address
监听网络请求时到哪个地址,一般会有多个ip,若不配置,会在所有地址上监听。
protocol
协议,默认htpp1.1,调优可能会调整更高的。
connectionTimeout
多长时间不发请求则断开,即连接超时时间
acceptCount
排队队列最大值。超过后,超出的会被拒绝处理,即不再处理后面的。
maxConnections
最大连接数。超过后值会接收但不处理。设置-1表示不设置连接数。
minSpareThreads
最小空闲线程数
maxThreads
最大线程数

Executor
线程池
事先创建一定数目的线程,当有任务时,从池中取出用完后再放回池中。
minSpareThreads
最小空闲线程数
maxThreads
最大线程数

当Connector同时配置依赖Executor和minSpareThreads/maxThreads,优先Executor。

    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
        maxThreads="150" minSpareThreads="4"/>
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
			   executor="tomcatThreadPool"
               redirectPort="8443" />

Tomcat日志

作用

Tomca运行情况获知
调试利器

分类

系统运行日志:运行信息与状态
访问日志:记录请求访问
应用日志:应用程序打印日志
访问日志:
配置文件 server.xml

        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

 

directory :日志目录
prefix:日志名前缀
suffix:日志名后缀
pattern:日志格式

请求方式(get/post等):method: %m
客户端ip:client ip:%a
请求时刻:time:%t
用户响应码: status:%s
服务端下发字节数: byteSent: %b
User-Agent:%{User-Agent}i

日志切割
fileDateFormat="yyyy-MM-dd." --时戳格式
rotatable = "true" --是否开启日志滚动

优化相关

Tomcat学习总结(3)——Tomcat优化详细教程

闲谈Tomcat性能优化
如何优化tomcat配置(从内存、并发、缓存4个方面)优化

参与评论