🔍 问题现象
核心症状
- 帆软日志异常:
catalina.2026-03-17.log大量错误日志,内容为java.lang.IllegalStateException: 非法访问:此 Web 应用程序实例已停止 - 日志量激增:从 2026 年 2 月 28 日起,单日日志从正常 90KB 激增至 100MB-400MB
- 系统资源异常:多 Tomcat 实例并存,存在历史残余进程
- 业务影响:同机器 LIMS 应用出现数据库连接超时问题
关键数据
| 组件 | 进程 ID | 端口 | 状态 |
|---|---|---|---|
| 帆软主进程 | 45841 | 8080 | 正常运行 |
| 异常残余进程 | 54691 | - | 已运行 64 天 |
| LIMS 应用 | 4644 | 8082 | 受影响 |
🎯 根本原因分析
直接原因
帆软许可证认证后台线程 (AuthenticateSchedule) 在 Tomcat 应用停止后未正确销毁,持续尝试加载已释放的类资源,导致非法访问异常。
帆软残余异常线程不断写入日志,引发文件句柄、虚拟端口等系统资源耗尽或阻塞,间接影响同机器运行的 LIMS 程序中所需要的资源受阻,导致数据源连接池获取数据库连接超时。
系统性问题
- 重启不彻底:历史帆软重启时未完全终止所有相关进程
- 进程管理混乱:存在多个 Tomcat 实例(44647、45841、54691),其中 54691 为历史遗留
- 日志机制缺陷:异常日志无限制增长,未配置日志轮转或清理策略
对 LIMS 应用的间接影响机制
帆软异常进程可能通过以下方式影响同机 LIMS 应用:
| 影响途径 | 具体表现 | 潜在后果 |
|---|---|---|
| 文件句柄耗尽 | 异常日志持续写入,占用大量文件描述符 | LIMS 无法打开新文件或网络连接 |
| 端口资源竞争 | 多个 Tomcat 实例占用端口,可能引发端口冲突 | 应用端口绑定失败,连接超时 |
| 内存泄漏 | 异常线程持续运行,占用 JVM 堆外内存 | 系统内存不足,触发 OOM killer |
| CPU/I/O 竞争 | 日志写入消耗大量 I/O 资源 | 数据库查询响应变慢,超时增加 |
🔬 分析过程与确认
进程关系确认
1
2
3
4
5
6
# 1. 帆软主进程确认(8080 端口)
netstat -tulnp | grep :8080
# 结果:tcp6 :::8080 :::* LISTEN 45841/java
# 2. 进程树分析
ps -ef | grep java | grep -v grep
关键发现:
- 45841:当前帆软主进程(PPID=1,独立进程)
- 54691:历史残余进程(PPID=1,已运行 64 天)
- 54691 与 45841 无父子关系,确认为独立残留进程
文件句柄检查
1
2
# 检查 54691 进程打开的文件
lsof -p 54691 2>/dev/null | grep -E "\.log|catalina"
确认结果:54691 正在持续向帆软日志目录写入文件,与猜测一致。
资源占用分析
- 进程 45841:正常运行,内存占用稳定
- 进程 54691:异常持续运行,不断写入日志,消耗系统资源
- LIMS 进程 4644:运行正常,但可能受系统资源影响
🛠️ 解决方案
紧急处理措施
1. 终止异常进程
1
2
kill -9 54691
kill -9 46573 # 插件子进程,确认后终止
2. 清理日志文件
1
2
3
4
cd /data/limsapp/lims/tomcat-linux-x86/logs
# 备份后清理大日志文件
tar czf catalina_backup_$(date +%Y%m%d).tar.gz catalina*.log
rm -f catalina.2026-03-*.log
3. 资源监控
1
2
# 监控关键指标
watch -n 5 'df -h; free -m; lsof -p 4644 | wc -l'
根本修复方案
- 重启帆软
- 后续针对帆软重启确认无不相关子进程
处理结果
重启帆软并处理残余进程后,持续增长的异常日志文件不再被写入重复性日志,日志内容和文件大小增长速度恢复预期。
✅ 后续处理
验证修复效果
修复后持续观察以下指标:
| 指标 | 监控内容 |
|---|---|
| 帆软日志 | 文件大小变化 |
| 数据库连接 | LIMS 超时次数 |
| 系统资源 | 文件句柄使用情况 |
| 网络 | 连接稳定性 |