本文详细介绍了Tomcat的使用与配置,包括下载安装、web应用的部署、server.xml配置详解、性能优化相关配置以及最后的服务器的监控与维护。

一、Tomcat简介

Apache Tomcat是一个开源的Servlet容器,由Apache软件基金会开发和维护。它实现了Servlet、JSP和WebSocket等Java Web规范,是运行Java Web应用程序的理想选择,Tomcat通常作为中小型Web应用的服务器,也可与Apache HTTP Server或Nginx配合使用,处理高并发场景。

二、Tomcat基本使用

1. 安装与启动

步骤1:下载Tomcat

Apache Tomcat官网下载最新版本,解压到本地目录。

步骤2:启动Tomcat

# Linux/MacOS bin目录下执行
./startup.sh

# Windows bin目录
startup.bat

步骤3:验证安装

打开浏览器访问http://localhost:8080,如果看到Tomcat欢迎页面,则安装成功。

2. 部署Web应用

将WAR文件复制到webapps目录下,Tomcat会自动解压并部署:

cp your-app.war ./webapps/

也可以手动创建应用目录结构:

webapps/
  your-app/
    WEB-INF/
      web.xml
      classes/
      lib/
    index.jsp
    ...

3. 停止Tomcat

# Linux/MacOS
./shutdown.sh

# Windows
shutdown.bat

三、server.xml配置详解

server.xml是Tomcat的核心配置文件,位于conf目录下。下面详细解析其主要配置项:

1. Server元素

根元素,表示整个Tomcat服务器实例:

<Server port="8005" shutdown="SHUTDOWN">
  ...
</Server>
  • port:关闭服务器的端口
  • shutdown:关闭服务器的命令字符串

2. Service元素

表示一个或多个Connector组件与一个Engine组件的组合:

<Service name="Catalina">
  ...
</Service>

3. Connector元素

处理客户端连接,支持HTTP、HTTPS、AJP等协议:

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />

常用属性:

  • port:监听端口
  • protocol:协议类型(HTTP/1.1或org.apache.coyote.http11.Http11NioProtocol等)
  • connectionTimeout:连接超时时间(毫秒)
  • redirectPort:当需要安全连接时重定向的端口
  • maxThreads:最大线程数
  • acceptCount:最大等待队列长度

4. Engine元素

表示Servlet引擎,处理所有Connector接收到的请求:

<Engine name="Catalina" defaultHost="localhost">
  ...
</Engine>

5. Host元素

表示虚拟主机,映射到特定域名或IP:

<Host name="localhost"  appBase="webapps"
      unpackWARs="true" autoDeploy="true">
  ...
</Host>

常用属性:

  • name:虚拟主机名
  • appBase:Web应用存放目录
  • unpackWARs:是否自动解压WAR文件
  • autoDeploy:是否自动部署应用

6. Context元素

表示一个Web应用的上下文:

<Context path="/your-app" docBase="/path/to/your-app" 
         reloadable="true" />

常用属性:

  • path:应用上下文路径
  • docBase:应用物理路径
  • reloadable:是否在类文件修改时自动重新加载

四、Tomcat性能优化配置

1. 优化Connector配置

使用NIO2协议和合理的线程池配置:

<Connector port="8080" protocol="org.apache.coyote.http11.Http11Nio2Protocol"
           maxThreads="1000" minSpareThreads="100"
           maxConnections="8192" acceptCount="100"
           connectionTimeout="20000" />

2. JVM参数优化

编辑bin/catalina.sh(Linux/MacOS)或bin/catalina.bat(Windows),添加以下JVM参数:

JAVA_OPTS="-server -Xms2048m -Xmx2048m -Xss512k 
           -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m
           -XX:+UseG1GC -XX:MaxGCPauseMillis=200"

参数说明:

  • -Xms:初始堆大小
  • -Xmx:最大堆大小
  • -Xss:线程栈大小
  • -XX:MetaspaceSize:元空间初始大小
  • -XX:MaxMetaspaceSize:元空间最大大小
  • -XX:+UseG1GC:使用G1垃圾回收器
  • -XX:MaxGCPauseMillis:最大GC停顿时间

3. 禁用不必要的服务

注释掉不需要的Connector和Listener,减少资源消耗:

<!-- 禁用AJP连接器 -->
<!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> -->

4. 调整线程池配置

使用独立线程池提高性能:

<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
          maxThreads="1000" minSpareThreads="100"
          maxIdleTime="60000" prestartminSpareThreads="true"
          maxQueueSize="100" />

<Connector port="8080" protocol="HTTP/1.1"
           executor="tomcatThreadPool"
           connectionTimeout="20000"
           redirectPort="8443" />

5. 启用压缩

对文本内容启用Gzip压缩,减少传输数据量:

<Connector port="8080" protocol="HTTP/1.1"
           compression="on"
           compressionMinSize="2048"
           noCompressionUserAgents="gozilla, traviata"
           compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript" />

6. 配置HTTPS

为提高安全性,配置HTTPS连接:

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
           maxThreads="150" SSLEnabled="true">
    <SSLHostConfig>
        <Certificate certificateFile="conf/localhost-rsa.crt"
                     certificateKeyFile="conf/localhost-rsa.key"
                     type="RSA" />
    </SSLHostConfig>
</Connector>

五、监控与维护

1. 启用JMX监控

bin/catalina.sh中添加以下配置:

JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote 
           -Dcom.sun.management.jmxremote.port=9010 
           -Dcom.sun.management.jmxremote.authenticate=false 
           -Dcom.sun.management.jmxremote.ssl=false"

2. 使用工具监控

  • JConsole:JDK自带的监控工具
  • VisualVM:功能更强大的JVM监控工具
  • Prometheus + Grafana:高级监控与可视化方案



← 上一篇 AngularJS知识快速入门(上)
记得点赞、关注、收藏哦!
下一篇 JUC小册——公平锁和非公平锁 →
Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐