Tomcat部署及优化

  • Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器,属于轻量级应用服务器在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选
  • Tomcat 是Apache 服务器的扩展,但运行时它是独立运行的,所以当运行 Tomcat 时,它实际上作为一个与 Apache 独立的进程单独运行的
    • 当配置正确时,Apache 为HTML 页面服务,而Tomcat 实际上运行 JSP 页面和Servlet
    • Tomcat 和 IS 等 Web 服务器一样,具有处理 HTML 页面的功能,另外它还是一个 Servlet 和 JSP 容器,独立的 Servlet 容器是 Tomcat 的默认模式
      • Tomcat 处理静态 HTML 的能力不如 Apache 服务器

核心组件

通常意义上的 Web 服务器接受请求后,只是单纯地响应静态资源(如 HTML 文件、图片文件等),不能在后端进行一定的处理操作

Tomcat是Apache 下的一个子项目,它具备 Web 服务器的所有功能,不仅可以监听接受请求并响应静态资源,而且可以在后端运行特定规范的 Java 代码 Servlet,同时将执行的结果以 HTML 代码的形式返回客户端

  • Tomcat 由一系列的组件构成,其中核心的组件有三个:
    • Web 容器:完成 Web 服务器的功能
    • Servlet 容器:名字为 catalina,用于处理 Servlet 代码
    • JSP 容器:用于将 JSP 动态网页翻译成 Servlet 代码

Tomcat请求处理

用户在浏览器中输入网址 localhost:8080/test/indexjsp,请求被发送到本机端口 8080,被在那里监听的 Coyote HTTP/1.1 Connector 获得

Connector 把该请求交给它所在的 Service 的 Engine(Container)来处理,并等待Engine 的回应

Engine 获得请求 localhost/test/index.jsp,匹配所有的虚拟主机 Host

Engine 匹配到名为 localhost的 Host(即使匹配不到也把请求交给该 Host 处理,因为该 Host 被定义为该 Engine 的默认主机),名为 localhost 的 Host 获得请求/testindex.jsp,匹配它所拥有的所有 Context。Host 匹配到路径为/test 的 Context(如果匹配不到就把该请求交给路径名为“”的Context 去处理)

path=“/test”的 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

Connector把 HttpServletResponse 对象返回给客户 Browser

Tomcat服务部署

实验部署环境

名称

说明

系统版本

CentOS7.3(64位)

Tomcat 版本

9.0.8

jdk 版本

1.8.0_171

服务器 IP 地址

192.168.10.101 6G 内存

Windows 客户端 IP 地址及其配置

192.168.9.232 8G 内存

主机名

localhost.localdomain

Firewalld

关闭

Selinux

禁用

Jmeter 版本

3.1

(1)下载jdk安装包,版本很多

[root@localhost ~]# tar -zxf jdk-8u171-linux-x64.tar        //从官网下载的tar包
[root@localhost ~]# rpm -ivh jdk-8u171-linux-x64.rpm        //从官网下载的rpm包

(2)jdk安装目录在lusr/iava/idk1.8.0 171-amd64,,,编辑/etc/profile文件,设置idk 的环境变量

[root@localhost ~]# vim /etc/profile
export JAVA_HOME=/usr/java/jdk1.8.0 171-amd64
export CLASSPATH=$JAVA HOME/lib/tools.jar:$JAVA_/HOME/lib/dt.jar
export PATH=$JAVA HOME/bin:$PATH
[root@localhost ~]# source /etc/profile         //使环境变量生效
[root@localhost ~]# 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 Server VM (build 25.171-b11, mixed mode)

1:安装Tomcat服务

从 Tomcat官网下载 apache-tomcat-9.0.8.tar.gz稳定版本,将安装包解压后移动 Tomcat目录到/usr/local 下面,然后执行/usr/local/tomcat/bin/startup.sh 命令启动 Tomcat 即可

[root@localhost ~]# 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/tomcat/bin/startup.sh        //启动 Tomcat

2:优化Tomcat服务启动时间

  • 查看日志会发现 Tomcat 第一次启动很慢,默认情况下都需要几十秒。修改 JDK 参数可以改善该状况,打开/usr/java/jdk1.8.0 171-amd64/jre/ib/security/java.security 文件
  • 将 securerandom.source=file:/dev/random 修改成 securerandom.source=file:/devurandom
[root@localhost conf# vim /usr/javaljdk1.8.0 171-amd64/jre/lib/securityljava.security
securerandom.source=fle:/dev/urandom
[root@localhost conf]# /usr/local/tomcat/bin/shutdown.sh    //关闭 Tomcat
......
[root@localhost conf]# /usr/local/tomcat/bin/startup.sh        //启动 Tomcat

3:Tomcat目录结构及配置优化

  • bin 目录:用于存放启动和关闭 Tomcat 的脚本文件,比较常用的是 catalina.sh、startup.sh、shutdown.sh 三个文件
  • conf 目录:用于存放 Tomcat 服务器的各种配置文件,比较常用的是server.xml、context.xml、tomcat-users.xml、web.xml 四个文件
  • lib 目录:用于存放 Tomcat 服务器的jar 包,一般不作任何改动,除非连接第三方服务,比如 redis,那就需要添加相对应的jar 包
  • logs 目录:用于存放 Tomcat 日志
  • temp 目录:用于存放 Tomcat 运行时产生的文件
  • webapps 目录:用于存放项目资源的目录,用于存放jar包和war包
  • work 目录:是 Tomcat 工作目录,一般清除 Tomcat 缓存的时候会使用到
(1)创建 www 和 bbs 项目目录和文件
[root@localhost ~]# mkdir /usr/local/tomcat/webapps/www
[root@localhost ~#echo "This is www page\!">/usr/local/tomcat/webapps/www/index.jsp
root@localhost ~l# mkdir /usr/local/tomcat/webapps/bbs
[root@localhost ~#echo "This is bbs page\!">/usr/local/tomcat/webapps/bbs/index.jsp

(2)修改 Tomcat 主配置文件
//修改 Tomcat 主配置文件/usr/localtomcat/conf/server.xml,在</Host>下面增加如下内容
[root@localhost ~]# vim /usr/local/tomcat/conf/server.xml
//关于 www.test.com 的虚拟主机配置
<Host name="www.test.com" appBase="/usr/local/tomcat/webapps"
  unpackWARs="true" autoDeploy="true" xmlValidation="false"
  xmlNamespaceAware="false">
<Context docBase="/usr/local/tomcat/webapps/www" path="" reloadable="true" />
</Host>
//关于 bbs.test.com 的虚拟主机配置
<Host name="bbs.test.com" appBase="/usr/local/tomcat/webapps"
  unpackWARs="true" autoDeploy="true" xmlValidation="false"
  xmlNamespaceAware="false">
<Context docBase="/usr/local/tomcat/webapps/bbs" path="" reloadable="true" />
</Host>
[root@localhost ~]# ./usr/local/tomcat/bin/shutdown.sh 
[root@localhost ~]# ./usr/local/tomcat/bin/startup.sh
  • 关于 Tomcat 主配置文件 server.xml 里面很多默认的配置项,并不能满足业务需求,常用的优化参数
    • maxThreads:Tomcat 使用线程来处理接收的每个请求,这个值表示 Tomcat 可创建的最大的线程数,默认值是 200
    • minSpareThreads:最小空闲线程数,Tomcat 启动时的初始化线程数,表示即使没有人使用也开这么多空线程等待,默认值是 10
    • maxSpareThreads:最大备用线程数,一旦创建的线程超过这个值,Tomcat 就会关闭不再需要的 socket 线程。默认值是-1(无限制),一般不需要指定
    • URlEncoding:指定 Tomcat 容器的 URL 编码格式,Tomcat 语言编码格式这块不如其它 Web 服务器软件配置方便,需要分别指定
    • connnectionTimeout:网络连接超时,单位:毫秒,设置为0表示永不超时,这样设置有隐患的。通常默认 20000 毫秒就可以
    • enableLookups:是否反查域名,以返回远程主机的主机名,取值为:true 或 false,如果设置为 false,则直接返回 IP 地址,为了提高处理能力,应设置为 false
    • disableUploadTimeout:上传时是否使用超时机制。应设置为 true
    • connectionUploadTimeout:上传超时时间,毕竟文件上传可能需要消耗更多的时间,该参数需要根据自己的业务需要自行调整,以使 Servlet有较长的时间来完成它的执行,需要与上一个参数一起配合使用才会生效
    • acceptCount:指定当所有可以使用的处理请求的线程都被使用时,可传入连接请求的最大队列长度,超过这个数的请求将不予处理,默认为100个
    • compression:是否对响应的数据进行 GZIP 压缩,off 表示禁止压缩、on 表示允许压缩(文本将被压缩)、force 表示所有情况下都进行压缩,默认值为 of。压缩数据后可以有效的减少页面的大小,一般可以减小 113 左右,因而节省带宽
    • compressionMinSize:表示压缩响应的最小值,只有当响应报文大小大于这个值的时候才会对报文进行压缩,如果开启了压缩功能,默认值就是2048
    • compressableMimeType:压缩类型,指定对哪些类型的文件进行数据压缩
    • noCompressionUserAgents="gozilla, traviata":对于以下的浏览器,不启用压缩
  • 如果已经对代码进行了动静分离,静态页面和图片等数据就不需要 Tomcat 处理了,那么也就不需要在 Tomcat 中配置压缩了
  • 因为这里只有一台 Tomcat 服务器,而且压测的是Tomcat 首页,会有图片和静态资源文件,所以这里启用压缩

还有好多其它的参数设置,还可以继续深入的优化,HTTPConnector 与 AJP Connector 的参数属性值,可以参考官方文档的详细说明进行学习

链接地址: http://tomcat.apache.org/tomcat-9.0-doc/config/http.html

3.5:虚拟主机访问测试
客户端绑定两个域名需要写入本机 hosts,Tomcat 默认端口是 8080
192.168.10.101    www.test.com
192.168.10.101    bbs.test.com
//然后进行访问

jmeter压测工具

(1)客户端安装JDK

从 Oracle 官方下载 JDK 软件,JDK 安装过程直接下一步即可

(2)运行jmeter 软件

imeter软件版本为apache-jmeter-3.1,双击运行apache-jmeter-3.1.rar压缩包->bin 目录->ApacheJMeter.jar 文件即可打开 jmeter 软件

(3)配置线程组

    • 并修改线程属性
      • 线程数为4000
      • 并将Ramp-Up Period (in seconds):1(访问数)修改为20

(4)在线程组中添加HTTP请求、聚合报告、图形结果

    • 并将服务器名称或IP修改为192.168.10.101(服务器IP)和端口号:8080(服务器端口号)

  • 单击第一排绿色三角按钮(鼠标指上去后会显示启动)开始进行压测(需要一段时间),查看测试结果并打开聚合报告图表

(5)优化一下Tomcat配置

[root@localhost ~]# 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,tex t/plain,image/gif,image/jpg,image/png" />    //在/>之前结束
               
[root@localhost ~]# /usr/local/tomcat/bin/shutdown.sh 
[root@localhost ~]# /usr/local/tomcat/bin/startup.sh        //关闭并开启Tomcat

  1. Label:每个 JMeter 的 element(例如 HTTP Request)都有一个 Name 属性,label显示的就是 Name 属性的值
  2. #Samples:表示你这次测试中一共发出了多少个请求,如果模拟10个用户,每个用户迭代10次,那么这里显示100,这里显示的应该是150000而不是172649,之所以是172649,是因为我中间点击停止,然后又再原来的基础上重新开始执行
  3. Average:平均响应时间——默认情况下是单个 Request 的平均响应时间,当使用了 Transaction Controller 时,也可以以Transaction 为单位显示平均响应时间
  4. Median:中位数,也就是 50% 用户的响应时间 
  5. 90% Line:90% 用户的响应时间
  6. Min:最小响应时间
  7. Max:最大响应时间
  8. Error%:本次测试中出现错误的请求的数量/请求的总数
  9. Throughput:吞吐量——默认情况下表示每秒完成的请求数(Request per Second),当使用了 Transaction Controller 时,也可以表示类似 LoadRunner 的 Transaction per Second 数
  10. KB/Sec:每秒从服务器端接收到的数据量,相当于LoadRunner中的Throughput/Sec   这里我们可以看到,在这172649多次的访问之中,tomcat的访问出错率是0.15%,即大概有100多次的请求是由于忙碌而失败了的。当然,这只是一个参考,具体还要根据软硬件的条件才能最终确定下来
  • 18
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值