文章目录
Tomcat介绍
- 免费的、开放源代码的Web应用服务器
- Apache软件基金会(Apache Software Foundation) Jakarta项目中的一个核心项目
- 由Apache、 Sun和一些公司及个人共同开发而成
- 深受Java爱好者的喜爱,并得到部分软件开发商的认可
- 目前比较流行的Web应用服务器
一、Tomcat核心组件
三大件构成Tomcat
1、JSP 提供前端页面 (java)
2、Servlet 提供后端 (java)
3、web (http协议,tcp/ip)
二、Tomcat处理请求过程
-
请求被发送到本机端口8080,被在那里侦听的Coyote HTTP/11. 1Connector 获得
-
Connector把该请求交给它所在的Service的Engine来处理, 并等待来自Engine的回应
-
Engine获得请求localhost/yy/index. JSP匹L配它所拥有的所有虚拟主机Host
-
Engine匹配到名为localhost的Host. 即使匹配不到也把请求交给该Host处理, 因为该Host被定义为该Engine的默认主机。
-
localhost Host获得请求/yy/index.JSP, 匹配它所拥有的所有Context。
-
Host匹配到路径为/yy的Context.。如果匹配不到,就把该请求交给路径名为Context去处理。
-
path=" /yy"的Context获得请求/index.JSP,在它的mapping table中 寻找对应的Servlet。
-
Context匹配到URL PATTERN 为*. JSP 的Servlet,对应于JSPServlet类。
-
构造HttpServletRequest对象和HttpServletResponse对象, 作为参数调用JSPServlet 的doGet ()或doPost()方法。
-
Context把执行完了之后的HttpServletResponse对象返回给Host。
-
Host把HttpServletResponse对象返回给Engine。
-
Engine把HttpServletResponse 对象返回给Connector。
-
ConnectorHttpServletResponse对象返回给客户browser。
container 容器有两个端口号,外端口,内端口,由connector连接器提供
engine 引擎
context 前端页面
Tomcat安装部署
一、下载并安装jdk
jdk是Java语言的软件开发工具包,属于编译器,将源码文件转换成可执行文件
jdk时Tomcat运行的必要环境
根据计算机硬件配置,选择安装包
下载地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
设置环境变量
环境变量(PATH):(2种)
用户环境变量:只针对当前用户生效
系统环境变量:只针对当前主机有效(用任何用户在当前主机都生效),换一台主机就失效 (bin目录)
#安装包已下载,通过mount挂载到centos并进行解压
[root@localhost ~]# mkdir /tom
[root@localhost tom]# mount.cifs //192.168.17.1/tom /tom
Password for root@//192.168.17.1/tom:
[root@localhost ~]# cd /tom
[root@localhost tom]# ls
apache-jmeter-5.1.zip apache-tomcat-9.0.16.tar.gz jdk-8u201-linux-x64.rpm
[root@localhost tom]# rpm -ivh jdk-8u201-linux-x64.rpm
[root@localhost tom]# cd /usr/java/
[root@localhost java]# ls
default jdk1.8.0_201-amd64 latest
[root@localhost java]# cd jdk1.8.0_201-amd64/
[root@localhost jdk1.8.0_201-amd64]# ls
bin javafx-src.zip LICENSE release THIRDPARTYLICENSEREADME.txt
COPYRIGHT jre man src.zip
include lib README.html THIRDPARTYLICENSEREADME-JAVAFX.txt
[root@localhost jdk1.8.0_201-amd64]# pwd
/usr/java/jdk1.8.0_201-amd64
#设置环境变量
[root@localhost jdk1.8.0_201-amd64]# vim /etc/profile //编辑系统变量文件
#末行添加三条
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$PATH
[root@localhost jdk1.8.0_201-amd64]# source /etc/profile //使环境变量生效
#验证
[root@localhost jdk1.8.0_201-amd64]# java -version //查看jdk版本(为安装的版本)
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)
二、安装并启动Tomcat
官网下载地址:https://tomcat.apache.org
安装启动
#安装包已下载,挂载并解压
[root@localhost ~]# cd /tom
[root@localhost tom]# ls
apache-jmeter-5.1.zip apache-tomcat-9.0.16.tar.gz jdk-8u201-linux-x64.rpm
[root@localhost tom]# tar zxvf apache-tomcat-9.0.16.tar.gz -C /usr/local
#切换至安装目录并进行优化
[root@localhost tom]# cd /usr/local/
[root@localhost local]# ls
apache-tomcat-9.0.16 bin etc games include lib lib64 libexec nginx sbin share src
[root@localhost local]# mv apache-tomcat-9.0.16/ tomcat //解压后名字太长,重命名
[root@localhost local]# ls
bin etc games include lib lib64 libexec nginx sbin share src tomcat
[root@localhost local]# cd tomcat/
[root@localhost tomcat]# ls
bin conf lib logs README.md RUNNING.txt webapps
BUILDING.txt CONTRIBUTING.md LICENSE NOTICE RELEASE-NOTES temp work
[root@localhost tomcat]# cd bin/
[root@localhost bin]# ls
bootstrap.jar commons-daemon.jar digest.sh shutdown.sh tool-wrapper.sh
catalina.bat commons-daemon-native.tar.gz makebase.bat startup.bat version.bat
catalina.sh configtest.bat makebase.sh startup.sh version.sh
catalina-tasks.xml configtest.sh setclasspath.bat tomcat-juli.jar
ciphers.bat daemon.sh setclasspath.sh tomcat-native.tar.gz
ciphers.sh digest.bat shutdown.bat tool-wrapper.bat
[root@localhost bin]# ln -s /usr/local/tomcat//bin/startup.sh /usr/bin/ //将开启脚本添加到/usr/bin中,自动识别
[root@localhost bin]# ln -s /usr/local/tomcat//bin/shutdown.sh /usr/bin/ //将关闭脚本添加到/usr/bin中,自动识别
#关闭防火墙,执行开启脚本
[root@localhost bin]# systemctl stop firewalld
[root@localhost bin]# setenforce 0
[root@localhost bin]# startup.sh
[root@localhost bin]# netstat -ntap | grep 8080
tcp6 0 0 :::8080 :::* LISTEN 20887/java
#开启成功,验证访问首页
Tomcat目录结构
1、bin:存放启动和关闭 Tomcat 的脚本文件, 比较常用的是 catalina.sh、startup.sh、shutdown.sh 三个文件。
2、 conf:存放 Tomcat 服务器的各种配置文件,比较常用的是 server.xml、context…xml、tomcat-users.xml、web.xml 四个文件。
3、 lib:存放 Tomcat 服务器的 jar 包,一般不作任何改动,除非连接第三方服务,比如 redis, 那就需要添加相对应的 jar 包。
4、 logs:存放 Tomcat 日志。
5、temp:存放 Tomcat 运行时产生的文件。
6、webapps:存放项目资源的目录。
7、work:Tomcat 工作目录,一般清除 Tomcat 缓存的时候会使用到。
Tomcat启动时间优化
缩短启动时间的命令:securerandom.source=file:/dev/urandom
[root@localhost bin]# cd /usr/java/jdk1.8.0_201-amd64/jre/lib/security
[root@localhost security]# ls
blacklist blacklisted.certs cacerts java.policy java.security javaws.policy policy trusted.libraries
[root@localhost security]# vim java.security
三、配置虚拟主机
有多个项目同时运行时,一台服务器不建议运行多个Tomcat服务,需要配置虚拟主机
通过两个域名访问到不同的项目内容:
需求:新增两个域名www.kgc.com和www.accp.com,通过两个域名访问到不同的项目内容
1、搭建dns域名解析
#安装
[root@localhost ~]# yum install -y bind
#配置主配置文件
[root@localhost ~]# vim /etc/named.conf
#配置区域配置文件
[root@localhost ~]# vim /etc/named.rfc1912.zones
#配置区域数据配置文件
[root@localhost ~]# cp -p /var/named/named.localhost /var/named/kgc.com.zone
[root@localhost ~]# vim /var/named/kgc.com.zone
[root@localhost ~]# cp -p /var/named/kgc.com.zone /var/named/accp.com.zone
#重启服务并验证域名解析
[root@localhost ~]# systemctl restart named
2、配置虚拟主机
#创建kgc和accp项目和文件
[root@localhost ~]# mkdir /usr/local/tomcat/webapps/kgc
[root@localhost ~]# echo "hello--kgc" > /usr/local/tomcat/webapps/kgc/index.jsp
[root@localhost ~]# mkdir /usr/local/tomcat/webapps/accp
[root@localhost ~]# echo "hello--accp" > /usr/local/tomcat/webapps/accp/index.jsp
#更改主配置文件
[root@localhost ~]# cd /usr/local/tomcat/conf/
[root@localhost conf]# vim server.xml
定义host属性
[root@localhost conf]# vim server.xml
<Host name="www.kgc.com" appBase="/usr/local/tomcat/webapps" //定义域名及工作目录
unpackWARs="true" autoDeploy="true" //更新war包,支持自动部署
xmlValidation="false" //关闭xml文件验证
xmlNamespaceAware="false"> //关闭命名空间
<Context docBase="/usr/local/tomcat/webapps/kgc" //指定站点路径
path="" reloadable="true" /> //path设定为空,加载默认类 reloadable进行重载
</Host>
<Host name="www.accp.com" appBase="/usr/local/tomcat/webapps"
unpackWARs="true" autoDeploy="true" xmlValidation="false"
xmlNamespaceAware="false">
<Context docBase="/usr/local/tomcat/webapps/accp"
path="" reloadable="true" />
</Host>
#重启服务并进行访问验证
[root@localhost conf]# shutdown.sh
[root@localhost conf]# startup.sh
客户端绑定DNS地址:192.168.17.142
http://www.kgc.com:8080/
http://www.accp.com:8080/
Tomcat默认端口8080
四、Tomcat优化
Tomcat的缺省配置并不适合生产环境,它会频繁出现假死现象需要重启,只有通过不断压测优化才能让它最高效率稳定的运行。优化主要有三方面,分为操作系统优化(内核参数优化),Tomcat 配置文件参数优化, Java 虚拟机(JVM)调优。配合jmeter 压测工具进行调优前和调优后的数据进行比较。
Tomcat主配置文件server.xml常用的配置参数
如果对代码进行了动静分离处理,静态页面和图片等数据就不需要做Tomcat处理,也就不需要在Tomcat中配置压缩
maxThreads | connectionUploadTimeout |
---|---|
minSpareThreads | acceptCount |
maxSpareThreads | compression |
URIEncoding | compressionMinSize |
connnectionTimeout | compressableMimeType |
enableLookups | noCompressionUserAgents=“gozilla,traviata” |
disableUploadTimeout | true |
-
[maxThreads] :Tomcat 使用线程来处理接收的每个请求,这个值表示Tomcat 可创建的最大的线程数,默认值是200.
-
[ minSpareThreads]:最小空闲线程数,Tomcat 启动时的初始化的线程数,表示即使没有 人使用也开这么多空线程等待,默认值是10
-
[ maxSpareThreads]:最大备用线程数,- -旦创建的线程超过这个值,Tomcat 就会关闭不 再需要的socket 线程。默认值是-1 (无限制)。一般不需要指定
-
[URIEncoding]:指定Tomcat 容器的URL编码格式,语言编码格式这块倒不如其它Web 服务器软件配置方便,需要分别指定
-
[ connnectionTimeout]:网络连接超时,单位:毫秒,设置为0表示水不超时,这样设置有隐患的。通常默认20000毫秒就可以
-
[ enableLookups]:是否反查域名,以返回远程主机的主机名,取值为: true 或false, 如果设置为false, 则直接返回IP地址,为了提高处理能力,应设置为false.
-
[disableUploadTimeout]:上传时是否使用超时机制。应设置为true.
-
[connectionUploadTimeout]:上传超时时问,毕竟文件上传可能需要消耗更多的时问,这个根据你自己的业务需要自己调,以使Servlet有较长的时间来完成它的执行,需要与上一个参数一起配合使用才会生效
-
[acceptCount]:指定当所有可以使用的处理请求的线程数都被使用时,可传入连接请求的最大队列长度,超过这个数的请求将不予处理,默认为100个。
-
[compression]:是否对响应的数据进行,GZIP压缩,off:表示禁止压缩;on:表示允许压缩(文本将被压缩)、force:表示所有情况下都进行压缩,默认值为off,压缩数据后可以有效的减少页面的大小,一般可以减小1/3左右,节省带宽
-
[compressionMinSize]:表示压缩响应的最小值,只有当响应报文大小大于这个值的时候才会对报文进行压缩,如果开启了压缩功能,默认值就是2048
-
[compressableMimeType]:压缩类型,指定对哪些类型的文件进行数据压缩。
-
[noCompressionUserAgents=“gozilla,traviata”]:对于以下的浏览器,不启用压缩
如果已经对代码进行了动静分离,静态页面和图片等数据就不需要Tomcat处理了,那
么也就不需要在Tomcat中配置压缩了。因为这里只有一台.Tomcat服务器,而且压测的是
Tomcat 首页,会有图片和静态资源文件,所以这里启用压缩
实例:
1、安装jdk(环境)
准备好安装源,直接安装jdk
下载地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
到C:\Program Files\Java\jdk1.8.0_181\bin目录,复制路径
设置系统环境变量:右击我的电脑-属性–高级系统设置–环境变量–系统变量–修改Path
2、安装压测工具
打开软件包
打开压测脚本
现在还未进行优化,压测尝试,得出平均值(刚开始可能不准,可以多测试几次,取平均值)
3、参数优化
[root@localhost conf]# vim /usr/local/tomcat/conf/server.xml
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
minSpareThreads="50"
enableLookups="false"
disableUploadTimeout="true"
acceptCount="300"
maxThreads="500"
processorCache="500"
URIEncoding="UTF-8"
compression="on"
compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,image/gif,image/jpg,image/png"/>
优化后压测平均值