1. 为什么选择apt安装Tomcat?
在Ubuntu环境下部署Java Web应用时,Tomcat始终是大多数开发者的首选。相比手动下载压缩包配置环境变量的传统方式,使用apt包管理器安装具有几个显著优势:
- 自动解决依赖:apt会自动处理libservlet3.1-java等Java EE依赖项
- 标准化路径:所有文件按Linux规范存放在/etc/tomcat9、/var/lib/tomcat9等目录
- 服务化管理:内置systemd服务脚本,支持
systemctl start tomcat9等操作 - 版本同步:与Ubuntu官方仓库保持版本兼容性更新
提示:生产环境建议使用OpenJDK 11+,这是目前Tomcat 9/10的官方推荐JDK版本
2. 安装前的环境准备
2.1 更新软件源索引
首先确保包列表是最新的:
bash复制sudo apt update
2.2 安装Java环境
Tomcat需要JDK支持,推荐安装OpenJDK:
bash复制sudo apt install openjdk-11-jdk
验证安装:
bash复制java -version
# 应显示类似:openjdk version "11.0.22" 2024-01-16
3. 核心安装步骤详解
3.1 执行apt安装命令
安装Tomcat 9(Ubuntu 22.04 LTS默认版本):
bash复制sudo apt install tomcat9 tomcat9-admin
关键组件说明:
tomcat9:核心服务程序tomcat9-admin:提供管理界面功能tomcat9-docs:可选文档包tomcat9-examples:可选示例程序
3.2 验证服务状态
检查服务是否自动启动:
bash复制sudo systemctl status tomcat9
正常状态应显示"active (running)"。如果没有自动启动:
bash复制sudo systemctl enable --now tomcat9
3.3 防火墙配置(如有需要)
如果使用UFW防火墙,放行8080端口:
bash复制sudo ufw allow 8080/tcp
4. 安装后的关键配置
4.1 管理界面访问配置
编辑用户权限文件:
bash复制sudo nano /etc/tomcat9/tomcat-users.xml
在<tomcat-users>标签内添加:
xml复制<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="yourname" password="yourpass" roles="manager-gui,admin-gui"/>
4.2 调整JVM内存参数
编辑环境配置文件:
bash复制sudo nano /etc/default/tomcat9
修改JAVA_OPTS(示例配置2GB内存):
bash复制JAVA_OPTS="-Djava.awt.headless=true -Xms1024m -Xmx2048m"
5. 服务管理常用命令
| 操作 | 命令 | 说明 |
|---|---|---|
| 启动服务 | sudo systemctl start tomcat9 |
立即启动 |
| 停止服务 | sudo systemctl stop tomcat9 |
立即停止 |
| 重启服务 | sudo systemctl restart tomcat9 |
完全重启 |
| 重载配置 | sudo systemctl reload tomcat9 |
不中断服务 |
| 开机启动 | sudo systemctl enable tomcat9 |
设置自启 |
| 禁用自启 | sudo systemctl disable tomcat9 |
取消自启 |
6. 目录结构解析
关键路径说明:
/var/lib/tomcat9/:Web应用部署目录webapps/:自动部署的WAR包位置work/:JSP编译缓存
/etc/tomcat9/:配置文件中心server.xml:主配置文件web.xml:全局web配置
/var/log/tomcat9/:日志目录catalina.out:标准输出日志localhost_access_log.*.txt:访问日志
7. 常见问题排查指南
7.1 端口冲突处理
如果8080端口被占用,修改配置文件:
bash复制sudo nano /etc/tomcat9/server.xml
查找并修改Connector端口:
xml复制<Connector port="8080" protocol="HTTP/1.1" ... />
7.2 权限问题解决
部署应用时遇到权限拒绝:
bash复制sudo chown -R tomcat:tomcat /var/lib/tomcat9/webapps/
7.3 内存溢出处理
在/var/log/tomcat9/catalina.out中发现OutOfMemoryError时:
- 检查当前内存使用:
bash复制ps aux | grep tomcat
- 调整/etc/default/tomcat9中的Xmx参数
- 添加内存溢出时生成堆转储:
bash复制JAVA_OPTS="$JAVA_OPTS -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/tomcat9/"
8. 进阶配置技巧
8.1 启用HTTPS支持
- 生成自签名证书(生产环境应使用CA签发证书):
bash复制sudo keytool -genkey -alias tomcat -keyalg RSA -keystore /etc/tomcat9/keystore.jks
- 修改server.xml取消注释并配置SSL Connector:
xml复制<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="/etc/tomcat9/keystore.jks"
type="RSA" />
</SSLHostConfig>
</Connector>
8.2 多实例部署方案
创建新实例:
bash复制sudo cp -r /etc/tomcat9 /etc/tomcat9-instance2
sudo mkdir -p /var/lib/tomcat9-instance2/{webapps,work,temp}
修改新实例的server.xml中的所有端口号(+10000避免冲突):
xml复制<Server port="18005" shutdown="SHUTDOWN">
<Connector port="18080" protocol="HTTP/1.1" ... />
<Connector port="18443" protocol="org.apache.coyote.http11.Http11NioProtocol" ... />
创建新的systemd服务文件:
bash复制sudo cp /lib/systemd/system/tomcat9.service /etc/systemd/system/tomcat9-instance2.service
修改新服务文件中的环境变量:
ini复制Environment="CATALINA_BASE=/var/lib/tomcat9-instance2"
Environment="CATALINA_HOME=/usr/share/tomcat9"
9. 性能优化建议
- 连接器优化(/etc/tomcat9/server.xml):
xml复制<Connector
executor="tomcatThreadPool"
acceptCount="100"
maxConnections="10000"
maxThreads="200"
minSpareThreads="10"
compression="on"
compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/css,application/javascript"/>
- 配置线程池:
xml复制<Executor
name="tomcatThreadPool"
namePrefix="catalina-exec-"
maxThreads="200"
minSpareThreads="10"/>
- JVM调优参数示例(/etc/default/tomcat9):
bash复制JAVA_OPTS="-server -Xms2G -Xmx2G -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:ParallelGCThreads=4 -XX:ConcGCThreads=2"
10. 日志管理实践
10.1 日志轮转配置
编辑logrotate配置:
bash复制sudo nano /etc/logrotate.d/tomcat9
示例配置:
code复制/var/log/tomcat9/*.log {
daily
missingok
rotate 30
compress
delaycompress
notifempty
create 640 tomcat adm
sharedscripts
postrotate
systemctl reload tomcat9 > /dev/null
endscript
}
10.2 访问日志定制
修改server.xml中的Valve配置:
xml复制<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs"
prefix="access_log"
suffix=".txt"
pattern="%h %l %u %t "%r" %s %b %D"
fileDateFormat="yyyy-MM-dd"/>
常用pattern参数:
%h:客户端IP%l:远程逻辑用户名(通常为-)%u:认证用户名%t:时间戳%r:请求行%s:状态码%b:响应字节数%D:处理时间(毫秒)