Tomcat服务配置与性能优化

Tomcat服务配置与性能优化

慕课网 - 程序员的梦工厂

DXing Blog

Github Copoilot AI 文档


第1章 概述

1-1 课程介绍

  • Tomcat 概述以及运行原理
  • Tomcat 环境搭建
  • Tomcat 配置详情
    • Tomcat 单点登录
    • Tomcat 多域名访问
    • Tomcat 性能调优

1-2 ~ 1-4概念和原理

Tomcat 简介

  • Apache软件基金会
  • 开源软件 Tomcat是一个开源的Servlet容器和Web服务器
  • 中小型应用服务器

Tomcat原理

  • Connector核心组件
    • 接受客户端连接
    • 加工处理客户端请求
  • Container核心组件
    • 所有的子容器的父接口
    • 责任链设计模式
    • 处理请求的核心组件
  • 其他

第2章 Tomcat环境安装

2-1 Tomcat Windows 环境安装

Windows 搭建运行基础环境(JDK 1.8)

  • Java JDK8 官方下载 Tips:JDK1.8 等于 JDK8
  • 现阶段 Windows 电脑默认直接选择64位安装包 JDK8->Windows->x64 Installer(jdk-8u441-windows-x64.exe) 下载后直接安装即可
  • 安装好测试JDK环境是否安装成功
    1
    2
    # 检查java环境变量是否配置成功
    java -version
  • 如果没有配置不成功,则去配置环境变量
    • 右键计算机->属性->高级系统设置->环境变量->系统变量->新建
      • 变量名:JAVA_HOME
      • 变量值:JDK 安装目录(如:C:\Program Files\Java\jdk1.8.0_441)
    • 在系统变量中找到 Path 变量,点击编辑,在变量值最后添加:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
      • 注意:变量值之间用分号隔开,添加时注意不要删除原有的变量值

Windows 安装 Tomcat 9 服务器

  • Tomcat9 官方下载
  • 现阶段 Windows 电脑默认直接选择64位安装包 Core->64-bit Windows zip 下载后直接解压即可
  • 解压后,进入bin目录,双击 startup.bat 文件即可启动 Tomcat 服务器
  • 启动后日志出现乱码:由于 Tomcat 默认使用的编码是 UTF-8,而中国国内的系统默认简体中文是 GB2312,所以会出现乱码
    • 解决方法:在 conf 目录下找到 logging.properties 文件,修改以下代码
      1
      # 查找批量修改 UTF-8 替换成 GB2312

2-2 Tomcat Linux 环境安装

Linux 搭建运行基础环境(JDK 1.8)

  • Java JDK8 官方下载 Tips:JDK1.8 等于 JDK8
  • 现阶段 Linux 电脑默认直接选择64位安装包 JDK8->Linux->jdk-8u441-linux-x64.tar.gz 下载后直接解压即可
    1
    2
    3
    4
    5
    6
    # 创建 java 目录
    mkdir /usr/local/java
    # 进入 java 目录
    cd /usr/local/java
    # 解压 JDK 压缩包
    tar -zxvf jdk-8u441-linux-x64.tar.gz
  • 解压成功后则去配置环境变量
    • 编辑 /etc/profile 文件,在最下面添加以下代码 Tips:这里下面的代码跟原视频有点出入 少了花括号,如有问题可以看原视频
      1
      2
      3
      4
      5
      # 配置 JAVA_HOME 和 CLASSPATH 环境变量
      export JAVA_HOME=/usr/local/jdk1.8.0_441
      export JRE_HOME=$JAVA_HOME/jre
      export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
      export PATH=$PATH:$JAVA_HOME/bin
    • 使配置生效:
      1
      source /etc/profile
  • 安装好测试 JDK 环境是否安装成功
    1
    2
    # 检查java环境变量是否配置成功
    java -version

Linux 安装 Tomcat 9 服务器

  • Tomcat9 官方下载
  • 现阶段 Linux 电脑默认直接选择64位安装包 Core->tar.gz 下载后直接解压即可
    1
    2
    3
    4
    5
    6
    # 创建 tomcat 目录
    mkdir /usr/local/tomcat
    # 进入 java 目录
    cd /usr/local/tomcat
    # 解压 JDK 压缩包
    tar -zxvf apache-tomcat-9.0.1.tar.gz
  • 解压后,进入bin目录,双击 ./startup.sh 文件即可启动 Tomcat 服务器
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    # 进入 /usr/local/tomcat/bin 目录
    cd /usr/local/tomcat/bin
    # 启动 Tomcat
    ./startup.sh
    # 进入 /usr/local/tomcat/logs 目录
    cd /usr/local/tomcat/logs
    # 查看 Tomcat 启动日志
    tail -f catalina.out
    # 确认启动成功后可以 访问 ip地址:8080 端口
    # 查看 Tomcat 进程
    ps -ef | grep tomcat
    # 进入 /usr/local/tomcat/bin 目录 关闭 Tomcat 进程
    /usr/local/tomcat/bin/shutdown.sh

2-x Tomcat 目录结构解释

  • bin:存放启动和关闭 Tomcat 的脚本文件
  • conf:Tomcat 的配置文件目录
  • lib:Tomcat 运行所需要的 jar 包
  • logs:Tomcat 日志目录
  • webapps:Tomcat 部署应用的目录
  • work:Tomcat 工作目录,存放编译后的 JSP 文件
  • temp:Tomcat 临时文件目录

2-x Linux 云服务器可以直接安装宝塔进行安装 比较简单

第三章 Tomcat常用配置项修改

3-1 修改 tomcat 端口号

  • 端口范围:0-65535
  • Linux 修改 /usr/local/tomcat/conf/server.xml 文件
    1
    2
    3
    <Connector port="8080" protocol="HTTP/1.1"
    connectionTimeout="20000"
    redirectPort="8443" />
  • Windows 修改 C:\Program Files\apache-tomcat-9.0.1\conf\server.xml 文件
    1
    2
    3
    <Connector port="8080" protocol="HTTP/1.1"
    connectionTimeout="20000"
    redirectPort="8443" />
  • 修改端口号后,重启 Tomcat 服务器

3-2 修改内存

  • Tomcat 默认内存大小为 512MB
  • Linux 修改 /usr/local/tomcat/bin/catalina.sh 文件
    1
    2
    # 设置最大内存为 1024MB
    export CATALINA_OPTS="-Xms1024m -Xmx1024m"
  • Windows 修改 C:\Program Files\apache-tomcat-9.0.1\bin\catalina.bat 文件
    1
    2
    # 设置最大内存为 1024MB
    set CATALINA_OPTS=-Xms1024m -Xmx1024m
  • 修改内存后,重启 Tomcat 服务器

内存模型

  • 堆内存:存放对象实例和数组
  • 栈内存:存放局部变量和方法调用
  • 静态内存:存放静态变量和方法
  • 本地内存:存放本地方法的变量和方法

内存溢出

  • OutOfMemoryError: Java heap space 异常:表示 Java 堆内存溢出,解决方法是增加堆内存的大小

    • 解决方法:增加 JVM 的最大内存限制
    • 例如:设置最大内存为 1024MB,最小内存为 512MB
      • -Xms512m:设置最小内存为 512MB
      • -Xmx1024m:设置最大内存为 1024MB
  • OutOfMemoryError: PermGen space 异常:表示方法区内存溢出,解决方法是增加 PermGen 空间的大小

    • -XX:PermSize=128m:设置初始大小为 128MB
    • -XX:MaxPermSize=256m:设置最大大小为 256MB
    • 例如:设置 PermGen 空间的初始大小为 128MB,最大大小为 256MB
      1
      2
      3
      4
      5
      # Linux 修改 /usr/local/tomcat/bin/catalina.sh 文件
      export CATALINA_OPTS="-Xms1024m -Xmx1024m -XX:PermSize=128m -XX:MaxPermSize=256m"

      # Windows 修改 C:\Program Files\apache-tomcat-9.0.1\bin\catalina.bat 文件
      set CATALINA_OPTS=-Xms1024m -Xmx1024m -XX:PermSize=128m -XX:MaxPermSize=256m
  • OutOfMemoryError: GC overhead limit exceeded 异常:表示垃圾回收器工作过于频繁,导致应用程序无法正常运行,解决方法是增加堆内存的大小

    • 解决方法:增加 JVM 的最大内存限制
    • 例如:设置最大内存为 2048MB,最小内存为 1024MB
      • -Xms1024m:设置最小内存为 1024MB
      • -Xmx2048m:设置最大内存为 2048MB
  • OutOfMemoryError: Unable to create new native thread 异常:表示系统无法创建新的线程,解决方法是增加系统的最大线程数

    • 解决方法:增加系统的最大线程数
    • 例如:设置最大线程数为 2000
      1
      2
      3
      4
      5
      # Linux 修改 /etc/security/limits.conf 文件
      * soft nproc 2000
      * hard nproc 2000

      # Windows 修改注册表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters\MaxMpxCt 的值为 2000
  • OutOfMemoryError: Requested array size exceeds VM limit 异常:表示请求的数组大小超过了 JVM 的限制,解决方法是增加 JVM 的最大内存限制

    • 解决方法:增加 JVM 的最大内存限制
    • 例如:设置最大内存为 4096MB,最小内存为 2048MB
      • -Xms2048m:设置最小内存为 2048MB
      • -Xmx4096m:设置最大内存为 4096MB
  • StackOverflowError 异常:表示栈内存溢出,解决方法是增加栈内存的大小

    • 解决方法:增加 JVM 的栈内存限制
    • 例如:设置栈内存为 1024KB
      1
      2
      3
      4
      5
      # Linux 修改 /usr/local/tomcat/bin/catalina.sh 文件
      export CATALINA_OPTS="-Xss1024k"

      # Windows 修改 C:\Program Files\apache-tomcat-9.0.1\bin\catalina.bat 文件
      set CATALINA_OPTS=-Xss1024k

3-3 热部署

  • Tomcat 支持热部署,即在不重启服务器的情况下,更新应用程序的代码和配置文件
  • 热部署的原理是:Tomcat 会监控应用程序的代码和配置文件的变化,当发现变化时,会自动重新加载应用程序
  • 热部署的优点是:可以快速更新应用程序,减少停机时间
  • 热部署的缺点是:可能会导致内存泄漏和性能下降
  • 热部署的实现方式有两种:
    • 通过修改 conf/context.xml 文件中的 reloadable 属性来实现热部署
      1
      <Context reloadable="true" />
    • 通过修改 conf/web.xml 文件中的 reloadable 属性来实现热部署
      1
      <web-app reloadable="true" />
    • 通过在 conf/server.xml 文件中 Host标签 添加 Context标签和属性 reloadable="true" 来实现热部署
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      <Host name="localhost" appBase="webapps"
      unpackWARs="true" autoDeploy="true">
      <Context reloadable="true" />

      <!-- debug 日志级别 -->
      <!-- path 项目路径 -->
      <!-- docBase 项目目录或者 WAR 包 -->
      <!-- reloadable 是否启动热部署 默认false -->
      <!-- unpackWARs 是否解压 WAR 包 -->
      <!-- autoDeploy 是否自动部署 -->
      <!-- workDir 工作目录 -->
      <!-- tempDir 临时目录 -->
      <!-- logsDir 日志目录 -->

      <!-- 或者指定单个项目目录 -->
      <!-- 这里的 docBase属性的myapp是目录或者 加war/jar包会自动根据path访问名在webapps下面编译成目录 -->
      <!-- 测试过单单目录名不能自动识别为 war/jar 包 -->
      <!-- war (Web Application Archive) Web应用程序 -->
      <!-- jar (Java Archive) Java归档文件 -->
      <!-- jar包是一个压缩文件,war包是一个web应用程序的压缩文件,war包可以直接部署到web服务器上 -->
      <!-- 测试完 目录和war包 才能直接在浏览器进行访问 jar包不行 -->
      <!-- war/jar 包相当是一个固定的版本, 解压出来后的目录文件可以修改生效,怎么修改都不会影响原来的包文件 -->
      <!-- 原视频中的演示 myapp会自动识别为 目录或者war/jar包 实际测试不行,不知道为什么 -->
      <Context debug="0" path="/myapp" docBase="/usr/local/tomcat/webapps/myapp" reloadable="true" />
      <!-- 或者指定单个项目 WAR 包 -->
      <Context path="/myapp" docBase="/usr/local/tomcat/webapps/myapp.war" reloadable="true" />
      <!-- 或者指定单个项目目录和 WAR 包 -->
      <Context path="/myapp" docBase="/usr/local/tomcat/webapps/myapp.war" reloadable="true" unpackWARs="true" autoDeploy="true" />
      <!-- 或者指定单个项目目录和 WAR 包和解压目录 -->
      <Context path="/myapp" docBase="/usr/local/tomcat/webapps/myapp.war" reloadable="true" unpackWARs="true" autoDeploy="true" workDir="/usr/local/tomcat/work/myapp" />
      <!-- 或者指定单个项目目录和 WAR 包和解压目录和临时目录 -->
      <Context path="/myapp" docBase="/usr/local/tomcat/webapps/myapp.war" reloadable="true" unpackWARs="true" autoDeploy="true" workDir="/usr/local/tomcat/work/myapp" tempDir="/usr/local/tomcat/temp/myapp" />
      <!-- 或者指定单个项目目录和 WAR 包和解压目录和临时目录和日志目录 -->
      <Context path="/myapp" docBase="/usr/local/tomcat/webapps/myapp.war" reloadable="true" unpackWARs="true" autoDeploy="true" workDir="/usr/local/tomcat/work/myapp" tempDir="/usr/local/tomcat/temp/myapp" logsDir="/usr/local/tomcat/logs/myapp" />
      <!-- 或者指定单个项目目录和 WAR 包和解压目录和临时目录和日志目录和配置文件 -->
      </Host>
    • 通过在 conf\Catalina\localhost 创建 xml 文件 一对一管理项目配置 来实现热部署 【推荐使用】
      • 例如:创建 myapp.xml 文件,这个文件的文件名就是访问路径,下面的内容不能添加访问路径,内容如下
        1
        2
        3
        <!-- <?xml 测试过这一行可以去掉, 主要是定义字符编码 -->
        <?xml version="1.0" encoding="UTF-8"?>
        <Context reloadable="true" docBase="/usr/local/tomcat/webapps/myapp" />
  • 热部署的注意事项:
    • 热部署只支持 JSP 文件的热部署,不支持 Java 类文件的热部署
    • 热部署可能会导致内存泄漏和性能下降,建议在开发环境中使用,在生产环境中使用时要谨慎
    • 热部署可能会导致应用程序的状态不一致,建议在更新应用程序之前备份应用程序的状态
    • 热部署可能会导致应用程序的性能下降,建议在更新应用程序之后进行性能测试

3-4 数据库连接池与数据源

  • 数据库连接池:是一个管理数据库连接的对象池,用于提高数据库连接的性能和效率
  • 数据源:是一个提供数据库连接的对象,用于简化数据库连接的管理和使用
  • JDBC操作数据库的步骤:
    1. 加载数据库驱动
    2. 创建数据库连接
    3. 创建数据库操作对象
    4. 执行数据库操作
    5. 关闭数据库连接
  • JDBC操作数据库的代码示例:
    1
    2
    3
    // 加载数据库驱动
    Class.forName("com.mysql.jdbc.Driver");
    // 创建数据库连接

3-5 实在是看不下去,看不懂这块

第4章 web管理

Tomcat 实现web管理

  • 管理界面功能简述
  • 使用tomcat管理界面发布项目

第5章 Tomcat单点登录

  • 什么是单点登录
    • 单点登录(Single Sign On),简称为 SSO,是一种身份验证过程,允许用户在多个应用程序中使用同一组凭据进行身份验证。
    • 目前比较流行的企业业务整合的解决方案之一。单点登录协议有 OAuth、SAML 和 OpenID Connect。
  • Tomcat单点登录的实现原理
  • 单点登录的应用场景
  • 如何配置Tomcat单点登录
  • CAS 认证 看视频,这段也是看不懂

多域名访问

  • 看视频吧

第6章 Tomcat安全配置