一、Tomcat 配置
- 一、Tomcat 配置
- 二、Tomcat 性能调优
一、Tomcat
架构
- Tomcat 是一个基于 Java 的
WEB
容器,其实现了JavaEE
中的Servlet
与Jsp
规范。- 与
Nginx
、Apache
服务器不同,在于一般用于 动态请求处理。- 在架构设计上,采用 面向组件 的方式设计。
- 即整体功能是通过 组件的方式 拼装完成。
- 另外 每个组件 都可以被替换以保证灵活性。
二、Tomcat
组件及关系
核心组件。
Server
:服务器(1个)。
Service
:服务(n个)。
Connector
:连接器(n个)。
指对外开放的端口号,有三种协议。
- HTTP/1.1。
- SSL https。
- AJP/1.3:Apache 私有协议,二进制传输(Apache JServ Protocol)。
用于 Apache 反向代理 Tomcat。
Engine
:引擎(1个)。
默认:Catalina。
Host
:虚拟机(n个)。
基于域名(name)分发请求(默认:localhost)。
Context
:指每个 WEB 应用(n个)。
基于路径(path)分发请求(默认:ROOT)。
每个 Context 的 ClassLoader 都是独立。
- 其他组件(
Component
)。
Manager
:管理器。logger
:日志管理。loader
:载入器。pipeline
:管道。Valve
:管道的阀门。
三、server.xml
配置
- BIO:同步阻塞 模型(Tomcat-6.X)。
- NIO:同步非阻塞 模型(Tomcat-7.X)。
- AIO:基于事件,异步非阻塞 模型(Tomcat-8.X)。
<?xml version="1.0" encoding="UTF-8"?><!-- `Server`服务器(1个) -->
<!-- `port`执行关闭命令的端口号 -->
<!-- `shutdown`服务器的关闭命令 -->
<Server port="8005" shutdown="SHUTDOWN"><Listener className="org.apache.catalina.startup.VersionLoggerListener" /><Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /><Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /><Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /><Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /><GlobalNamingResources><Resource name="UserDatabase" auth="Container" type="org.apache.catalina.UserDatabase" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" pathname="conf/tomcat-users.xml" /></GlobalNamingResources><!-- `Service`服务(n个,默认:`Catalina`),将多个`Connector`与一个`Engine`组合成一个服务 --><Service name="Catalina"><!-- `Connector`连接器(n个,默认:`8080`),用于接收指定协议的连接,并指定给唯一的`Engine`进行处理 --><Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /><!-- `port`连接的端口号 --><!-- `protocol`监听的协议(默认:http/1.1) --><!-- `redirectPort`重定向端口号(指服务器正在处理`Http`请求时,收到了一个`SSL`传输`Https`请求后重定向的端口号) --><!-- `SSLEnabled`是否开启`SSL`认证(在`Https`访问时需要开启) --><!-- `enableLookups`为`true`进行`DNS`查询得到远程客户端的实际主机名,为`false`则不进行`DNS`查询而是返回其`IP`地址(`request.getRemoteHost()`获取主机名) --><!-- `minSpareThreads`最小备用线程数(默认:10,服务器启动时,创建的处理请求线程数) --><!-- `maxThreads`最大线程数(`Worker`线程) --><!-- `acceptCount`同时接收最大连接(默认:100),当所有处理请求的线程都被使用时,可以放入处理队列中的请求数,超过这个数的请求将不予处理 --><!-- `connectionTimeout`连接超时的时间(单位:毫秒),指在`acceptCount`停留最大时间 --><!-- `URIEncoding`对`URI`编码 --><!-- `useBodyEncodingForURI`响应的`Body`是否与`URIEncoding`相同编码 --><!-- `compression`开启对静态资源压缩 --><!-- `compressionMinSize`压缩最小值 --><!-- `compressableMimeType`压缩类型 --><!-- 自定义`Connector` --><Connector port="8081" protocol="org.apache.coyote.http11.Http11NioProtocol" redirectPort="8444" enableLookups="false" minSpareThreads="200" maxThreads="1024" acceptCount="800" connectionTimeout="20000" URIEncoding="UTF-8" useBodyEncodingForURI="true" compression="on" compressionMinSize="2048" compressableMimeType="text/html,text/xml,text/plain,text/javascript,text/css,application/x-json,application/json,application/x-javascript" /><!-- `Engine`引擎(1个,默认:`Catalina`),用于处理连接的执行器 --><!-- `name`引擎名称 --><!-- `defaultHost`默认`Host` --><Engine name="Catalina" defaultHost="localhost"><Realm className="org.apache.catalina.realm.LockOutRealm"><Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase" /></Realm><!-- `Host`虚拟机(n个,默认:`localhost`),基于域名匹配虚拟机,类似`Nginx`的`server`模块 --><Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"><!-- `Valve`阀门(可以理解成的过滤器),具体配置要基于`Valve`接口的子类,以下为一个访问日志的`Valve` --><Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /></Host><!-- `appBase`类似`Nginx`的`root`模块(绝对路径或相对路径,相对`TOMCAT_HOME`根目录) --><!-- `unpackWARs`解压`war`包 --><!-- `autoDeploy`自动部署 --><!-- 自定义`Host` --><Host name="www.qs.com" appBase="E:/root/tomcat" unpackWARs="true" autoDeploy="true"><Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="www.qs.com_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /><!-- `Context`应用上下文(n个),每个`Context`都有其独立的`classPath`,避免冲突 --><!-- `path`:请求路径 --><!-- `docBase`:绝对路径或相对路径(`E:/root/tomcat/qs`) --><Context path="/qshome" docBase="qs" reloadable="true" /></Host></Engine></Service><!-- 自定义`Service` --><Service name="qs"><!-- 自定义 --></Service></Server>
# 启动`Tomcat`
./bin/catalina.sh start
# 停止`Tomcat`
./bin/catalina.sh stop
# 从新加载配置
./bin/catalina.sh configtest# 远程关闭`Tomcat`
telnet 127.0.0.1 8005
SHUTDOWN
- http://127.0.0.1:8080:访问
$TOMCAT_HOME/webapps/ROOT
目录。- http://127.0.0.1:8081:访问
$TOMCAT_HOME/webapps/ROOT
目录。- http://www.qs.com:8080:访问
E:/root/tomcat/ROOT
目录。- http://www.qs.com:8080/qs:访问
E:/root/tomcat/qs
目录。- http://www.qs.com:8080/qshome:访问
E:/root/tomcat/qs
目录。- http://www.qs.com:8080/wy:访问
E:/root/tomcat/wy
目录。
<!-- `E:\root\tomcat\ROOT.xml` -->
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/wy" docBase="E:/root/tomcat/wy" reloadable="true" />
<!-- `E:\java\tomcat\apache-tomcat-learn\conf\Catalina\www.qs.com\wyb.xml` -->
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/wyb" docBase="E:/root/tomcat/wy" reloadable="true" />
- http://www.qs.com:8080/wyb:访问
E:/root/tomcat/wy
目录。
四、Tomcat
脚本
- 手动部署
war
项目。
- 复制
war
包至Tomcat_Home.webapps
目录。- 执行
starut.bat
脚本启动。- 启动过程中
war
包会被自动解压装载。
- 在 Eclipse 或 Idea 中,启动 WEB 项目的时候。
- 也是把
war
包复制到webapps
目录解压吗?
- 显然不是,真正做法是在 Tomcat 程序文件之外,创建了一个 部署目录。
- 在生产环境中也是这么做的,即:Tomcat 程序目录 和 部署目录 是分开 。
- 只需要在启动时,指定
CATALINA_HOME
与CATALINA_BASE
参数即可实现。
启动参数 | 描述说明 |
---|---|
JAVA_OPTS |
JVM 启动参数,设置内存、编码等(-Xms100m 堆内存最小值、-Xmx200m 、-Dfile.encoding=UTF-8 编码)
|
JAVA_HOME |
指定 JDK 目录,如果未设置从 Java 环境变量当中去找
|
CATALINA_HOME |
Tomcat 程序根目录
|
CATALINA_BASE |
应用部署目录(默认为:$CATALINA_HOME )
|
CATALINA_OUT |
应用日志输出目录(默认:$CATALINA_BASE/log )
|
CATALINA_TMPDIR |
应用临时目录(默认:$CATALINA_BASE/temp )
|
1. 启动停止脚本
mkdir /root/qs
cd /root/qs
cp -r /root/apache-tomcat-8/conf /root/qs/
mkdir logs
mkdir weebapps
tomcat.sh
。
#!/bin/bash
export JAVA_OPTS="-Xms100m -Xmx200m"
export JAVA_HOME=/root/jdk/
# 采用软连接`/root/apache-tomcat`指向`/root/apache-tomcat-8`
#export CATALINA_HOME=/root/apache-tomcat-8
export CATALINA_HOME=/root/apache-tomcat
# `pwd`当前脚本目录`/root/qs`
export CATALINA_BASE="`pwd`"case $1 instart)$CATALINA_HOME/bin/catalina.sh startecho start success!!;;stop)$CATALINA_HOME/bin/catalina.sh stopecho stop success!!;;restart)$CATALINA_HOME/bin/catalina.sh stopecho stop success!!sleep 3$CATALINA_HOME/bin/catalina.sh startecho start success!!;;version)$CATALINA_HOME/bin/catalina.sh version;;configtest)$CATALINA_HOME/bin/catalina.sh configtest;;esac
exit 0
./tomcat start
./tomcat stop
./tomcat restart
./tomcat version
./tomcat configtest
2. 自动部署脚本
deploy.sh
。
#!/bin/bash -e
export now_time=$(date +%Y-%m-%d_%H-%M-%S)
echo "deploy time:$now_time"app=$1
version=$2
mkdir -p war/
# 从`SVN`下载程序至`war`目录
war=war/${app}_${version}.war
echo "$war"
svn export svn://192.168.0.147/release/${app}_${version}.war $wardeploy_war() {# 解压版本至当前目录target_dir=war/${app}_${version}_${now_time}unzip -q $war -d $target_dirrm -f appwarln -sf $target_dir appwartarget_ln=`pwd`/appwarecho '<?xml version="1.0" encoding="UTF-8" ?><Context docBase="'$target_ln'" allowLinking="false"></Context>' > conf/Catalina/localhost/ROOT.xml# 重启`Tomcat`服务./tomcat.sh restart
}# 部署`war`
deploy_war
./deploy.sh qs v1.0
./deploy.sh qs v2.0
# 版本回滚
rm -rf appwar
lb -s war/qs_v1.0_2022-04-14_10-20-30/
./tomcat.sh restart
五、Spring Boot
配置
server:tomcat:uri-encoding: UTF-8# 最大工作线程数(默认:200) # 操作系统做线程之间的切换调度是有系统开销的,所以不是越多越好。max-threads: 1000# 等待队列长度(默认:100)accept-count: 1000max-connections: 20000# 最小工作空闲线程数(默认10)适当增大一些,以便应对突然增长的访问量min-spare-threads: 100
六、扩展
- 学习Tomcat
- Tomcat的高效配置
一、Tomcat 配置相关推荐
- eclipse下tomcat配置
eclipse下tomcat配置整了我一两个小时,呵呵,大家不要笑话,本人对eclipse还是菜鸟! 1.用到的软件 jdk-7u40-windows-i586 EclipseJavaEEIDEfor ...
- Rainbond最佳实践:Tomcat配置Redis实现Session共享
Rainbond:生产级无服务器PaaS Rainbond是国内首个开源的生产级无服务器PaaS,深度整合基于Kubernetes的容器管理.多类型CI/CD应用构建与交付.多数据中心的资源管理等技术 ...
- intellij tomcat配置
目录 intellij tomcat配置 @(目录) intellij tomcat配置 如上图标注 1 所示,我们可以切换随时为项目切换不同的容器. 如上图标注 2 所示,我们可以指定给运行的容器设 ...
- ssl单向tomcat配置webservice访问方法
tomcat 配置 单向 SSL <Connector port="8443" protocol="org.apache.coyote.http11.Http11P ...
- Tomcat 配置WEB虚拟映射 及 配置虚拟主机
Tomcat 配置WEB虚拟映射 及 配置虚拟主机 配置WEB虚拟映射文件夹有三种方法例如以下: 第一(要重新启动server的): 打开路径 Tomcat 6.0\conf 下的 server.x ...
- tomcat android https,tomcat 配置 https, android端 访问
1.控制台 进入到tomcat 的bin 目录下 执行命令 keytool的命令网上很多解释 生成一个 tomcat.keystore 文件 keytool -genkey -alias tomcat ...
- tomcat苹果版安装步骤_mac系统安装apache tomcat配置方法图文详解
下面,绿茶小乐哥分享mac系统安装apache tomcat配置方法,希望能帮助到大家! tomcat无法取访问appache资源. appache只支持静态网页,但像asp,php,cgi,jsp等 ...
- 详解Tomcat配置JVM参数步骤
这里向大家描述一下如何使用Tomcat配置JVM参数,Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个java虚拟机.您可以选择自己的需要选择不同的操作系统和对应的JDK ...
- spring boot实战(第七篇)内嵌容器tomcat配置
spring boot默认web程序启用tomcat内嵌容器tomcat,监听8080端口,servletPath默认为 / 通过需要用到的就是端口.上下文路径的修改,在spring boot中其修改 ...
- jdk和tomcat配置
一:安装jdk,需要jdk和jre的安装目录一样 二:设置jdk和jre环境变量 JAVA_HOME:C:\Program Files\Java\jdk1.7.0_80 path: %JAVA_HOM ...
最新文章
- retain和copy还有assign的区别
- 微信小程序小模块界面,边框带阴影
- 前端将二进制数据流转为文件_前端通过二进制流下载文件
- html动态图标代码,SVG动态图标是如何实现的
- 带参数的RedirectToAction
- 变频器压频比的正确设置方法
- SCM供应链管理系统介绍:企业SCM供应链系统应用领域、优势、功能详解
- SEFS安全透明加密内核
- ATmega16 单片机 AVR单片机 直流电机调速器
- 软件测试系统性总结思维导图
- .webp是什么文件?怎么打开这种文件
- excel批量生成批处理语句另存为.bat文件批量改名
- nslookup查询域名系统服务器,域名解析系统DNS诊断命令nslookup详解
- 毕业设计 : 基于stm32的微信天气机器人 - 天气检测 环境监测 微信机器人
- 水果食用大全 -- 果品食疗 - 葡萄
- 戴尔电脑录屏怎么录?这3个方法,教你轻松录屏
- numpy中rand与randn的区别
- 下一个独角兽!橙色云用互联网设计变革传统工业设计模式
- DirectSound播放PCM有杂音的解决方法
- Redis实战之好友关注功能
热门文章
- QPS达到30万的elasticsearch架设之道
- 华三服务器怎样用hdm安装linux,H3C服务器配置HDM用户指南
- 线性代数学习笔记3-4:描述线性变换的空间压缩情况(列空间、秩)
- 2022年全球市场碳化硅滑动轴承总体规模、主要生产商、主要地区、产品和应用细分研究报告
- JAVA视频学习笔记-马士兵(六)
- 头歌-信息安全技术-Linux之用户管理
- 【C语言】杨辉三角(等腰三角)
- C语言实现SM4加解密算法
- ValueError: binary mode doesn‘t take an encoding argument
- CToolBar工具条控制方法