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 的配置进行相应的调整,以达到最优的性能。这可能需要多次迭代和优化过程。

相关推荐
爱潜水的小L15 分钟前
自学嵌入式day34,ipc进程间通信
linux·运维·服务器
cat三三19 分钟前
java之异常
java·开发语言
浙江第二深情24 分钟前
前端性能优化终极指南
java·maven
zhuzewennamoamtf25 分钟前
Linux I2C设备驱动
linux·运维·服务器
养乐多072240 分钟前
【Java】IO流
java
俊男无期40 分钟前
超效率工作法
java·前端·数据库
中国胖子风清扬1 小时前
SpringAI和 Langchain4j等 AI 框架之间的差异和开发经验
java·数据库·人工智能·spring boot·spring cloud·ai·langchain
月明长歌1 小时前
【码道初阶】牛客TSINGK110:二叉树遍历(较难)如何根据“扩展先序遍历”构建二叉树?
java·数据结构·算法
梅尔文.古1 小时前
RaspberryPi-如何启用看门狗
linux·运维·服务器
木子欢儿1 小时前
Ubuntu 24 安装 fcitx5 + rime + 雾凇配置
linux·运维·服务器·ubuntu