帆软日志异常暴增与数据库超时问题排查

Posted by nobt854 on March 19, 2026

🔍 问题现象

核心症状

  • 帆软日志异常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 程序中所需要的资源受阻,导致数据源连接池获取数据库连接超时。

系统性问题

  1. 重启不彻底:历史帆软重启时未完全终止所有相关进程
  2. 进程管理混乱:存在多个 Tomcat 实例(44647、45841、54691),其中 54691 为历史遗留
  3. 日志机制缺陷:异常日志无限制增长,未配置日志轮转或清理策略

对 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'

根本修复方案

  1. 重启帆软
  2. 后续针对帆软重启确认无不相关子进程

处理结果

重启帆软并处理残余进程后,持续增长的异常日志文件不再被写入重复性日志,日志内容和文件大小增长速度恢复预期。


✅ 后续处理

验证修复效果

修复后持续观察以下指标:

指标 监控内容
帆软日志 文件大小变化
数据库连接 LIMS 超时次数
系统资源 文件句柄使用情况
网络 连接稳定性