Tomcat 部署及优化

一: Tomcat 概述

1.1: Tomcat 介绍

  • 免费的、开放源代码的Web应用服务器
  • Apache软件基金会(Apache Software Foundation)Jakarta项目中的一个核心项目
  • 由Apache、Sun和一些公司及个人共同开发而成
  • 深受Java爱好者的喜爱,并得到部分软件开发商的认可
  • 目前比较流行的Web应用服务器。

Tomcat属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。一般来说,Tomcat虽然和Apache或者Nginx这些web 服务器一样,具有处理 HTML页面的功能,然而由于其处理静态HTML 的能力远不及Apache或者Nginx,所以Tomcat通常是作为一个Servlet和JSP容器,单独运行在后端。

1.2: Tomcat 核心组件

JavaServlet

Servlet 是 Java 平台上的一种服务器端组件,用于扩展服务端的能力,处理来自客户端的请求并生成响应。Tomcat 提供了一个 Servlet 容器,负责加载、实例化、初始化和调用 Servlet,以及在不需要时销毁它们。

JSP容器

JSP (JavaServer Pages) 是一种动态网页技术标准,用于创建动态网页内容。JSP 页面会被转换成 Servlet,在第一次请求时编译,之后直接执行编译后的 Servlet。

1.3: Tomcat 请求处理

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

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

的回应;

3:请求在Engine、Host、Context和 Wrapper 这四个容器之间层层调用,最后在Servlet 中执行对应的业务逻辑、数据存储等。

4:执行完之后的请求响应在Context、Host、Engine 容器之间层层返回,最后返回给Connector,并通过Connector返回给客户端。

1.4:Tomcat 功能组件结构

1. Server

这是最外层的容器,代表整个 Tomcat 实例,包含一个或多个 Service。

2. Service

每个 Service 包含一个或多个 Connector 和一个 Container(Engine)。Service 定义了哪些 Connector 可以访问哪些 Container。

3. Connector

Connector 负责处理特定协议的请求,如 HTTP、HTTPS 或 AJP。它将接收到的请求转发给 Engine,并将 Engine 的响应返回给客户端。

4. Engine

Engine 是处理请求的核心组件,它决定请求应该交给哪一个 Host 来处理。

5. Host

Host 代表虚拟主机,允许在单个物理服务器上运行多个网站。每个 Host 都有自己的 Contexts。

6. Context

Context 是一个 Web 应用程序的容器,负责加载和管理该应用的 Servlets 和 JSPs。

1.5:Container结构分析

  • Server:顶级容器,包含 Service 元素。
  • Service:包含至少一个 Connector 和一个 Container(Engine)。
  • Connector:实现特定协议的通信,如 HTTP、HTTPS。
  • Container :Engine、Host 和 Context 都是 Container 的子类,它们共同形成了 Tomcat 的层次结构。
    • Engine:处理请求的核心,将请求分发到适当的 Host。
    • Host:代表虚拟主机,可以有多个 Context。
    • Context:每个 Web 应用都有自己的 Context,负责该应用的生命周期管理和资源加载。

这种结构使 Tomcat 能够有效地处理复杂的请求路由和多应用共存的情况。

1.6:Tomcat数据流向

二: Tomcat 服务部署

2.1:案例环境

|---------------------|-----------------------|
| 名称 | 说明 |
| 系统版本 | CentOS7.9(64位) |
| Tomcat 版本 | 9.0.8 |
| jdk版本 | 1.8.0_171 |
| 服务器IP地址 | 192.168.10.101 6G 内存 |
| Windows 客户端IP地址及其配置 | 192.168.10.10 8G 内存 |
| 主机名 | localhost.localdomain |
| Firewalld | 关闭 |
| Selinux | 禁用 |
| Jmeter 版本 | 3.1 |

2.2:下载并安装 JDK

1:安装JDK

Java Development Kit (JDK) 是开发 Java 应用程序所必需的软件包,包含了 Java 编译器、Java 运行时环境 (JRE) 和其他开发工具。

下载 JDK
  • 访问 Oracle 官方网站或其他可靠的 JDK 发布平台,例如 Adoptium 或 Azul Systems。
  • 根据你的操作系统(Windows、Linux 或 macOS),选择合适的 JDK 版本进行下载。
  • 建议下载最新的 LTS (Long Term Support) 版本,以确保稳定性和长期支持。
安装 JDK
  • 对于 Windows 和 macOS 用户,运行下载的安装程序,按照屏幕上的提示完成安装过程。
  • 在 Linux 上,你可以使用包管理器(如 apt、yum 或 dnf)来安装,或者手动解压下载的二进制文件并将其放置在适当的位置。
2:设置 jdk 的环境变量

为了确保系统能够识别 JDK 的位置,你需要设置环境变量。具体步骤如下:

Windows
  • 打开"控制面板" > "系统和安全" > "系统" > "高级系统设置" > "环境变量"。
  • 在"系统变量"区域,点击"新建",添加变量名 JAVA_HOME,变量值设为 JDK 的安装目录。
  • 找到 Path 变量,编辑它,在其中添加 %JAVA_HOME%\bin
Linux/macOS
  • 打开终端。

  • 编辑 ~/.bashrc/etc/environment 文件,取决于你想设置用户级还是系统级变量。

  • 添加以下行:

    1export JAVA_HOME=/path/to/jdk
    2export PATH=$JAVA_HOME/bin:$PATH
    
  • 保存文件并运行 source ~/.bashrcsource /etc/environment 使更改生效。

2.3:安装启动 Tomcat

1:安装 Tomcat 服务
  • 下载 Tomcat 的压缩包(.tar.gz.zip 格式)。
  • 解压缩下载的文件到你选择的目录,例如 /opt/tomcat
  • 确保你的系统已经正确设置了 JDK 的环境变量,因为 Tomcat 需要它来运行。
2:优化 Tomcat 服务启动时间
  • 减少初始堆大小 :通过修改 CATALINA_OPTS 环境变量来减小 JVM 的初始堆大小。
  • 禁用不必要的服务和模块 :在 server.xml 文件中禁用不需要的 Connectors 或者在 context.xml 中禁用不使用的数据源。
  • 使用预编译的 JSP:在部署阶段预编译 JSP 文件,避免在启动时进行编译。
  • 清理临时文件:定期清理工作目录下的临时文件和缓存。
3: Tomcat 目录结构
  • bin:包含启动和停止脚本。
  • conf :包含配置文件,如 server.xml, web.xml, context.xml 等。
  • lib:存放 Tomcat 使用的 jar 文件和第三方库。
  • logs:存放 Tomcat 日志文件。
  • temp:存放临时文件。
  • webapps :存放部署的 web 应用程序。默认包含一个示例应用 docsmanager
  • work:存放 JSP 编译后的 class 文件。
  • docs:包含 Tomcat 文档和示例应用程序。
  • bin/setenv.shbin/catalina.bat :用于设置环境变量,如 JAVA_OPTSCATALINA_OPTS

完成上述步骤后,你可以通过运行 bin/startup.sh (Unix/Linux)或 bin/startup.bat(Windows)来启动 Tomcat。同样地,通过运行 bin/shutdown.shbin/shutdown.bat 来停止 Tomcat。

三: Tomcat 配置与优化

3.1:虚拟主机配置

在 Tomcat 的安装目录下,通常有一个名为 webapps 的目录,这是用来存放 Web 应用程序的。为了创建虚拟主机,你需要在这个目录下为每个虚拟主机创建对应的目录。

  1. 创建 www 目录:

    1mkdir /path/to/tomcat/webapps/www
    
  2. 创建 bbs 目录:

    1mkdir /path/to/tomcat/webapps/bbs
    

接着,在这两个目录下创建一些基本的 HTML 文件,比如 index.html,以便测试虚拟主机是否正常工作。

2. 修改 Tomcat 主配置文件

Tomcat 的主配置文件是 conf/server.xml,在这里你可以配置虚拟主机。

  1. 打开 server.xml 文件: 使用文本编辑器打开此文件。

  2. 找到 Engine 节点 : 在 <Engine> 节点中,你会看到一个或多个 <Host> 节点,每一个都代表一个虚拟主机。如果不存在,你需要添加一个新的 <Host> 节点。

  3. 添加或修改 Host 节点 : 对于每个虚拟主机,你都需要添加一个 <Host> 节点,例如:

    1<Host name="www.example.com" appBase="www" unpackWARs="true" autoDeploy="true">
    2    <!-- 其他配置 -->
    3</Host>
    4
    5<Host name="bbs.example.com" appBase="bbs" unpackWARs="true" autoDeploy="true">
    6    <!-- 其他配置 -->
    7</Host>
    

    这里,name 属性是虚拟主机的域名,appBase 是指向 Web 应用程序目录的路径。

3:虚拟主机访问测试

为了测试虚拟主机是否正确配置,你需要确保你的 DNS 设置或本地 hosts 文件已经正确映射了虚拟主机的域名到你的 Tomcat 服务器 IP 地址。

  1. 修改 hosts 文件: 在你的操作系统中,找到 hosts 文件并添加以下条目(以 Windows 为例):

    1127.0.0.1   www.example.com
    2127.0.0.1   bbs.example.com
    

    注意:这里的 IP 地址应该是你的 Tomcat 服务器的实际 IP 地址,如果是本地测试,则使用 127.0.0.1

  2. 重启 Tomcat: 关闭并重新启动 Tomcat 服务,让新的配置生效。

  3. 测试访问 : 打开浏览器,输入虚拟主机的域名 www.example.combbs.example.com,你应该能看到你之前创建的 index.html 页面。

3.2 Tomcat 优化

1. Tomcat 配置文件参数优化

优化 Tomcat 的性能主要集中在调整 JVM 参数、Connector 配置、以及一些高级配置上。下面是一些具体的优化建议:

JVM 参数

JVM 的配置对于 Tomcat 的性能至关重要,尤其是内存管理。在 bin/catalina.shbin/catalina.bat 文件中,你可以设置以下 JVM 参数:

  • Heap Size:

    • -Xms<size>: 初始堆大小。
    • -Xmx<size>: 最大堆大小。

    示例:

    1JAVA_OPTS="$JAVA_OPTS -Xms256m -Xmx1024m"
    
  • PermGen/PermSize (Java 8 以前):

    • -XX:PermSize=<size>: 初始永久代大小。
    • -XX:MaxPermSize=<size>: 永久代最大大小。

    Java 8 及以后版本使用 Metaspace,因此需要调整 -XX:MetaspaceSize-XX:MaxMetaspaceSize

  • GC Tuning:

    • -XX:+UseConcMarkSweepGC: 使用 CMS 垃圾回收器。
    • -XX:+CMSIncrementalMode: 使 CMS 在低负载时进行增量式回收。
    • -XX:+UseParNewGC: 使用 ParNew 作为年轻代的垃圾回收器。
  • Thread Stack Size:

    • -Xss<size>: 线程栈大小。
Connector 配置

conf/server.xml 中,<Connector> 配置是另一个关键区域,需要调整以适应高并发环境:

  • 线程池:

    • maxThreads: 最大线程数。
    • minSpareThreads: 最小空闲线程数。
    • maxConnections: 最大连接数。

    示例:

    1<Connector port="8080" protocol="HTTP/1.1"
    2           maxThreads="200" minSpareThreads="25" maxConnections="1024"
    3           connectionTimeout="20000" redirectPort="8443" />
    
  • KeepAlive:

    • enableLookups: 是否启用 DNS 查找(禁用可提高性能)。
    • useBodyEncodingForURI: 是否使用实体编码来解码 URI。
  • 压缩:

    • compression: 压缩类型。
    • compressableMimeType: 可压缩的内容类型列表。
高级配置
  • Session Persistence:

    • sessionCookiePathsessionCookieDomain 可以帮助管理和持久化会话。
  • JMX Monitoring:

    • Catalina 引擎和 StandardEngine 组件可以被配置为使用 JMX 监控,这对于性能监控和故障排除非常有帮助。
2. jmeter 压测工具

使用 Apache JMeter 进行压力测试是评估 Tomcat 服务器性能的一种有效方式。以下是使用 JMeter 的步骤:

  1. 下载和安装 JMeter: 从官方网站下载 JMeter,并解压缩到一个目录。

  2. 创建测试计划 : 启动 JMeter,通过右键点击 Test Plan -> Add -> Threads(Users) -> Thread Group 来创建线程组。

  3. 配置 HTTP 请求 : 在线程组内,添加 HTTP Request 采样器,输入你的 URL 和其他请求参数。

  4. 添加监听器 : 添加 View Results Tree, Summary Report, Aggregate ReportResponse Time Graph 等监听器,以查看测试结果。

  5. 配置线程数和迭代次数 : 在线程组中,设置 Number of Threads (users), Ramp-Up Period (in seconds)Loop Count 来模拟用户行为。

  6. 执行测试: 点击绿色的运行按钮开始测试。测试结束后,检查监听器中的结果。

  7. 分析结果: 根据测试结果,查看平均响应时间、吞吐量、错误率等指标,判断系统是否能够承受预期的负载。

通过以上步骤,你可以根据测试结果对 Tomcat 的配置进行相应的调整,以达到最优的性能。这可能需要多次迭代和优化过程。

相关推荐
苹果醋317 分钟前
React源码02 - 基础知识 React API 一览
java·运维·spring boot·mysql·nginx
Hello.Reader37 分钟前
深入解析 Apache APISIX
java·apache
了一li40 分钟前
Qt中的QProcess与Boost.Interprocess:实现多进程编程
服务器·数据库·qt
日记跟新中1 小时前
Ubuntu20.04 修改root密码
linux·运维·服务器
菠萝蚊鸭1 小时前
Dhatim FastExcel 读写 Excel 文件
java·excel·fastexcel
唐小旭1 小时前
服务器建立-错误:pyenv环境建立后python版本不对
运维·服务器·python
明 庭1 小时前
Ubuntu下通过Docker部署NGINX服务器
服务器·ubuntu·docker
BUG 4041 小时前
Linux——Shell
linux·运维·服务器
旭东怪1 小时前
EasyPoi 使用$fe:模板语法生成Word动态行
java·前端·word