ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Linux下Tomcat部署与优化全指南

Linux下Tomcat部署与优化全指南

1. 项目概述

在Linux系统上部署Tomcat是Java Web开发者的必备技能之一。作为一款开源的轻量级应用服务器,Tomcat因其稳定性和高效性成为众多企业级应用的首选运行环境。不同于Windows平台的图形化安装,Linux下的Tomcat部署更考验开发者对命令行操作的熟练程度。

我曾在多个生产环境中部署过不同版本的Tomcat,从早期的7.x到现在的10.x版本。每次部署都会遇到一些新问题,也积累了不少实战经验。本文将基于CentOS/RHEL系统,详细讲解从JDK配置到Tomcat安全优化的完整部署流程,特别适合刚接触Linux系统管理的Java开发者参考。

2. 环境准备与依赖安装

2.1 系统要求检查

在开始安装前,建议先检查系统是否符合Tomcat运行的基本要求:

  • 内存:至少1GB(生产环境建议4GB以上)
  • 磁盘空间:至少100MB可用空间
  • 操作系统:CentOS/RHEL 7/8或Ubuntu 18.04/20.04

可以通过以下命令检查系统资源:

free -h # 查看内存 df -h # 查看磁盘空间 cat /etc/*release # 查看系统版本

2.2 JDK安装与配置

Tomcat运行需要Java环境支持,推荐安装OpenJDK 8或11:

# CentOS/RHEL系统 sudo yum install -y java-1.8.0-openjdk-devel # Ubuntu系统 sudo apt-get install -y openjdk-8-jdk

安装完成后验证Java版本:

java -version

注意:如果系统已安装多个Java版本,需要通过alternatives --config java命令设置默认版本。

2.3 创建专用运行用户

为安全考虑,不建议直接使用root用户运行Tomcat:

sudo groupadd tomcat sudo useradd -s /bin/false -g tomcat -d /opt/tomcat tomcat

3. Tomcat安装与配置

3.1 下载与解压

从Apache官网获取最新稳定版(以10.0.23为例):

cd /tmp wget https://downloads.apache.org/tomcat/tomcat-10/v10.0.23/bin/apache-tomcat-10.0.23.tar.gz sudo tar xzvf apache-tomcat-10.0.23.tar.gz -C /opt sudo ln -s /opt/apache-tomcat-10.0.23 /opt/tomcat

3.2 目录权限设置

sudo chown -R tomcat:tomcat /opt/tomcat sudo chmod -R u+x /opt/tomcat/bin

3.3 基础配置调整

编辑/opt/tomcat/conf/server.xml优化连接器配置:

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" maxThreads="200" minSpareThreads="10" enableLookups="false" acceptCount="100" compression="on" compressionMinSize="2048" compressableMimeType="text/html,text/xml,text/css,application/javascript"/>

4. 服务管理与优化

4.1 创建Systemd服务单元

创建/etc/systemd/system/tomcat.service文件:

[Unit] Description=Apache Tomcat Web Application Container After=syslog.target network.target [Service] Type=forking User=tomcat Group=tomcat Environment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid Environment=CATALINA_HOME=/opt/tomcat Environment=CATALINA_BASE=/opt/tomcat ExecStart=/opt/tomcat/bin/startup.sh ExecStop=/opt/tomcat/bin/shutdown.sh Restart=on-failure [Install] WantedBy=multi-user.target

启用并启动服务:

sudo systemctl daemon-reload sudo systemctl enable tomcat sudo systemctl start tomcat

4.2 内存参数优化

编辑/opt/tomcat/bin/setenv.sh(需新建):

export JAVA_OPTS="-server -Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m"

4.3 访问日志格式化

修改/opt/tomcat/conf/server.xml中的AccessLogValve:

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b %D" />

5. 安全加固措施

5.1 禁用管理界面

生产环境建议删除或重命名以下目录:

sudo rm -rf /opt/tomcat/webapps/docs sudo rm -rf /opt/tomcat/webapps/examples sudo mv /opt/tomcat/webapps/manager /opt/tomcat/webapps/manager.bak sudo mv /opt/tomcat/webapps/host-manager /opt/tomcat/webapps/host-manager.bak

5.2 修改关闭端口与命令

编辑/opt/tomcat/conf/server.xml:

<Server port="8005" shutdown="自定义复杂字符串">

5.3 配置防火墙规则

sudo firewall-cmd --permanent --add-port=8080/tcp sudo firewall-cmd --reload

6. 常见问题排查

6.1 端口冲突问题

如果启动时报端口占用错误:

sudo netstat -tulnp | grep 8080 kill -9 占用进程PID

6.2 内存溢出处理

在catalina.out中出现OutOfMemoryError时:

  1. 检查setenv.sh内存参数是否合理
  2. 添加-XX:+HeapDumpOnOutOfMemoryError参数生成dump文件
  3. 使用jvisualvm或MAT分析内存泄漏

6.3 应用部署问题

部署WAR包后无法访问:

  1. 检查webapps目录下是否生成对应目录
  2. 查看logs/catalina.out中的部署日志
  3. 确认应用自身的web.xml配置正确

7. 性能监控与维护

7.1 启用JMX监控

修改setenv.sh添加:

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

7.2 日志轮转配置

创建/etc/logrotate.d/tomcat文件:

/opt/tomcat/logs/catalina.out { copytruncate daily rotate 30 compress missingok size 50M }

7.3 定期维护建议

  1. 每月检查一次磁盘空间使用情况
  2. 每季度更新一次Tomcat小版本
  3. 每年评估一次大版本升级必要性
  4. 定期备份conf和webapps目录

在实际生产环境中,我通常会为每个Tomcat实例配置独立的运行用户,并通过cgroup限制其资源使用。对于高并发场景,建议在前端加装Nginx做负载均衡和静态资源缓存。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进