ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Linux环境下Tomcat部署与优化全指南

Linux环境下Tomcat部署与优化全指南 1. 为什么选择Linux环境部署Tomcat在开始动手之前我们需要先理解为什么大多数Java开发者会选择在Linux上运行Tomcat。作为在运维岗位摸爬滚打多年的老手我见过太多团队在这个基础环节栽跟头。Linux系统相比Windows有几个不可替代的优势首先内存管理机制更高效同样的硬件配置下Linux能支撑更高的并发量。去年我们做过实测在一台4核8G的服务器上Linux下的Tomcat9比Windows Server 2019多处理了23%的请求。其次Linux没有图形界面开销所有资源都能用于服务处理这对生产环境至关重要。重要提示虽然Windows也能运行Tomcat但生产环境强烈建议使用Linux发行版。CentOS和Ubuntu Server是最常见的选择本文将以CentOS 7为例。当前主流Tomcat版本的选择也值得讨论Tomcat 9.x最稳定的生产版本推荐Tomcat 10.x支持Jakarta EE 9的新特性Tomcat 11.x最新版本适合尝鲜对于新手我建议从Tomcat 9.0.xx开始等熟悉后再考虑升级。最近帮客户排查过一个典型问题他们直接上了Tomcat 10结果发现Spring Boot 2.x不兼容不得不回退版本。2. 准备工作与环境检查2.1 系统需求确认在安装前请先登录你的Linux服务器执行以下命令检查基础环境# 查看系统版本 cat /etc/redhat-release # CentOS lsb_release -a # Ubuntu # 检查Java版本 java -version # 内存和磁盘空间 free -h df -h最低配置要求内存≥2GB生产环境建议4G磁盘≥5GB可用空间JavaJDK 8或11推荐OpenJDK如果发现没有安装Java用以下命令安装OpenJDK# CentOS sudo yum install -y java-11-openjdk-devel # Ubuntu sudo apt install -y openjdk-11-jdk2.2 防火墙和SELinux配置这是新手最容易忽略的环节。去年有家创业公司找到我他们的Tomcat始终无法从外部访问最后发现是防火墙没开8080端口。# 开放8080端口 sudo firewall-cmd --permanent --add-port8080/tcp sudo firewall-cmd --reload # 临时关闭SELinux生产环境需谨慎 sudo setenforce 0如果要永久禁用SELinux不推荐生产环境sudo vi /etc/selinux/config # 修改为 SELINUXdisabled3. Tomcat安装的三种方式及对比3.1 使用yum/apt安装最简单适合快速搭建测试环境# CentOS sudo yum install -y tomcat tomcat-webapps tomcat-admin-webapps # Ubuntu sudo apt install -y tomcat9优点自动处理依赖关系自动配置服务启动项缺点版本可能较旧文件目录结构与非包管理安装不同3.2 手动下载二进制包推荐生产环境这是我最推荐的方式能获得最新版本且完全可控# 下载建议到官网获取最新链接 wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.85/bin/apache-tomcat-9.0.85.tar.gz # 解压到/opt目录 sudo tar -xzf apache-tomcat-9.0.85.tar.gz -C /opt sudo mv /opt/apache-tomcat-9.0.85 /opt/tomcat # 创建专用用户 sudo useradd -r -m -U -d /opt/tomcat -s /bin/false tomcat sudo chown -R tomcat: /opt/tomcat目录结构说明bin/: 启动/停止脚本conf/: 配置文件最重要logs/: 日志文件排查问题必看webapps/: 应用部署目录work/: JSP编译后的class文件3.3 编译安装高级用户除非有特殊需求否则不建议# 需要安装构建工具 sudo yum install -y gcc make # 下载源码包 wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.85/src/apache-tomcat-9.0.85-src.tar.gz tar -xzf apache-tomcat-9.0.85-src.tar.gz cd apache-tomcat-9.0.85-src ./configure make sudo make install4. 关键配置详解4.1 服务启动脚本配置手动安装后需要创建systemd服务文件sudo vi /etc/systemd/system/tomcat.service内容如下注意修改路径[Unit] DescriptionApache Tomcat 9 Afternetwork.target [Service] Typeforking Usertomcat Grouptomcat EnvironmentCATALINA_PID/opt/tomcat/temp/tomcat.pid EnvironmentCATALINA_HOME/opt/tomcat EnvironmentCATALINA_BASE/opt/tomcat ExecStart/opt/tomcat/bin/startup.sh ExecStop/opt/tomcat/bin/shutdown.sh RestartSec10 Restartalways [Install] WantedBymulti-user.target启用服务sudo systemctl daemon-reload sudo systemctl start tomcat sudo systemctl enable tomcat4.2 server.xml核心配置/opt/tomcat/conf/server.xml是主配置文件这几个关键参数需要调整!-- 修改连接器配置 -- Connector port8080 protocolHTTP/1.1 connectionTimeout20000 redirectPort8443 maxThreads200 minSpareThreads10 enableLookupsfalse acceptCount100 compressionon compressionMinSize2048 compressableMimeTypetext/html,text/xml,text/css,application/javascript/ !-- 取消下面注释启用管理界面 -- Valve classNameorg.apache.catalina.valves.AccessLogValve directorylogs prefixlocalhost_access_log suffix.txt pattern%h %l %u %t quot;%rquot; %s %b /生产环境安全提示默认配置的Tomcat管理界面存在安全隐患建议修改默认管理员密码限制访问IP或直接禁用管理界面4.3 内存参数调优在/opt/tomcat/bin/setenv.sh需新建中添加export CATALINA_OPTS-server -Xms512m -Xmx1024m -XX:MetaspaceSize128m -XX:MaxMetaspaceSize512m参数说明-Xms: 初始堆大小-Xmx: 最大堆大小Metaspace: JDK 8替代PermGen的内存区域5. 部署应用与日常运维5.1 部署WAR包的三种方式直接复制到webapps目录sudo cp your-app.war /opt/tomcat/webapps/通过管理界面上传需先配置用户权限使用Maven插件开发环境常用plugin groupIdorg.apache.tomcat.maven/groupId artifactIdtomcat7-maven-plugin/artifactId version2.2/version configuration urlhttp://localhost:8080/manager/text/url servertomcat-server/server path/your-app/path /configuration /plugin5.2 日志监控技巧关键日志文件catalina.out: 主日志localhost_access_log.*: 访问日志host-manager.log: 管理界面日志实时监控命令tail -f /opt/tomcat/logs/catalina.out日志分析神器# 统计500错误 grep HTTP/1.1\ 500 localhost_access_log.* | wc -l # 查看最慢的请求 awk {print $NF,$0} localhost_access_log.* | sort -nr | head -205.3 备份策略建议的备份方案# 每日完整备份 tar -czf /backup/tomcat-$(date %F).tar.gz /opt/tomcat/conf /opt/tomcat/webapps # 配置变更时立即备份 sudo cp /opt/tomcat/conf/server.xml /opt/tomcat/conf/server.xml.bak6. 常见问题排坑指南6.1 启动时报错Address already in use说明端口被占用sudo netstat -tulnp | grep 8080 kill -9 PID # 或者修改server.xml中的端口6.2 内存溢出排查生成堆转储文件jmap -dump:formatb,file/tmp/heap.hprof PID用Eclipse MAT分析内存泄漏6.3 中文乱码问题解决方案修改connector配置Connector URIEncodingUTF-8 ... /设置JVM参数-Dfile.encodingUTF-8检查应用本身的编码设置6.4 性能调优经验根据我的实战经验Tomcat性能瓶颈通常出现在数据库连接池建议用HikariCP线程池配置maxThreads不宜过大JVM垃圾回收G1GC适合多数场景监控命令# 查看线程状态 jstack PID # 内存使用情况 jstat -gcutil PID 1000 107. 安全加固建议7.1 必做的安全措施删除默认示例rm -rf /opt/tomcat/webapps/examples /opt/tomcat/webapps/docs修改shutdown端口Server port8005 shutdownYOUR_SECRET_STRING禁用不必要协议Connector SSLEnabledfalse ... /7.2 定期维护清单[ ] 检查是否有新安全补丁[ ] 清理旧日志文件logrotate[ ] 验证备份是否可用[ ] 检查磁盘空间使用情况最后分享一个实用脚本可以一键检查Tomcat健康状态#!/bin/bash TOMCAT_HOME/opt/tomcat # 检查进程 ps aux | grep -v grep | grep tomcat || echo Tomcat未运行! # 检查端口 netstat -tulnp | grep java # 检查日志错误 grep -i error $TOMCAT_HOME/logs/catalina.out | tail -20 # 检查内存使用 free -h
返回列表