服务器上的 Tomcat 服务老是过一段时间自己停掉怎么办?
问题背景
不少公司的业务系统(OA、进销存、报销系统)是厂商用 Tomcat 部署在 Windows 服务器上的。用着用着某天同事说系统打不开了,登上服务器一看——Tomcat 服务停了,手动一点启动,又能撑个几天,然后照停不误。反反复复,谁也说不准哪天彻底起不来。
为什么会自己停
Tomcat “过段时间就停”,最常见的原因有这几个:一是内存溢出——业务数据一年年涨,当初给的内存参数早不够用了,Java 内存一爆,进程直接被系统结束,这是最高发的一个;二是日志把磁盘塞满了,系统盘或日志盘一满,服务说停就停;三是用黑窗口(startup.bat 方式)在跑,远程退出登录时把窗口一带走,服务跟着就没了;四是服务器半夜自动装更新重启,服务没设成"自动"启动,机器起来了服务还躺着;五是 Tomcat 或 Java 版本太老,本身就有崩溃的毛病。
分步解决
第一步,看日志定位:翻 Tomcat 的 logs 目录,找停止时间点附近的日志,再看 Windows 事件查看器的应用日志,看到 OutOfMemoryError 字样,内存问题基本实锤。 第二步,调内存参数:修改 Tomcat 的启动配置,把最大堆内存调大(Java 选项里加大 -Xmx,给多大看服务器内存余量),改完重启服务生效。 第三步,改成服务方式并配自动恢复:确保 Tomcat 以 Windows 服务方式运行,不用黑窗口;打开服务属性,启动类型设为"自动",再切到"恢复"选项卡,把第一次、第二次失败都设成"重新启动服务"——就算再崩,几十秒内自己爬起来。 第四步,清日志腾空间:历史日志归档或删掉,顺手配个定期清理,磁盘留足余量。 第五步,加一道守护:用计划任务每隔几分钟检测一次服务状态,发现停了自动拉起,双保险。 第六步,做完这些还频繁停的,大概率是应用本身在漏内存,把日志整理好发给业务系统厂商,让他们升级版本或修代码——这一步只有软件厂商能解决,别自己死磕。
预防
给业务服务器定个规矩:所有服务一律"自动启动+失败自动重启";系统更新挪到夜里,并确认重启后服务能自己起来;每半年巡检一次磁盘水位和内存占用,别等崩了才看。业务服务器没人驻场管的话,可以请 IT 服务商做定期巡检——贵州诚鑫致达科技接手托管的服务器,“服务自愈配置"就是标配项,能挡掉大半这类小故障。