资讯动态

Tomcat部署配置全指南:下载、版本匹配、server.xml与JVM调优

发布时间:2026/10/15 9:26:31 来源:尧图企业网站定制
做Java Web这行Tomcat是你迟早要亲手部署一遍的东西。哪怕2024年容器化已经这么普遍Spring Boot内嵌Tomcat老项目独立Tomcat这些场景凑到一起你依然绕不开这几个问题Tomcat从哪里下载才不会下到坑货JDK版本和Tomcat版本怎么配对server.xml里那些参数到底改什么以及为什么启动没反应、访问全是404。网上讲Tomcat的文章不少但太多还停留在Tomcat 8那套旧逻辑放到2024年的环境里照着做反而容易翻车。这篇文章我按照自己实际部署和维护项目的经验把Tomcat的下载、安装、配置从选型到排障完整过一遍版本匹配、Windows和Linux两套安装方式、核心配置、JVM调优、安全加固这些都会聊到争取给你一份能直接照抄的参考。1. 版本选型2024年别再下错Tomcat了Tomcat的下载页面打开之后第一眼就是一堆目录名8.5.x、9.0.x、10.1.x、11.0.x摆在一起很多新手直接懵掉。其实选版本的核心逻辑并不复杂就看两件事你的应用是老的javax命名空间还是新的jakarta命名空间以及你的JDK版本是什么。1.1 javax与jakarta版本切换背后的最大坑Tomcat从10.0版本开始Servlet API的包名从javax.servlet整体迁移到了jakarta.servlet。这个变更不是简单的改个名而是Java EE移交Eclipse基金会之后Oracle不允许继续用javax商标只能换成jakarta。对于开发者的直接后果就是你在Tomcat 9能正常跑的war包放到Tomcat 10里大概率报ClassNotFoundException: javax.servlet.Filter之类的错误因为整个Servlet、JSP相关类路径全部变了。所以选版本之前一定要确认自己项目的技术栈。如果你的项目还在用Spring Boot 2.x老一套JSP Servlet写业务包名全是javax开头那就老老实实上Tomcat 9.0.x别赶时髦去下载10.x。反过来如果你的项目是Spring Boot 3.x或者新工程从一开始就用jakarta命名空间直接选Tomcat 10.1.x。这一步选错了后面所有配置都是白折腾。1.2 生命周期、JDK要求与选择建议Tomcat的官方版本配套表格写得很清楚我这里结合实际使用情况给你一个简化版参考Tomcat版本Servlet规范命名空间最低JDK2024年推荐场景8.5.x3.1javaxJDK 7老到不能再老的遗留系统9.0.x4.0javaxJDK 8传统项目、Spring Boot 2.x10.1.x6.0jakartaJDK 11新项目、Spring Boot 3.x11.0.x6.1jakartaJDK 17追求新特性、长期演进Tomcat 11.0.x在2024年已经进入稳定周期但我不建议你在生产环境里抢鲜。原因很实在Tomcat 11需要JDK 17打底很多企业服务器上的JDK还停在8或者11升级成本不是Tomcat单方面能决定的。而且生态里的不少第三方库、监控组件对Tomcat 11的适配还在磨合期没必要用生产环境当小白鼠。Tomcat 10.1.x是当下最稳的长期版本生命周期和社区活跃度都有保障新项目闭眼选它基本没错。另外提醒一句官网给出的下载列表里有RC版、Alpha版这类预览版本文件名里通常带-RC或者版本号后面有alpha字样。这些是给社区测试用的生产环境装预览版等于给自己埋定时炸弹看到这些字样的目录直接跳过。1.3 不同环境的版本管理思路开发、测试、生产三套环境的Tomcat版本我的建议是保持完全一致至少大版本必须一致。你开发机上用10.1.20测试环境却是9.0.80开发时页面一切正常一上测试环境就报Servlet版本不兼容这种问题排查起来极其痛苦。版本不一致导致的诡异问题比端口冲突和内存不足更难定位因为报错信息往往指向业务代码但根因在容器版本差异上。从项目实践角度推荐的做法是把Tomcat版本和JDK版本一起锁进部署文档或者脚本里比如固定为Tomcat 10.1.26 JDK 17每次环境搭建都按这个组合来。等哪天需要升级先在一台测试机上做完整回归再逐步推。2. 下载从官方渠道拿到靠谱安装包很多人习惯在搜索引擎里搜Tomcat下载点进去却是一堆捆绑了推广软件或者旧版本的第三方站点。Tomcat这种基础中间件安装包被动手脚的后果可能是生产事故级别的所以下载这步我建议只认官方。2.1 官网入口与文件目录怎么看Apache Tomcat的官网是tomcat.apache.org页面上有Download区会根据你的选择进入对应版本的下载子目录。以Tomcat 10.1.x为例下载目录结构大致是这样的/download-10.cgi是下载页导航真正的安装包在/dist/tomcat/tomcat-10/v10.1.26/bin/这种路径下面。下载目录里会有很多文件每一行对应一个安装包需要看清楚的字段包括文件名、大小、Checksums校验文件、PGP签名文件。版本号目录里的文件新旧也会随着维护更新比如10.1.24是旧版10.1.26是当前修订版建议下载最新修订版安全修复通常只打到最新版本上。国内直接访问Apache官网下载速度有时候不太理想。这时候可以找高校或者云厂商提供的开源镜像站搜Tomcat镜像就能找到一堆从镜像站下载时注意选择和官网相同的版本目录文件名不要拿错。镜像站一般每小时同步一次如果官网刚发布新版本镜像还没刷出来等一两个小时再刷新就行。2.2 安装包类型与场景选择bin目录下常见的安装包文件类型有这么几类apache-tomcat-10.1.26-windows-x64.zipWindows解压版解压即用开发调试首选。apache-tomcat-10.1.26.tar.gzLinux/macOS解压版也是生产环境最常用的。apache-tomcat-10.1.26.exeWindows服务安装版以系统服务方式运行集成到Windows服务管理器里。apache-tomcat-10.1.26-src.tar.gz源码包只有需要定制Tomcat时才会用到绝大多数人不用下。各种-deployer包配合Maven等构建工具的部署器一般也用不上。我自己的使用习惯是Windows开发调试用zip解压版Linux生产用tar.gzWindows服务器生产环境才考虑exe服务版。不推荐用exe服务版做开发因为服务方式运行后日志输出和文件权限都跟普通进程不太一样排查问题反而多一层麻烦。2.3 下载后校验哈希避免坏包安装包下载完第一时间校验哈希这个习惯我会建议每个人都养成。下载目录里跟安装包同名但以.sha512结尾的文件就是官方发布的SHA-512校验值用本地计算出的值跟它对一下能确认文件没有在传输过程中损坏或被篡改。Windows上校验命令用自带的certutilcertutil -hashfile apache-tomcat-10.1.26-windows-x64.zip SHA512Linux上用sha512sumsha512sum apache-tomcat-10.1.26.tar.gz把输出的一长串十六进制值和官方.sha512文件里的内容对比一致就说明包没问题。这一步几十秒钟的事能省掉后面解压到一半报错启动莫名其妙缺文件这些恶心问题。3. 安装与目录结构Windows和Linux各来一遍安装Tomcat本身不难难的是装完之后能不能顺利跑起来以及跑起来之后能不能按你的预期被管理。Windows和Linux两条路线姿势不太一样。3.1 Windows解压版安装与验证Windows上最省事的流程把apache-tomcat-10.1.26-windows-x64.zip解压到指定目录比如D:\dev\apache-tomcat-10.1.26。这里有个小注意点尽量不要把目录放进路径带空格的地方比如C:\Program Files\Tomcat这种虽然Tomcat官方支持带空格的路径但后续一些脚本命令、IDE集成、批处理调试的时候空格经常引发各种莫名问题不如一开始就避开。解压后要做两件事确认JDK已安装并配置好JAVA_HOME环境变量。然后双击bin\startup.bat启动后浏览器访问http://localhost:8080/能看到默认的猫首页就说明装好了。不过双击启动有个麻烦窗口突然闪一下就消失你根本看不到报错信息。正确的验证姿势是在命令行窗口里手动执行cd D:\dev\apache-tomcat-10.1.26\bin catalina.bat run这样Tomcat以前台方式启动日志直接打在控制台里启动报什么错一目了然。调试阶段用这个方式确认没问题之后再用startup.bat后台启动。3.2 Linux的规范安装专用用户与systemdLinux生产环境我推荐的规范流程是这样把tar.gz包解压到/opt/tomcat创建一个专用运行用户tomcat把目录属主改给tomcat然后用systemd托管进程。为什么要单独建用户跑Tomcat安全是第一位的。Tomcat一旦被攻破如果进程是root启动的攻击者直接拿到整台机器的权限用低权限专用用户运行至少能把损失控制在一个范围内。具体命令流程sudo useradd -r -s /bin/false tomcat sudo mkdir -p /opt/tomcat sudo tar -xzf apache-tomcat-10.1.26.tar.gz -C /opt/tomcat sudo ln -s /opt/tomcat/apache-tomcat-10.1.26 /opt/tomcat/current sudo chown -R tomcat:tomcat /opt/tomcat然后写systemd服务文件/etc/systemd/system/tomcat.service[Unit] DescriptionApache Tomcat 10.1 Afternetwork.target [Service] Typeforking Usertomcat Grouptomcat EnvironmentJAVA_HOME/usr/local/jdk-17 EnvironmentCATALINA_HOME/opt/tomcat/current EnvironmentCATALINA_BASE/opt/tomcat/current ExecStart/opt/tomcat/current/bin/startup.sh ExecStop/opt/tomcat/current/bin/shutdown.sh Restarton-failure [Install] WantedBymulti-user.target写完之后systemctl daemon-reload再systemctl enable --now tomcat。这套方案的好处是开机自启、崩溃自动拉起、用systemctl status tomcat和journalctl -u tomcat查看状态和日志运维体验比裸跑startup.sh强太多。3.3 目录结构与环境变量解读装完之后Tomcat的根目录下有几个子目录是排查问题时的主要战场bin启动关闭脚本。startup.sh、shutdown.sh、catalina.sh都在这里。conf核心配置文件。server.xml、web.xml、context.xml、tomcat-users.xml都在这里。libTomcat自身以及应用共享的jar包。数据库驱动这类公共依赖通常扔这里。logs日志目录。catalina.out是主输出文件localhost_access_log是访问日志。webapps应用部署目录。war包扔到这里就能自动部署。workJSP编译后的class缓存目录。页面改了不生效有时删这个目录就能解决。temp临时文件目录。Tomcat脚本运行依赖两个环境变量JAVA_HOME指定JDK安装位置CATALINA_HOME指定Tomcat根目录。Linux上还可以用CATALINA_BASE来指定实例配置目录实现一份二进制多实例运行后面讲多实例部署时再展开。JAVA_HOME不配或者配错最常见的报错就是脚本找不到java命令或者在老版本上直接弹Unable to find a Java SDK之类的提示。4. 核心配置文件server.xml详解server.xml是Tomcat的主配置文件里面是Server、Service、Connector、Engine、Host、Context这些嵌套元素。看不懂这个文件等于只学会了启动Tomcat还没学会怎么用它。4.1 三层结构Connector、Engine与Hostserver.xml核心骨架默认长这样Server port8005 shutdownSHUTDOWN Service nameCatalina Connector port8080 protocolHTTP/1.1 connectionTimeout20000 redirectPort8443 / Engine nameCatalina defaultHostlocalhost Host namelocalhost appBasewebapps unpackWARstrue autoDeploytrue / /Engine /Service /Server我来拆一下这个结构Server代表整个Tomcat实例port8005是关闭端口shutdownSHUTDOWN是关闭指令字符串Service把连接器和引擎绑到一起Connector就是用来接收外部请求的网络端口组件Engine是Servlet处理引擎往下管理虚拟主机HostHost对应一个虚拟主机appBase指定这个主机下应用默认放在哪个目录。一次请求的路径大致是浏览器请求到达ConnectorConnector把请求交给内部的线程池处理转到EngineEngine根据请求的域名匹配HostHost再根据URL路径匹配Context应用最后路由到具体的Servlet。理清这条链路很多配置问题就能自己推导出来了。4.2 端口规划与AJP禁用Tomcat默认监听三个端口8080是HTTP访问端口8005是关闭端口8009是AJP端口。AJP是Apache前端与Tomcat通信的专用协议在Tomcat 9之后默认配置里已经不再激活。如果你没有明确使用Apache对接AJP的需求就让这个端口保持禁用状态多暴露一个协议端口就多一个攻击面。从安全角度再补一句8005关闭端口在生产环境建议改掉默认值比如改成port-1让Tomcat完全禁用通过端口发送关闭指令的能力。关闭指令本身还需要匹配shutdown字符串但如果Tomcat所在网络被访问到8005攻击者尝试发送SHUTDOWN字符串依然有一定风险。要么用防火墙把8005挡在内网要么直接关掉。4.3 Host、Context与应用部署方式Host元素里appBase指定应用目录默认是webapps。你把一个名为demo.war的包扔进webappsTomcat会自动创建一个名为demo的Context访问路径就是http://localhost:8080/demo/。如果你希望应用直接通过根路径访问也就是http://localhost:8080/那就把war包改名为ROOT.war再扔进去同时清理掉webapps下原来的ROOT目录。unpackWARs和autoDeploy这两个属性值得理解unpackWARstrue表示把war包解压成目录再运行false则直接从war包运行autoDeploytrue表示启动后持续扫描appBase检测到新增或更新的war包就自动部署。生产环境如果希望完全手工控制部署时机可以把autoDeploy改为false需要发布时通过Manager页面或脚本手动reload。还有一种常见需求应用代码和Tomcat目录不想耦合在一起。比如应用放在/data/apps/demo这时不用复制到webapps直接改Host元素里加一个ContextHost namelocalhost appBasewebapps Context path docBase/data/apps/demo reloadablefalse / /Hostpath为空表示根路径docBase指向外部目录。这种部署方式在发版系统里很常见更新代码不用往Tomcat目录里复制文件直接把新版本切到docBase路径就行。5. JVM参数与连接器调优Tomcat跑得动和跑得快中间隔着一层JVM调优。很多性能问题不是应用代码慢而是堆内存没给够、线程池参数不合理。5.1 用setenv.sh统一管理JVM参数Tomcat启动时会加载bin/catalina.sh在这个脚本里可以找到JAVA_OPTS的引用位置。直接把JAVA_OPTS写进catalina.sh是最省事的做法但不推荐每次升级Tomcat覆盖整个bin目录时你的自定义参数就丢了。更规范的做法是在CATALINA_BASE的bin目录下放一个setenv.shTomcat启动时如果发现这个文件会自动加载它既不影响主脚本又方便版本管理。Linux/Win下分别创建bin/setenv.sh或bin\setenv.bat内容大致如下export JAVA_HOME/usr/local/jdk-17 export CATALINA_OPTS-Xms1024m -Xmx1024m -XX:MaxMetaspaceSize256m -Dfile.encodingUTF-8这里说明一下CATALINA_OPTS只作用于Tomcat自身进程而JAVA_OPTS除了Tomcat进程还会被脚本里的其他工具继承。所以专门给Tomcat进程设参数用CATALINA_OPTS更精准。内存参数的选择逻辑-Xms和-Xmx最好设置成相同值避免启动后堆内存反复扩容收缩带来的性能抖动。设置多大要看你的应用负载这不是拍脑袋定的建议先压在测试环境跑一段时间压测观察JVM曲线后确定。一般8G内存的服务器给Tomcat分2G到4G堆比较常见再高要考虑宿主机上是否还有别的服务。-XX:MaxMetaspaceSize给JSP和类加载预留空间256m对绝大多数应用够了类是特别多的可以提到512m。5.2 线程池与连接数参数Connector里的几个线程参数是Tomcat扛并发的基础参数默认值作用maxThreads200处理请求的最大工作线程数minSpareThreads10空闲时保持的最小线程数减少临时创建线程的开销acceptCount100请求队列容量线程全忙时排队等接收的请求数maxConnections8192最大TCP连接数超过后新连接进入acceptCount队列这几个参数之间是协同关系。拿一个配置示例来讲Connector port8080 protocolHTTP/1.1 connectionTimeout20000 maxThreads300 minSpareThreads20 acceptCount100 maxConnections8192 URIEncodingUTF-8 enableLookupsfalse /我解释一下每个选择的含义。maxThreads从默认200提到300是给高峰期请求处理留余量minSpareThreads提到20减少低峰期到高峰期的线程创建延迟acceptCount保持100因为队列太长请求在队列里等到超时体验反而更差enableLookupsfalse关闭DNS反向解析每次解析一次主机名是很耗时的操作没特殊需求必须关掉。网上有些教程喜欢把maxThreads设置成1000甚至更大我的看法是谨慎。线程不是越多越好线程太多会带来上下文切换开销反而拖垮吞吐。线程数的上限定多少最好配合压测结果来先跑一轮jmeter或者wrk观察响应时间和CPU使用率之间的平衡点再反推参数值。5.3 数据源配置JNDI应用里大量使用数据库连接池的可以把数据源配置到Tomcat的context.xml或server.xml的Context元素里应用通过JNDI名称获取连接。这样做的好处是连接池的创建和管理都交给容器应用代码里不用硬编码数据库账号密码。在应用目录下的META-INF/context.xml里配置Context Resource namejdbc/AppDB authContainer typejavax.sql.DataSource driverClassNamecom.mysql.cj.jdbc.Driver urljdbc:mysql://localhost:3306/appdb?useUnicodetrueamp;characterEncodingUTF-8 usernameapp_user passwordyour_password maxTotal20 maxIdle10 maxWaitMillis10000/ /Context注意几个细节name是JNDI名称应用里通过java:comp/env/jdbc/AppDB查找type在Tomcat 10.1里要跟应用的命名空间匹配新项目用javax.sql.DataSource还是jakarta开头取决于你的Tomcat版本和驱动版本数据库驱动的jar包要放到lib目录下Tomcat才能加载。配置完记得重启TomcatJNDI数据源的变更基本都需要重启才生效。6. 安全加固上线前需要做的几件事Tomcat装完默认就能访问猫首页但这只是开发模式。直接拿这套配置上生产等于开着大门等攻击者进来。6.1 清空默认应用与收紧管理后台Tomcat解压后webapps目录下自带ROOT、docs、examples、manager、host-manager这些默认应用。其中docs是文档examples是示例代码这俩纯粹是给开发者看的生产环境必须删掉manager和host-manager是Web管理后台攻击者可以利用管理台部署恶意war包没有强需求的情况下也应该删掉。如果团队确实需要Manager做远程部署那至少要做两件事。第一tomcat-users.xml里为管理账号设置强密码只分配最小角色权限比如只用manager-script做脚本部署不要轻易给manager-gui的图形界面权限。第二用Valve限制来源IP在Manager应用的Context配置里加上Context Valve classNameorg.apache.catalina.valves.RemoteAddrValve allow192.168.1.0/24|127.0.0.1 / /Context这样只有白名单里的IP能访问管理接口外网一律拒绝。6.2 隐藏版本信息与访问控制Tomcat默认在响应头里会带Server: Apache-Coyote/1.1一类的信息报错页面也会显示具体版本号。攻击者知道你的版本就能去查对应版本的已知漏洞。最简单的处理方式是在连接器层面加Server头隐藏Connector port8080 protocolHTTP/1.1 serverApache-Coyote/1.1 /实际上Tomcat官方不建议把server头完全去掉因为某些兼容性原因但用防火墙把不必要的协议端口全部挡在外网已经是基础操作。8080只对需要的IP段开放8005这类管理端口一律内网访问AJP端口保持禁用。安全这东西做的就是减少暴露面。6.3 日志滚动与监控基础配置生产环境跑一阵子后catalina.out会一路膨胀几十个G的日志文件不是没见过。处理办法是在Linux上用logrotate定期轮转/opt/tomcat/current/logs/catalina.out { copytruncate daily rotate 15 compress missingok notifempty }把这段配置放到/etc/logrotate.d/tomcat下就能生效。copytruncate是复制原文件然后清空而不是把文件改名这样Tomcat持续打开的句柄不会断。日志不轮转磁盘写满Tomcat会直接hang住这种事故实际上手过的人都知道有多被动。监控方面最少要盯两个指标JVM堆内存使用率和线程数。堆内存持续接近-Xmx且频繁Full GC说明内存该调了或者有泄漏线程数长期顶在maxThreads上限说明要么流量超出设计要么有慢请求占着线程不放。这些指标可以通过JMX暴露出去接上现有的监控系统就能看。7. 高频问题排查实录这些年帮别人处理过不少Tomcat问题踩来踩去发现高频率出事的就那么几类我整理出来供你排查时对照。7.1 端口被占用怎么办启动时报Port 8080 required by Tomcat v10.1 Server at localhost is already in use之类的错核心原因就是8080被别的进程占用了。排查命令Windowsnetstat -ano | findstr :8080Linuxss -lntp | grep 8080 # 或者 lsof -i:8080看到占用进程的PID后确认不是系统关键进程或已部署的其他服务再决定是杀掉还是给Tomcat换个端口。现实里经常遇到的情况是上一次Tomcat没正常关闭残留的Java进程还占着端口。对应的解决方式是先找到那个僵尸进程杀掉然后重新启动。7.2 启动闪退与日志定位双击startup.bat窗口一闪而过是Windows新手最常见的问题。一个原因是JDK环境变量没配好脚本找不到java另一个原因是启动过程中抛了异常窗口被立即关闭。无论如何不要在双击脚本上死磕直接在命令行里执行catalina.bat run所有报错都打在屏幕上。Linux上启动失败看日志的优先级顺序是这样的journalctl -u tomcat -n 50 tail -n 100 /opt/tomcat/current/logs/catalina.out ls /opt/tomcat/current/logs/注意logs目录下除了catalina.out还有按日期命名的catalina.2024-xx-xx.log里面记录的异常栈往往比catalina.out更全。启动失败往往伴随两个典型坑JAVA_HOME没指到有效JDK路径或者内存参数-Xmx设置得超过服务器实际可用内存导致JVM直接退出。7.3 404、403、乱码三大经典404先分清是哪种访问http://ip:8080出404大概率是webapps里的ROOT应用被删了或者没部署任何应用访问http://ip:8080/app出404先检查war包名和大小写是否一致Tomcat的上下文路径严格区分大小写应用里访问子路径404就要去查应用的Servlet映射了。403最常见的是访问Manager或Host-manager管理后台时触发报403 Access Denied。按6.1节说的要么配置了RemoteAddrValve导致你的IP不在白名单要么tomcat-users.xml里的账号缺少对应角色。还有一种是应用下某目录配置了WEB-INF权限限制这个得看应用自己的配置。乱码问题分几个层面URL参数乱码给Connector加URIEncodingUTF-8页面输出乱码检查JSP的pageEncoding和响应头里的charset日志乱码Windows环境下注意控制台默认GBK编码JVM启动参数加-Dfile.encodingUTF-8能缓解大部分问题。乱码的根因只有一个两端的编码不一致顺着数据流转的每个环节查编码就能定位到具体哪里被转错了。7.4 重部署与内存问题开发环境改代码后经常懒得重启Tomcat直接覆盖war包触发热部署。偶尔这么做没问题但频繁热部署容易把老类的ClassLoader残留留在堆里时间长了就出现PermGen space或Metaspace溢出。Tomcat 10.1里遇到Metaspace溢出先检查是不是热部署太频繁再检查-XX:MaxMetaspaceSize是否给得太小。还遇到过一种典型情况应用里用JDBC驱动驱动类被Web应用的ClassLoader加载但连接池的清理没有跟着卸载结果每次重部署都会把数据库连接池整个泄漏掉。这种问题的标准解法是把数据库驱动jar放到lib目录用共享ClassLoader加载同时确认应用实现了ServletContextListener来正确关闭数据源。如果实在排查不出泄漏源就定好流程发布时完整重启Tomcat别用热部署侥幸过关。8. 我的个人实操心得整套流程走下来真正让我觉得省心的几个习惯在这里一并分享。第一从第一天就用setenv.sh管理环境变量和JVM参数不要等出了问题再回头补。我接过一个项目Tomcat跑了两年后来查JVM配置发现根本没生效原因就是当时有人直接把参数写进了catalina.sh后一次升级Tomcat目录整个被覆盖参数全丢了系统一直在默认堆内存下运行。用setenv.sh隔离配置升级不丢配置排障也只需要看这一个文件。第二版本升级之前一定把conf目录整个备份一份。Tomcat升级时优先采用保留conf目录的升级方式而不是解压新包后直接覆盖老目录。直接覆盖最大的风险是server.xml、context.xml等配置文件里的定制内容被新版本默认配置顶掉应用看起来没变但行为全变了。第三日志是一切排障的起点。遇到任何Tomcat问题第一步不是瞎猜而是把catalina.out、catalina日期日志、localhost访问日志挨个打开看。很多时候答案就在日志里只是很多人习惯跳过日志先盲改配置结果越改越乱。养成看一眼日志再动手的习惯排查时间至少缩短一半。第四别追求参数的极端值。maxThreads不是越大越好堆内存不是越多越好。先按经验和默认参数跑起来再根据监控数据逐步调整这才是工程化的做法。上来就堆一堆大参数的配置看起来性能拉满实际压测跑一轮可能直接拖垮整台机器。Tomcat不是新东西了但正因为老它的稳定性和生态成熟度才更值得信赖。把下载、安装、配置这套基本功练扎实后面无论是维护老项目还是上手新项目你都会轻松很多。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑