Tomcat 部署及优化

Tomcat 部署及优化

  • [Tomcat 概述](#Tomcat 概述)
    • [Tomcat 核心组件](#Tomcat 核心组件)
    • [Tomcat 请求处理](#Tomcat 请求处理)
  • [Tomcat 服务部署](#Tomcat 服务部署)
    • [安装启动 Tomcat](#安装启动 Tomcat)
  • [Tomcat 配置与优化](#Tomcat 配置与优化)

Tomcat 概述

自 2017 年 11 月编程语言排行榜 Java 占比 13%,高居榜首,Tomcat 也一度成为 Java开发人员的首选。其开源、占用系统资源少、跨平台等特性深受广大程序员喜爱。本章主要学习如何部署 Tomcat 服务,根据生产环境实现多个虚拟主机的配置,最后的重点是进行压测,根据压测结果如何优化 Tomcat 服务及常见的内存溢出如何处理。

Tomcat 核心组件

通常意义上的 Web 服务器接受请求后,只是单纯地响应静态资源(如 HTML 文件、图片文件等),不能在后端进行一定的处理操作。Tomcat是 Apache 下的一个子项目,它具备 Web 服务器的所有功能,不仅可以监听接受请求并响应静态资源,而且可以在后端运行特定规范的 Java 代码 Servlet,同时将执行的结果以 HTML 代码的形式返回客户端。

Tomcat 由一系列的组件构成,其中核心的组件有三个。

》Web 容器:完成 Web 服务器的功能。

》Servlet 容器:名字为 catalina,用于处理 Servlet 代码。

》JSP 容器:用于将 JSP 动态网页翻译成 Servlet 代码。

Tomcat 请求处理

Tomcat 具体的处理请求过程如下所示。

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

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

》Engine 获得请求 localhosttestindex.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 匹配到 URLPattem为*.jsp的 Servlet,对应于 JspServlet 类;

》构造 HttpServletRequest 对象和 HtpServletResponse 对象,作为参数调用 JspServlet的 doGet()或 doPost(),执行业务逻辑、数据存储等;

》Context 把执行完之后的 HttpServletResponse 对象返回给 Host:

》Host 把 HttpServletResponse 对象返回给 Engine;

》Engine 把 HttpServletResponse 对象返回 Connector;

》Connector把 HttpServletResponse 对象返回给客户 Browser。

Tomcat 服务部署

在部署 Tomcat 之前必须安装好 JDK,因为 JDK 是 Tomcat 运行的必要环境。JDK 的安装相对比较简单,版本有很多,本章选择基于 linux64 位 RPM 版本。

下载完安装包后,将其上传到服务器/root 目录下,执行安装命令。

上面显示安装完成,jdk安装目录在/usr/javaljdk1.8.0 171-amd64,,编辑/etc/profile文件,设置jdk 的环境变量。具体操作如下。

安装启动 Tomcat

  1. 安装 Tomcat 服务

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

浏览器打开 http://192.168.9.236:8080 进行访问会出现 Tomcat 主页

  1. 优化 Tomcat 服务启动时间

查看日志会发现 Tomcat 第一次启动很慢,默认情况下都需要几十秒。修改 JDK 参数可以改善该状况,打开/usr/javaljdk1.8.0_171-amd64re/ib/security/java.security 文件,找到如下内容到:securerandom.source=file:/dev/random修改成securerandom.source=file:/devurandom。然后重启 Tomcat 就会发现启动时间变短很多。

  1. Tomcat 目录结构

执行 l/usr/local/tomcat命令即可査看 Tomcat 安装后目录结构,如下图 8.2 所示.。

》bin 目录:用于存放启动和关闭 Tomcat 的脚本文件,比较常用的是 catalina.shstartup.shshutdown.sh 三个文件。

》conf 目录:用于存放 Tomcat 服务器的各种配置文件,比较常用的是 server.xml、context.xml、tomcat-users.xml、web.xml 四个文件。

》lib 目录:用于存放 Tomcat 服务器的jar 包,一般不作任何改动,除非连接第三方服务,比如 redis,那就需要添加相对应的 jar 包。

》logs 目录:用于存放 Tomcat 日志。

》temp 日录:用于存放 Tomcat 运行时产生的文件。

》webapps 目录:用于存放项目资源的目录。

》work 目录:是 Tomcat 工作目录,一般清除 Tomcat 缓存的时候会使用到。

Tomcat 配置与优化

虚拟主机配置

很多时候公司会有多个项目需要运行,那么肯定不可能是一台服务器上运行多个Tomcat 服务,这样会消耗太多的系统资源。此时,就需要使用到Tomcat 虚拟主机。例如现在新增两个域名www,test,com 和 bbs,test.com,希望通过这两个域名访问到不同的项目内容。

  1. 创建 www 和 bbs 项目目录和文件
    执行下面的命令,可以创建 www 和 bbs 项目目录和文件。
  2. 修改 Tomcat 主配置文件

修改 Tomcat 主配置文件/usr/local/tomcat/conf/server.xml,在Host下面增加如下内容。

  1. 虚拟主机访问测试

客户端绑定两个域名需要写入本机 hosts,Tomcat 默认端口是 8080.

Tomcat 优化

Tomcat 默认安装下的缺省配置并不适合生产环境,它会频繁出现假死现象需要重启,只有通过不断压测优化才能让它最高效率稳定的运行。优化主要包括三方面,分别为操作系统优化(内核参数优化),Tomcat 配置文件参数优化,Java虚拟机(JVM)调优。其中最难理解的就是 JVM 调优。系统优化本章不介绍,本章将配合jmeter 压测工具进行调优前和调优后的数据进行比较。

  1. Tomcat 配置文件参数优化

关于 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="gozila, traviata":对于以下的浏览器,不启用压缩。

如果已经对代码进行了动静分离,静态页面和图片等数据就不需要 Tomcat 处理了,那么也就不需要在 Tomcat 中配置压缩了。因为这里只有一台 Tomcat 服务器,而且压测的是Tomcat 首页,会有图片和静态资源文件,所以这里启用压缩。

以上是一些常用的配置参数,还有好多其它的参数设置,还可以继续深入的优化,HTTPConnector 与 AJP Connector 的参数属性值,可以参考官方文档的详细说明进行学习。链接地址 http://tomcat.apache.org/tomcat-9.0-doc/config/http.html,下面开始对 Tomcat 配置文件优化进行前后的对比。

  1. jmeter 压测工具

要压测,首先学习关于jmeter压测工具基本的使用方法。执行步骤如下。

(1)客户端安装 JDK

从 Oracle 官方下载 JDK 软件,JDK 安装过程直接下一步即可。因为本章中所使用的客户端是 Windows 10,所以 JDK 使用 idk-8u102-windows-x64 版本。

(2)运行jmeter 软件

本章中是使用的jmeter软件版本为apache-jmeter-3.1,双击运行apache-jmeter-3.1.rar压缩包->bin 目录->ApacheJMeter.jar 文件即可打开 jmeter 软件,如图 8.5 所示。

(3)打开压测脚本进行压测

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

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

(4)修改 Tomcat 配置

打开 Tomcat 主配置文件 server.xml,找到如下默认配置。

将 Tomcat 原本的默认配置修改为如下所示

(5)修改配置参数后压测

重新启动 Tomcat 服务器,jmeter 还是继续保持同样的参数进行压测,优化后压测截图,如 8.9 所示。

相关推荐
星河梦瑾6 分钟前
SpringBoot相关漏洞学习资料
java·经验分享·spring boot·安全
黄名富10 分钟前
Redis 附加功能(二)— 自动过期、流水线与事务及Lua脚本
java·数据库·redis·lua
love静思冥想11 分钟前
JMeter 使用详解
java·jmeter
言、雲14 分钟前
从tryLock()源码来出发,解析Redisson的重试机制和看门狗机制
java·开发语言·数据库
TT哇21 分钟前
【数据结构练习题】链表与LinkedList
java·数据结构·链表
Yvemil71 小时前
《开启微服务之旅:Spring Boot 从入门到实践》(三)
java
Anna。。1 小时前
Java入门2-idea 第五章:IO流(java.io包中)
java·开发语言·intellij-idea
.生产的驴1 小时前
SpringBoot 对接第三方登录 手机号登录 手机号验证 微信小程序登录 结合Redis SaToken
java·spring boot·redis·后端·缓存·微信小程序·maven
爱上语文1 小时前
宠物管理系统:Dao层
java·开发语言·宠物
王ASC2 小时前
SpringMVC的URL组成,以及URI中对/斜杠的处理,解决IllegalStateException: Ambiguous mapping
java·mvc·springboot·web