通常意义上的Web 服务器接受请求后, 只是单纯地响应静态资源(如HTML 文件、图片文件等) , 不能在后端进行一定的处理操作。Tomcat 是Ap ache 下的一个子项目, 它具备Web 服务器的所有功能, 不仅可以监听接受请求并响应静态资源, 而且可以在后端运行特定规范的J ava 代码Servlet, 同时将执行的结果以HTML 代码的形式返回客户端。
Tomcat 由一系列的组件构成其中核心的组件有三个。
Tomcat 具体的处理请求过程如下所示。
在部署Tomcat 服务之前需要先部署好实验环境, 实验环境的具体要求如图所示。
| 名称 | 说明 |
| 系统版本 | Cent0S7.3 ( 64 位) |
| Tomcat 版本 | 9.0.8 |
| jdk 版本 | 1.8.0_171 |
| 服务器IP地址 | 192.168.9.236 6G 内存 |
| Windows 客户端I P 地址及其配置 | 192.168.9.232 8G 内存 |
| 主机名 | localhost.localdomain |
| Firewalld | 关闭 |
| Selinux | 禁用 |
| Jmeter 版本 | 3.1 |
下载完安装包后, 将其上传到服务器/root 目录下, 执行安装命令。
[root@local host ~]# rpm -ivh jdk-8u171 -linux-x64.rpm
准备中… ################################ [100% ]
正在升级/安装…
1 :jdk1 .8-2000: 1.8.0_ 171-fcs ################################ [100% ]
Unpacking JAR files...
tools.Jar...
plugin.jar...
javaws .j ar. .
deploy.jar...
rt .jar...
jsse.jar...
charsets .jar.. .
localedata.Jar...
上面显示安装完成,jdk 安装目录在/usr/java/jdk1 .8 .0_171-amd64 ,, 编辑/etc/profile文件, 设置jdk 的环境变屈。具体操作如下。
[root@localhost ~]#vim /etc/profile
export JAVA_HOME=/usr/java/jdk1 .8.0_ 171-amd64
export CLASSPATH= $JAVA_HOME/Ii b/tools.jar:$JAVA_HOME/l ib/dt.jar
export PATH=$JAVA_HOME/bin:$PATH
[root@localhost ~]#source /etc/profile //使环境变昼生效
[root@l ocal host~]# java -version //查看jdk 版本号
java version "1 .8.0_ 171"
Java(TM) SE Runtime Environment (build 1.8.0_ 171-b11)
Java HotSpot(TM) 64-Bit Serve 「VM (build 25.171 -b11 , mixed mode)
从Tomcat 官网下载apache-tomcat-9. 0 .8. tar. gz 稳定版本, 将安装包解压后移动Tomcat目录到/usr/lo cal 下面, 然后执行/usr/local/tomcat/bin/sta rtup . sh 命令启动Tomcat 即可。具体操作如下。
[root@l ocal host ~]# wget
https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.8/bin/apache-tomcat-9.0.8.tar.gz
[root@localhost~]#tar zxf apache-tomcat-9.0.8.tar.gz
[root@localhost ~]#mv apache-tomcat-9.0.8 /usr/local/tomcat
[root@localhost ~]#/usr/local/tomcatlbin/startup.sh //启动Tomcat
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /us 「/loca l/tomcat
Using CATALINA_ TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr1ava/jdk1.8.0_ 171-amd64
Using CLASSPATH: /us 「/loca l/tomcat/b in/bootstrap.jar:/usr/local/tomcat/bin/tomcatjuli.jar
Tomcat started.
浏览器打开http:l/192.16 8.9.2 36 : 8080 进行访问会出现Tomcat 主页, 如图所示。

查看日志会发现Tomcat 第一次启动很慢, 默认情况下都需要几十秒。修改JDK 参数可以改善该状况, 打开/usr/java/jdk1.8.0_171-amd64/j re/l i b/security/java.security文件, 找到如下内容: secur可andom . source=fi le :/dev/random 修改成securerandom . source=file :/dev/urandom 。然后重启Tomcat 就会发现启动时间变短很多。
[root@localhost cont]# vim /usr/java/jdk1.8.0_ 171 -amd64/jre/Iib/security/java.security
secure rand om.source=fi le :/dev/urandom
[root@localhost cont}# /usr/local/tomcat/bin/shutdown.sh //关闭Tomcat
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_ TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr1ava/jdk1.8.0_ 171-amd64
Using CLASSPATH: /usr/loca l/tomcat/bin/bootstra p.jar:/usr/local/tomcat/bin/tomcatjuli.jar[root@localhost cont}# /usr/local/tomcatlbin/startup.sh //启动Tomcat
Using CATALINA_BASE: /usr/loca l/tomcat
Using CATALINA_HOME: /usr/loca l/tomcat
Using CATALINA_ TMPDIR: /usr/local/tomcaUtemp
Using JRE_HOME: /usr1ava/jdk1 .8.0_ 171-amd64
Using CLASSPATH: /usr/loca l/tomcat/b in/bootstra p.jar:/usr/local/tomcat/bin/tomcat-juli .jar
Tomcat started.
执行11 /usr/local/tomcaV命令即可查看Tomcat 安装后目录结构, 如下图所示。

Tomcat 各目录的作用具体如下所示。
执行下面的命令, 可以创建www 和bbs 项目目录和文件。
[root@localhost ~]# mkdir /usr/local/tomcatlwebappslwww
[root@localhost~]#echo "This is www page\!"> /usr/local/tomcat/webapps/www/index.jsp
[root@localhost ~]# mkdir /usr/local/tomcatlwebapps/bbs
[root@l ocalhost ~]#cho "This is bbs page\!"> /usr/locaUtomcatlwebapps/bbs/index.jsp
修改Tomcat 主配置文件/usr/local/tomcat/conf/server. xml , 在</Host> 下面增加如下内容。
[root@localhost ~]#vim /usr/local/tomcat/conf/server.xml
//关于www.test.com 的虚拟主机配置
unpackWARs="true" autoDeploy="true" xmlValidation="false"
xmlNamespaceAware="false">
path="" reloadable="true" />
//关于bbs.test.com 的虚拟主机配置
unpackWARs="true" autoDeploy="t「ue" xmlValidation="false"
xmlNamespaceAware="false">
path="" reloadable="true" />
[root@localhost ~]#/usr/local/tomcatlbin/shutdown.sh
[root@localhost ~]# /usr/local/tomcatlbin/startup.sh
客户端绑定两个域名需要写入本机hosts, Tomcat 默认端口是8080。
192.168.9.236 www.test.com
192.168.9.236 bbs.test.com
使用浏览器访问http ://www. test. com: 8080, 页面效果如图所示。

使用浏览器访问http ://bbs. test. com:8080 , 页面效果如图所示。

关千Tomcat 主配置文件server.xml 里面很多默认的配置项,并不能满足业务需求, 常用的优化参数如下。
如果已经对代码进行了动静分离, 静态页面和图片等数据就不需要Tomcat 处理了, 那么也就不需要在Tomcat 中配置压缩了。因为这里只有一台Tomcat 服务器, 而且压测的是Tomcat 首页, 会有图片和静态资源文件, 所以这里启用压缩。
从Oracle 官方下载JDK 软件,JDK 安装过程直接下一步即可。因为本章中所使用的客户端是Windows 10, 所以JDK 使用凡k-8u 102-windows-x64 版本。
使用的jmeter 软件版本为a pache-j meter-3.1 , 双击运行apache-jmeter-3.1.rar压缩包-> bi n 目录- >ApacheJ Meter.jar 文件即可打开丿meter 软件, 如图所示。

点击左上角文件->打开->选择压测脚本, 如图所示。

单击第一排绿色三角按钮(鼠标指上去后会显示启动)开始进行压测, 如图所示。

压测脚本里设置的是20 秒启动4000 个线程数, 并发为2000, 超时时间是50000 毫秒。也可以适当的根据自己的需求进行修改。为了不那么复杂, 从压测结果看只关注聚合报告, 聚合报告只关注Average 、90% Line 、Erro喉这三列, 因为压测Tomcat 首页压力不会太大, 所以Error 都是为0 属千正常。先看一组优化前( 默认的配置) 压测截图,如图所示。

打开Tomcat 主配置文件server.xm l, 找到如下默认配置。
[root@localhost ~]# vim /us r/loca I/tom catlconf/server.xmI
connectionTimeout="20000"
redirectPort="8443" />
将Tomcat 原本的默认配置修改为如下所示。
connectionTimeout="20000"
redirectPort="8443" minSpare Threads="50"
enableLooku ps="false" d isableU pl oad Ti meout="true"
enable Looku ps="false" disableUpload Timeout="true"
acceptCount="300" maxThreads="500" processorCache="500"URIEncoding="UTF-8"
compression="on"compressionMinSize="2048"compressableMimeType="texUhtml,text/xml,text/javascript,text/css,tex
Uplain,image/gif,image1pg,image/png"/>
重新启动Tomcat 服务器, jmeter 还是继续保持同样的参数进行压测, 优化后压测截图,
如所示。

从结果看优化后的平均值和90%响应时间比优化前的快。
Tom cat 启动命令行中的优化参数, 就是JVM 的优化。Tomcat 是Java 程序,运行在JVM 之上, 因为它的启动其实也只是一个Java 命令行,我们需要对这个Java 的启动命令行进行调优。不管是YGC 还是Full GC 、GC 都会导致程序运行中断, 正确的选择不同的GC 策略, 调整JVM 、GC 的参数, 可以极大的减少由千GC 工作而导致的程序运行中断方面的问题, 进而适当的提高J ava 程序的工作效率。
Tom cat 的启动参数位千安装目录${JAVA_H OME}/bi n 目录下, Linux 操作系统就是catali na .sh 文件。Java_OPTS 就是用来设置JVM 相关运行参数的变量, 下面具体看JVM常用参数详解。
以上就是一些常用的配置参数, 但是有些参数是可以被替代的, 配置思路需要考虑的是Java 提供的垃圾回收机制。虚拟机的堆大小决定了虚拟机花费在收集垃圾上的时间和频度。收集垃圾能够接受的速度和应用有关, 应该通过分析实际的垃圾收集的时间和频率来调整。假如堆的大小很大, 那么完全垃圾收集就会很慢, 但是频度会降低。
测试前, 先还原Tomcat 到默认的配置文件, 重启后压测一组优化前压测截图,如图所示。

上述关千JVM 优化参数太多, 很多参数需要对GC 回收有很深刻的认识。如果优化的不合适, 往往会起到事倍功半的效果。下面是常见的优化参数, 修改/usr/local/tomca/bi n/catalina .sh , 增加红色字体。
[root@localhost ~]#vim /usr/local/tomcat/bin/catalina.sh
# OS specific support. $var _must_ be set to eit hertrue or falseJAVA_ OPTS="-serve r-Xms4096m -Xmx4096m -XX:PermSize=2048m -XX:MaxPermSize=2048m"
cygwin=false
darwin=false
重启Tomcat 服务再次进行一轮压测, 如图所示。
