
在很多中小网站、管理系统和 Java 服务里,云主机 tomcat依然是很常见的一套组合。云主机负责算力、网络和基础运维能力,Tomcat负责把 Java Web 应用跑起来。装好 JDK、解压 Tomcat、把 war 包丢进去,这一步谁都能做;麻烦通常出在上线以后。端口没放开、JDK 版本对不上、JVM 参数随手一配、日志把系统盘写满,或者高峰期请求一上来就开始卡,这些都很常见。
这类环境能不能稳定跑,不在于“有没有装上”,而在于部署是不是规整,资源和参数是不是按业务来配。文章里这套思路,适合拿来做一份比较靠谱的部署框架,也适合给后续扩容和排障打底。
一、为什么很多业务还在用云主机 tomcat
如果项目本身就是基于 Java 开发,Tomcat 的位置一直比较稳。它轻量、成熟,兼容性也好,后台管理系统、企业门户、内容平台、接口服务这些场景都能见到。放到云主机上,有几个很现实的原因。
- 起步简单:一台基础云主机就能把 JDK、Tomcat 和应用跑起来,测试环境和初期正式环境都容易落地。
- 扩容直接:访问量上来后,可以先升级 CPU 和内存;单机扛不住,再加机器做负载分发,不用一开始就把架构铺得很大。
- 成本比较好控:对预算有限的团队来说,按需买云主机,比自建机房更省事,也少了很多硬件维护问题。
- 云上配套工具更完整:安全组、监控、快照、告警这些能力现成可用,出了问题至少有地方看,不至于全靠手工排查。
但这套组合也有一个误区:看起来门槛低,实际对细节很敏感。很多项目测试环境跑得挺顺,一到正式环境就暴露问题,往往不是 Tomcat 不行,而是部署时把生产环境当成了演示环境。
二、部署前先确认这几件事
1. 云主机配置要和业务规模对得上
测试环境和正式环境不能按一套思路配。演示项目、内部联调系统,用 2 核 4G 往往能跑;正式环境要看并发量、JVM 占用、数据库连接数、日志量和定时任务情况。Tomcat 本身吃资源不算重,但 Java 应用经常会把堆内存、线程和连接池一起拉上来,所以不能只盯着 CPU 看。
有个很容易踩的坑:页面访问量不大,就以为配置足够。实际上,如果项目里报表导出、文件上传、接口轮询、批处理任务比较多,内存和磁盘 IO 压力会比普通页面访问更明显。
2. 操作系统、JDK、Tomcat 版本要提前对齐
常见系统环境包括 CentOS、AlmaLinux、Rocky Linux 和 Ubuntu。JDK 版本最好和项目编译版本一致。项目如果基于 Java 8 构建,就别在没验证的情况下直接丢到只考虑新特性的运行环境里。Tomcat 8.5、9、10 对 Servlet 规范的支持也有差异,特别是老项目迁移时,版本不对齐很容易出现启动正常、功能报错的情况。
这一类问题有个特点:服务可能能起来,但应用并不一定能正常跑。上线前先确认框架版本、依赖包和运行环境的兼容关系,比事后追日志省力得多。
3. 网络和安全组别等上线后才查
Tomcat 安装完成后访问不了,很多时候问题不在应用,而在网络层。云平台安全组要放行对应端口,系统防火墙也要检查,应用监听地址、公网 IP 绑定情况也不能漏。常见端口包括 8080、80、443,实际开放哪一个,要看你是不是用了反向代理。
如果浏览器打不开页面,不要上来就重装。先看几件事:端口有没有监听、进程在不在、云控制台规则是不是放开了、域名解析是不是指向了正确地址。排障顺序对了,能少走不少弯路。
三、标准化部署流程,重点是别把环境做乱
1. 安装 JDK
JDK 可以通过包管理器安装,也可以上传安装包手动部署。装完以后把 JAVA_HOME 配好,再用 java -version 确认生效。生产环境里,JDK 来源尽量清晰,别混用来路不明的包,否则后面出了兼容或安全问题,很难追。
2. 安装 Tomcat
选稳定版本下载,解压到固定目录,比如 /usr/local/tomcat。目录规划最好一开始就分开:程序目录、日志目录、部署包目录不要堆在一起。这样做的好处很直接,升级、回滚、排查磁盘占用时都不容易乱。
3. 首次启动后别急着宣布成功
启动脚本赋权后,用 startup.sh 启动只是开始。第一次启动完成,至少要核查下面几项:
- 进程是否已经起来,避免脚本执行了但服务实际退出。
- 8080 或对应端口是否在监听,确认 Tomcat 确实对外提供了服务。
- catalina.out 有没有明显报错,尤其是端口占用、类加载异常、JDK 兼容问题。
- 内网和公网访问是否符合预期,如果只允许内网访问,外网不通反而是正常状态。
很多“部署完成”的环境,问题就出在这一步做得太草率。服务能启动,不代表应用已经可用。
4. 部署应用包时顺手把默认风险关掉
war 包可以直接放到 webapps 目录,也可以通过 CI/CD 工具发版。正式环境里,Tomcat 自带的默认示例应用、管理入口,如果业务不需要,就该关掉或者删除,别把不该暴露的页面挂在公网。
更新频繁的项目,独立目录部署加软链接切换会更省事。回滚的时候不用手忙脚乱地覆盖文件,切回上一版就行。这种做法对多次发版的业务特别实用。
四、一个企业 OA 系统的上线案例
有些问题,放在具体场景里更容易看明白。某中小企业把原来部署在本地服务器上的 OA 系统迁到云端,前期用了 2 核 4G 云主机,Tomcat 9,Java 8,数据库还留在内网服务器。刚上线那几天看着没问题,员工上班高峰期一到,页面就开始变慢,偶尔还出现 502。
后面排查下来,问题不是一个点,而是几处叠在一起:
- Tomcat 默认线程参数偏保守,请求高峰时排队明显。
- JVM 内存设得太小,Full GC 比较频繁,页面响应时快时慢。
- 日志一直写系统盘,写入一多,IO 就开始抖。
- 云主机到数据库的网络延迟比原来预估得高,接口一旦涉及多次查询,等待时间就上来了。
后续的处理也不是单改一个参数就解决了。运维把最大线程数按压测结果做了上调,重新设置了堆内存参数,把访问日志迁到独立数据盘,又把数据库迁到同地域的云数据库。这样改完以后,页面平均响应时间降了不少,高峰期也稳定多了。
这个案例很典型。云主机 tomcat出性能问题,常常是计算、JVM、网络、存储一起作用的结果。只盯着 Tomcat 参数改,往往只能缓一阵,问题不会彻底消失。
五、生产环境里更值得做的 Tomcat 优化
1. JVM 参数别照搬模板
JVM 参数要看云主机内存来定,常见的是设置 -Xms 和 -Xmx。堆设太大,系统和其他进程没空间;设太小,垃圾回收频繁,服务响应会抖。比如 4G 内存的云主机,通常不会把堆直接吃满,还得给系统、线程栈和其他组件预留空间。
这里的避坑点很明确:不要从网上随便抄一份“大而全”参数。没有结合业务负载验证过的 JVM 配置,出问题时只会增加排查难度。
2. 连接器线程参数要靠压测调
Tomcat 的 server.xml 里,最大线程数、接受队列长度、连接超时时间这些参数都需要关注。线程不是越大越好。线程一多,上下文切换增加,CPU 反而更忙,吞吐未必更高。比较稳妥的方式,是先根据业务峰值做压测,再一点点调,而不是一上来就把数值拉满。
3. 静态资源尽量分离
如果系统里图片、CSS、JS 比较多,静态资源交给 Nginx 或对象存储会更合适。Tomcat 处理动态请求,静态内容交给更适合的组件,整体响应通常会更平稳。对访问量不算大的站点,这一步未必是刚需;但只要静态资源占比高,分离后的效果一般都很直接。
4. 日志管理要当成日常工作
不少故障最后查出来都很基础:日志没做轮转,磁盘被写满,Tomcat 和业务一起异常。日志至少要区分运行日志和业务日志,保留周期、错误级别、轮转策略也要提前定好。系统盘空间本来就紧张时,更不要把所有日志都默认写进去。
5. 对外访问尽量走反向代理和 HTTPS
正式站点一般不会直接把 Tomcat 端口裸露给公网。更常见的做法是前面放 Nginx,对外只提供 80 和 443,把证书、转发规则、限流这些统一收口管理。这样做不仅更符合生产环境习惯,后面要加缓存、做转发、换证书也方便。
六、常见故障怎么排
- 服务启动失败:先查 JDK 版本、端口占用、启动脚本权限,再看配置文件有没有写错。
- 页面打不开:优先看安全组、系统防火墙、Tomcat 监听端口、公网 IP 和域名解析。
- 访问很慢:同时观察 CPU、内存、磁盘 IO、GC 日志、数据库响应时间和网络时延,别只看应用层。
- 频繁宕机:重点查 OOM、线程池耗尽、死循环、磁盘写满、异常重启记录。
- 更新后报错:通常要核对 war 包版本、依赖冲突、配置文件是否被覆盖,以及缓存有没有清干净。
如果团队运维经验还不够,至少把最基本的监控先补上:CPU、内存、磁盘、网络流量、进程状态、应用日志告警。这不是锦上添花,而是排障起点。没有监控的 云主机 tomcat 环境,很多时候只能靠猜。
七、安全加固别留在“以后再说”
云主机一旦暴露公网,扫描、弱口令、漏洞利用这些风险就跟着来了。Tomcat 部署完成后,至少要把几件基础动作做掉:
- 默认管理入口如果不用,直接关闭或移除,别长期挂在外网。
- SSH 登录来源尽量收紧,弱密码不要留。
- JDK 和 Tomcat 的安全版本要及时更新,别长期停在已知风险版本上。
- 只开放必要端口,8080 这类端口能不直接暴露就别直接暴露。
- 如果环境里有 WAF、负载均衡或现成安全策略,基础防护可以一并接上。
很多所谓的 Tomcat 被入侵,最后查下来都不是产品本身的问题,而是默认配置长期对公网裸露,没人维护,也没人收口。
把 云主机 tomcat 用好,说到底靠的是规范化:环境版本对齐、目录清晰、参数按业务调、日志和监控提前做好、安全边界不要空着。对个人站长和中小团队来说,先把这些基础动作做扎实,往往比急着上复杂架构更有用。
内容均以整理官方公开资料,价格可能随活动调整,请以购买页面显示为准,如涉侵权,请联系客服处理。
本文由星速云发布。发布者:星速云小编。禁止采集与转载行为,违者必究。出处:https://www.67wa.com/297144.html