患者流失谜题:看完即失联,60%患者不再回头

“病人看完就走了,我们不知道他们好了没有,会不会再来。慢性病患者该复诊了也找不到人,很多就这样流失了。”

2026年5月10日上午10点15分,四川成都XX门诊办公楼三楼会议室, Monthly 质量分析会正在进行。护士长赵大姐,42岁,穿着淡蓝色护士服,手里拿着本季度的复诊率报表,站起身,声音里带着疲惫和无奈。她刚翻开报表第5页,抬头看向坐在对面的信息科小胡。

“小胡,我们系统有随访功能吗?”赵大姐合上报表,目光扫过会议室所有人,”我们15个护士,每天忙得连轴转,输液、换药、接电话,可患者看完就走了。高血压糖尿病这些慢病患者,该复诊了也找不到人。很多就这样流失了。”

小胡,28岁,刚来门诊一年,穿着格子衬衫,低头翻了翻系统手册,摇头:”赵姐,旧系统没有随访模块。我们现在用Excel登记,但follow-up率不到30%。很多患者电话空号,有的不愿接,护士打10个电话能打通3个就不错了。”

窗外传来门诊大厅的嘈杂声和叫号提示音。此时正是工作日高峰,大厅里坐满了等待的患者,护士站电话铃此起彼伏。医务科长补充:”我们统计过,门诊患者复诊率只有40%,意味着60%看完一次就流失。如果能提高到60%,年营收能增加30%以上。”

财务科刘主任推了推眼镜,接过话:”赵大姐,我们都想解决随访问题。但人力有限,15个护士日常工作已饱和,不可能再分配给随访大量时间。而且,患者数据分散在不同科室,各自为政,汇总困难。”

赵大姐站起身,走到白板前,拿起记号笔写下”随访困境”四个字,然后画了一个流程:患者就诊→离院→无后续跟进→流失。

“我们试过手工随访,但问题太多。”她边写边说,”护士日常工作already满负荷,随访经常被’搁置’;不同科室数据不统一,有的用Excel有的用笔记本;随访内容随意,记录难追溯;患者有问题转给医生后无跟踪。”

她转过身,面向参会所有人:”更关键的是,慢性病患者需要3个月复诊一次,但我们不知道哪些到期了,也没有人力去一一通知。上个月,我们高血压患者只有45%复诊率,糖尿病40%。如果提高到60%……”

院長敲了敲桌子:”赵大姐,你的意思我明白。但不是我们不重视,是人力真的不够。你有什么具体建议?”

“院长,我建议大家考虑引入软佳的智能随访模块。”赵大姐重新坐下,”上周信息科小胡给我演示了,可以自动生成随访任务,多渠道触达,还能记录随访结果。”

小胡点点头,打开笔记本电脑:”我来简单介绍一下……”

会议室陷入短暂讨论——有人担心隐私,有人质疑覆盖率,有人问成本。赵大姐看着眼前的困境清单:登记分散、任务遗忘、覆盖率低、无标准化、反馈不闭环、患者流失严重。她深吸一口气:随访已不仅是服务问题,更是营收和管理的生死线。旧模式已到极限,必须寻找系统性解决方案。

10点45分,会议结束。赵大姐收拾材料,心里盘算:如果软佳随访模块真能解决这些问题,门诊复诊率提升10%,就是几十万的增量收入。但如何说服同事们接受新系统?人力不足的顾虑怎么破?她边走边思考,决定下午约信息科小胡详细聊聊软佳的方案细节。

走廊里,阳光斜照。赵大姐知道,这场关于”患者是否离院即终止关系”的讨论,才刚刚开始。

困境:随访靠人工,效果堪忧

成都XX门诊位于成华区,是一家日接诊300人次的中型社区医院,服务周边3个小区。过去随访工作,靠护士手工登记、电话通知,工作量巨大但效果差。

赵大姐统计过她们护理部的工作缺口:

登记分散:不同科室各自为政,数据不统一,有的用Excel,有的用笔记本,汇总困难

任务遗忘:护士日常工作已饱和(输液、换药、接电话),随访经常被”搁置”,结果就是遗忘

覆盖率低:仅能随访30%患者,且多为住院患者(因为住院期间接触多);门诊患者随访率更低,约15%

无标准化:随访内容随意,有的护士问5个问题,有的问2个,记录难追溯

反馈不闭环:患者有问题,转给医生后无跟踪,医生太忙,经常漏看

更糟的是:患者流失严重。据财务科测算,年复诊率约40%,意味着60%患者看完一次就流失。”如果复诊率能到60%,我们年营收能增加30%以上。”院长在会上说。

“慢性病患者,应该3个月复诊一次,但我们不知道哪些到期了,也没有人力去一一通知。”赵大姐对同事说,”我们15个护士,日常工作已饱和,不可能再分配给随访大量时间。”

转机:软佳的自动随访

2026年初,软佳升级门诊管理系统,新增智能随访模块。信息科小胡演示给赵大姐看。

“软佳能自动生成随访任务,多渠道触达,还能记录随访结果。”

小胡讲解:

规则配置

– 按科室、疾病、医生设置规则

– 例如:

– “高血压患者,14天后随访”

– “糖尿病患者,30天后随访”

– “感冒患者,3天后电话回访”

– “术后患者,第3天、第7天、第30天随访”

“规则可以自定义,非常灵活。”

任务生成

– 患者就诊结束,系统自动检查是否符合随访规则

– 符合则生成任务,分配给对应医生或护士

– 任务列表在护士端APP显示,按优先级排序

多渠道触达

– 微信消息(公众号模板消息,患者免费用)

– 短信(无微信患者,自动发送)

– 电话(系统自动拨号,护士接通后话术提示)

“比如高血压患者,14天后系统自动发微信:’王阿姨,您的血压控制得怎样?记得15天后复诊哦。'”

随访记录

– 患者回复(是/否/有症状)

– 护士记录沟通内容

– 结果标记(复诊预约、问题转医生)

“随访全过程留痕,管理层能看统计报表。”

赵大姐眼睛亮了:”这个能解决我们的困境。”

冲突:人力不足与系统信任

赵大姐向院长汇报:”引入软佳随访模块,年费已包含,无需额外付费。可以提升患者随访率,增强慢病管理。”

院长 questions:

– “系统自动发消息,患者会回吗?”

– “护士还要接电话,工作量不是增加了吗?”

– “隐私问题:随访内容涉及健康,会不会泄露?”

赵大姐一一回应:

– “软佳的随访消息是定制化,根据疾病写话术,患者感觉贴心,回复率比我们手工高”

– “电话随访可以设定每天 quotas(比如20个),不会无限增加;微信自动,不占用人力”

– “数据加密,随访记录在系统内,非授权人员看不到”

信息科补充:”软佳符合医疗数据安全规范,随访记录访问需权限。”

财务算账:

– 软佳年费1898元,随访模块免费

– 对比:如果请1个专职随访员,一年成本8万

– 节省8万,效果更好

“但我们护士已经忙不过来了。”护士长担忧。

“软佳随访能减少重复工作。”信息科小胡说,”比如患者咨询血压,随访中系统能记录,医生端也能看到,不用患者再打电话问。”

“而且随访能提前发现风险,减少急诊,反而减轻工作。”

经过讨论,院长拍板:上线随访模块,分阶段:

– 第一阶段:慢性病随访(高血压、糖尿病)

– 第二阶段:术后随访

– 第三阶段:满意度调查与反馈收集

蜕变:从30%到70%随访率

实施在5月进行,为期一个月。

配置:赵大姐和医生们一起设置随访规则:

– 高血压:诊断时标记,14天后微信随访,问血压值、用药情况、有无不适

– 糖尿病:30天后随访,问血糖控制、饮食情况

– 感冒:3天后电话随访,问是否康复

– 术后:第3、7、30天随访,记录恢复情况

培训:护士学习使用随访模块APP,查看任务、记录结果、转问题给医生。

试运行第一周:

– 系统自动生成任务136个

– 微信触达110人,电话触达26人

– 回复率:微信45%,电话70%

– 护士完成记录:85%

“比手工强多了。”赵大姐说。过去手工登记,随访率30%左右;现在系统辅助,两周随访率已达60%。

她展示数据:

复诊率变化(对比实施前3个月):

– 高血压患者复诊率:45% → 58% (+13%)

– 糖尿病患者复诊率:40% → 53% (+13%)

– 患者满意度:72% → 85% (+13%)

“随访不只是完成任务,是维系关系。”赵大姐说。

一位高血压患者回复微信:”你们还关心我,我觉得这家医院好。”

更实用的效果:提前发现风险。某高血压患者随访回复:”今天头晕,血压180/110。”护士立即转给医生,医生电话邀约来院调整用药,避免了一次可能的脑梗。

“如果没随访,患者可能就硬扛了。”赵大姐后怕。

回响:随访成为新常态

三个月后,随访模块已成为门诊日常。

数据统计:

– 随访任务生成:平均每月320个

– 完成率:72%

– 回复率:微信50%,电话75%

– 因随访触发的复诊预约:占复诊总人数的18%

– 问题拦截:每月约5-8例潜在风险被提前发现

赵大姐在年终总结中说:”我们用0成本(人力上),建立了随访体系。”

“软佳的随访模块,让我们从’看病结束即终止’,变成了’持续健康管理’。”

“患者感觉被关心,更愿意再来;医生提前干预,减少并发症;医院口碑提升。”

她还发现一个 unexpected benefit:减少投诉。过去患者有问题无处诉说,随访给了他们反馈渠道。有患者提出候诊时间长,医院据此优化流程,投诉下降。

现在,赵大姐的随访工作不再是”打一堆电话”,而是:

– 看系统自动推送的任务列表

– 优先处理高危患者、问题反馈

– 记录随访结果,形成闭环

“人力节省了,效果提升了,何乐不为?”

当同行问赵大姐如何做随访,她会说:

“第一,自动规则:根据疾病设置随访时间点,系统自动生成,不用人工回忆

– 第二,多渠道:微信为主,电话为辅,覆盖不同人群

– 第三,闭环:随访结果转医生,问题有跟踪,不石沉大海

– 第四,零门槛:软佳全功能包含,不额外收费”

“最重要的是:把随访变成主动关怀,不是骚扰。”

回想那个随访率30%、手工登记混乱的时代,赵大姐感慨:技术解放人力,更提升温度

软佳的随访模块,自动化、标准化、可追溯,让护士从重复劳动中解脱,专注于真正需要人情味的沟通。

“1898元/年,包含随访、提醒、记录、分析,性价比极高。”

声明:本文基于真实医院场景改编,人物均为化名,数据为试点统计,实际效果因机构规模、患者群体、规则设置而异。产品功能与价格截至2026年5月,请以官方最新信息为准。

核心金句:

“随访不是骚扰,是就诊结束后的延续关怀。”

“自动规则+多渠道触达,让随访效率提升一倍。”

“0额外成本,用软佳建立随访体系,提升复诊率。”

互动话题:

您的门诊有患者随访机制吗?随访率大概多少?

随访主要靠人工还是系统?效果如何?

随访中,您发现的最大问题是什么:人力、隐私、还是效果?


立即免费试用门诊系统https://app.kmhis.com/
International Versionhttps://app.kmhis.com/multi/
了解软佳门诊管理系统详情https://www.kmhis.com/outpatient-management-system.html


扫码预约

手机扫码试用患者预约。请勿输入个人真实信息(点击图片可查看原图)

支持8种语言:简体中文、繁体中文、香港中文、English、藏文、泰文、老挝语、越南语


说真的。这类问题我见过太多了。每次看到医院同事为选型头疼。我就想,要是早点有人把这些经验分享出来就好了。毕竟。选择不对。后面全是麻烦。选择对了。省心省力。还能提升整个机构的运行效率。希望这篇能帮到正在纠结的你。

你如果有具体需求。也可以去 www.kmhis.com 看看。那里有更详细的技术方案和案例。

那个”万能密码”用了三年:一次权限管理的觉醒

“系统出错了!”

信息科李主任刚上班,就接到药房电话。

药房馮主任在电话里嚷:”为什么我登录系统,提示’密码过期’?我昨天还能用!”

李主任心里一沉。

药房系统,用的是全院统一的”管理员账户”——用户名admin_yaofang,密码是Yaofang@2023

这个密码一年前就该过期了,但冯主任一直没改。不是他不想改,是改了之后,药房十几台电脑都要手动更新密码,很麻烦。

而且,这套密码,从2023年用到现在,从来没出过问题。

但今天,突然提示密码过期。

李主任查了一下密码策略:密码有效期是180天。Yaofang@2023是2023年10月设置的,到今天已经超过500天了。

奇怪,为什么系统突然开始强制改密码?

他打开密码策略配置——有效期还是180天,但”密码历史记录”被改成了”记住5次”。而且,”密码必须复杂性”被开启。

“有人动过密码策略。”李主任说。

他查变更日志,发现是上周安全加固时,小吴改的。

小吴来了,解释:”我发现全院所有科室的管理员密码,都是’科室名@年份’,太简单了。我就把策略调严了:必须大小写字母+数字+符号,8位以上,180天过期,不能重复使用。”

“但药房不知道啊,”李主任说,”他们没收到通知。”

“系统登录的时候会提示。”

“但提示了为什么不改?冯主任说,他点了’确定’,登录还是失败。”

小吴查了一下:”哦,新密码策略要求密码不能包含用户名。冯主任如果设成’Yaofang@2024’,就包含了’Yaofang’,不符合策略,所以设失败。”

李主任明白了:这是一个典型的”好心办坏事”——安全策略变严了,但用户不知道怎么设置合格的新密码,导致集体被锁。

1. “万能密码”的发现

但这件事,只是冰山一角。

当天下午,老周来信息科做客,李主任跟他抱怨:”我们这权限管理,一团糟。”

老周问有多乱。

李主任打开用户管理后台,给老周看:

发现一:存在”万能账户”

– 有个用户叫admin_backup,密码是Admin@123456

– 这个账户的权限是”超级管理员”,但没人知道是谁创建的

– 最后一次登录是半年前,但账户状态是”启用”

李主任说:”这个账户是V2.0时代留下的,那时开发商留的后门。V3.0迁移时忘了删。”

发现二:科室共用账户严重

– 药房:admin_yaofang(5人知道密码)

– 住院处:admin_zhuyuan(3人知道密码)

– 财务科:admin_caiwu(4人知道密码)

– 检验科:admin_jianyan(2人知道密码)

密码都是”科室名@年份”,而且五年没改过。

“为什么这么乱?”

“因为一旦改密码,所有科室电脑都要同步更新,很麻烦。而且我们系统没有单点登录,每个科室都要独立账户。”李主任说。

发现三:权限虚高

– 门诊挂号岗的账户,有”删除挂号记录”权限

– 护士站的账户,有”修改药品价格”权限

– 医嘱开立岗的账户,有”删除医嘱”权限

“这些高权限,是出厂设置,我们没细调。”

老周看着后台,摇头:”这就像一个家,钥匙分给所有邻居,而且钥匙上贴着’万能’两个字。”

2. 老周的建议:三管齐下

老周给李主任提了三个建议:

1. 清理账户,最小权限原则

– 删除所有未使用的账户(尤其是admin_backup

– 所有账户按角色分配权限:挂号员只能挂号,收费员只能收费,护士只能执行医嘱

– 每个角色,只给”必须”的权限,不给的权限,一个都不要给

2. 推广单点登录(SSO)

– 医院职工用一个账号(工号)登录所有系统

– 密码只需改一次,所有系统同步更新

– 极大减少”共用账户”现象

3. 建立账户生命周期管理

– 新员工入职,自动创建账户

– 员工调岗,自动调整权限

– 员工离职,24小时内禁用账户

– 定期(每季度)审计所有账户,清理僵尸账户

3. 实施中的”人性化”难题

但实施起来,困难重重。

第一关:清理”admin_yaofang”这类共用账户

李主任在信息科会上提出:药房今后不再使用admin_yaofang,改为每人一个独立账户。

冯主任当场反对:”我们药房十几个人,每人一个账号,那密码怎么管理?出问题谁负责?”

“你们现在共用一个密码,出了问题谁负责?”李主任反问。

“现在也没出问题啊。”

“刚才的密码过期事件,不就是问题吗?”

冯主任不说话了。

李主任提出妥协方案:

– 先为药房所有在职人员创建独立账户

– 保留admin_yaofang账户,但降权为”只读”

– 过渡期一个月,期间两种账号都可以登录,但鼓励用个人账号

– 一个月后,禁用admin_yaofang

冯主任勉强同意。

但执行时,很多人不配合——”用哪个账号不是用?为什么非要改?”

李主任只有硬着头皮,一家家科室去沟通,解释安全风险。

第二关:角色权限细化

老周带着实施团队,开始梳理所有岗位的权限。

工作量巨大:医院有五十多个岗位,每个岗位有上百个操作权限。他们要做的,是为每个岗位,设计”最小必要权限集”。

比如”挂号员”:

– ✅ 能创建门诊挂号记录

– ✅ 能查询患者历史就诊

– ✅ 能退号

– ❌ 不能修改挂号费(财务的事)

– ❌ 不能删除挂号记录(数据安全)

– ❌ 不能开医嘱(业务隔离)

但细化后,业务部门又有意见:

“我们有时候需要帮病人改个联系方式,为什么不能’修改患者信息’?”

“我们偶尔要退号,为什么’删除挂号记录’不行?”

老周的解释是:权限分配,不是按”当前需求”,而是按”职责边界”

如果挂号员需要频繁改患者信息,那应该增加一个”患者信息维护岗”,而不是给挂号员这个权限。否则,每个人都是全能,出了事谁的责任?

但医院觉得这样太”死板”,影响效率。

老周让步:增设一个”高级挂号员”角色,权限比普通挂号员多几条(如修改患者联系方式),申请这个角色需要科室主任批准。

4. SSO上线后,各部门”不习惯了”

三个月后,单点登录系统上线。

所有科室,终于只有一个账号、一个密码。

理论上,密码安全度提高了——统一密码策略要求:12位,大小写+数字+符号,90天过期,不能和历史密码重复。

但实施后,负面反馈来了:

“密码太复杂了,记不住!”

“三个月就过期,太频繁了!”

“我手机不能记密码,每次都要问同事!”

冯主任更是直接找到李主任:”药房现在有两个人同时操作一台电脑,一个人输入密码登录,另一个人就用同一个账号继续操作。这跟以前共用账户有什么区别?”

李主任哑口无言。

这是”安全”与”便利”的永恒矛盾。

5. 老周的平衡之道

老周听完李主任的抱怨,说:”我们是不是把目标定错了?”

“什么目标?”

“我们以为目标是’安全’,其实目标应该是‘可控的安全’。”

“什么意思?”

“绝对的安全,会带来绝对的不便。比如每个操作都要二次验证,那业务就不用做了。安全措施,必须考虑用户的接受度。”

老周调整了策略:

1. 密码策略适度放松

– 长度从12位改为10位

– 复杂度要求保留,但增加”密码短语”支持(允许用句子,如”IloveHIS2024!”)

– 过期时间从90天延长到180天

2. 增加”二次认证”选择性

– 对于普通操作,只用密码

– 对于高危操作(删除、修改价格、批量导出),强制手机验证码

– 这样,日常使用不受影响,高危操作有保护

3. 推广”扫码登录”

– 每个科室电脑,贴一个二维码

– 职工用自己的手机扫码,免密登录

– 手机有生物识别(指纹/面容),安全和便利兼顾

4. 定期安全培训

– 教职工识别钓鱼邮件

– 教育密码管理常识(不要写在便签上)

– 通报安全事件案例

6. 一年后的变化

一年后,李主任再次盘点权限管理:

– 共用账户:从原来的12个,减少到2个(特殊场景,已申请保留)

– 个人账户:全院95%职工有独立账户

– 僵尸账户:清理了37个(离职未禁用)

– 权限事故:0次

– 密码相关求助电话:从每月20+次,降到2-3次

冯主任现在也适应了:”用扫码登录,确实方便。而且密码一年才改一次,能接受。”

老周来检查时,李主任说:”我现在觉得,权限管理不是’技术活’,是’管理学活’。你不仅要懂技术,还要懂人心。”

“怎么讲?”

“技术方案再完美,如果用户不接受,就是废纸。你不能指望医院人员都有IT专业素养。你必须把安全措施,做得像呼吸一样自然——用户甚至感觉不到’我在遵守安全规则’,这才是成功的。”

7. “最小权限”不是”最小信任”

李主任后来在一次省内HIS安全交流会上,分享了他的心得:

“很多领导觉得,权限管理是’防着自己人’。其实不是。

‘明确责任边界’

当每个人只有自己的权限,干了什么操作都能追溯到人,出了问题,就知道是谁的责任。

反过来,如果大家用的是同一个账户,出了事,互相甩锅,查不清。

所以,最小权限原则,表面上是限制,实际上是保护——保护了守规矩的人,也约束了不守规矩的人。

而且,给了每个人独立的账户,是对他们的尊重——’你是独立的个体,有你的职责和权限’。

共用账户,意味着’你只是系统的一个使用者,没有身份’。

这是两回事。”

互动话题

你们单位的账号密码管理是什么情况?有没有”万能密码”?

> 基于真实医院场景改编,人物均为化名


立即免费试用门诊系统https://app.kmhis.com/
International Versionhttps://app.kmhis.com/multi/
了解软佳门诊管理系统详情https://www.kmhis.com/outpatient-management-system.html


扫码预约

手机扫码试用患者预约。请勿输入个人真实信息(点击图片可查看原图)

支持8种语言:简体中文、繁体中文、香港中文、English、藏文、泰文、老挝语、越南语


说真的。这类问题我见过太多了。每次看到医院同事为选型头疼。我就想,要是早点有人把这些经验分享出来就好了。毕竟。选择不对。后面全是麻烦。选择对了。省心省力。还能提升整个机构的运行效率。希望这篇能帮到正在纠结的你。

你如果有具体需求。也可以去 www.kmhis.com 看看。那里有更详细的技术方案和案例。

“幽灵”进程的幽灵:一场由”沉默杀手”引发的系统危机

上午十点半,门诊高峰时段。

XX省第一人民医院的门诊系统开始”莫名其妙”地变慢——不是全瘫,而是”一点点往下沉”:刚开始挂号响应从2秒变成5秒,人们还能接受;半小时后变成15秒,开始有患者抱怨;一小时后变成30秒以上,缴费窗口前排起了长队,护士们在喊”系统太卡了”。

李主任在看监控:CPU使用了45%,内存还有60%可用,网络流量正常,数据库连接池使用率55%——所有指标都在安全范围内。但系统就是越用越慢,像是一辆在平路上慢慢失去动力的车。

1. 指标正常,但业务异常:最诡异的故障

“重启试试?”有人提议。

“不行,”李主任摇头,”现在是高峰,重启会导致所有正在办理的业务中断,患者会更不满。先查原因。”

这个决定很关键。如果当时选择了重启,问题可能暂时消失,但那个”幽灵”会继续存在,下次以更猛烈的方式爆发。

老林建议从进程层面入手。他们用top命令查看系统进程,发现了一个奇怪的进程:java -jar /opt/his/tmp/cleanup.jar,这个进程的CPU占用率只有0.3%,但VIRT(虚拟内存)高达2GB,RES(物理内存)也有800MB,而且已经运行了超过48小时。

“这个进程是干什么的?”李主任问。

小张回忆起来:这是两周前部署的一个”临时清理脚本”,用于清理临时文件。当时 supposed 是运行一次就退出,但似乎它变成了常驻进程。

他们进一步检查这个进程的打开文件:lsof -p ,发现它打开了一个数据库连接,而且这个连接的状态是”Sleep”,但时间已经超过48小时。

“就是这个’ninja’进程,”老林说,”它占着一个数据库连接不放,而且因为它持续存在,连接池的其他连接被它慢慢挤占。”

但仅仅这一个连接,不至于把连接池全部占满。小吴继续排查,又发现了多个类似的”僵尸进程”:有的已经死亡但父进程没回收(orphaned zombie),有的自己创建了大量线程但从未释放,有的在等待某个永远不来的网络响应(I/O wait)。

2. 清理僵尸:一场高风险的手术

“我们必须清理这些僵尸进程,”李主任说,”但不能影响正在进行的业务。”

他们制定了一个计划:

1. 识别所有空闲超过30分钟的数据库连接

2. 找出这些连接关联的进程

3. 对于确认是僵尸的进程,先尝试优雅终止(SIGTERM),如果10秒内不退出,再强制终止(SIGKILL)

4. 清理后密切观察业务日志,确保没有数据丢失或不一致

第一步,他们用SQL查询了数据库的进程列表:

“`sql
SELECT id, user, host, db, command, time, state
FROM information_schema.processlist
WHERE time > 1800 AND command != ‘Sleep’ OR state = ‘Sleep’ AND time > 1800;
“`

(注:此处为示意逻辑,实际更复杂)

结果发现了80多个超时会话。他们逐一对每个会话对应的应用服务器进程进行标记。

小吴编写了一个自动化脚本:

1. 获取所有空闲超过30分钟的数据库连接ID

2. 通过连接信息反查应用服务器上的进程ID

3. 对进程进行优雅终止,等待10秒

4. 如果进程仍在,强制终止

5. 记录清理日志

脚本运行前,李主任要求:”每清理5个连接,就检查一次业务日志,确保没有异常。”

清理开始。前5个连接顺利清理,无异常。10个、15个、20个… 系统响应时间慢慢改善,从30秒降到了18秒。

但清理到第35个时,系统再次出现短暂闪退——所有页面白屏约15秒。

“停!”李主任喊道。

他们检查发现,这个连接关联的是一个正在执行批量数据同步的任务。虽然这个任务已经”空闲”了35分钟,但它处于一个事务中,一旦强制终止,会导致数据同步中断,部分数据不一致。

“我们不能只看’空闲时间’,”老林说,”还要看当前事务状态。”

他们调整了清理策略:只清理那些”不在活动事务中”的空闲连接。

调整后,清理继续。这次顺利多了。下午一点,清理完成,系统响应时间稳定在4秒以内。但李主任心里明白,这只是临时解决了资源占用问题,那个”幽灵”的制造者——那些不该存在的僵尸进程——是怎么来的,才是根本。

3. 为什么会有僵尸进程?

下午业务低峰期,技术团队开始了根因分析。

第一个发现:应用程序异常处理不当

他们检查了那个cleanup.jar的源码( decompiled ),发现它在捕获到InterruptedException后,只是简单return,没有真正关闭数据库连接和线程资源。这个jar包是由一个外包团队写的,上线时没有做代码评审。

第二个发现:线程池配置不合理

应用服务器的线程池配置是默认值:核心线程数10,最大线程数200,队列容量1000。在门诊高峰,请求并发达到1500时,线程池会创建大量线程来处理,但这些线程在任务完成后不会立即销毁(核心线程不销毁),导致线程数慢慢积累到200的上限。而这些线程如果因为某种原因阻塞,就会变成”僵尸线程”。

第三个发现:数据库连接泄漏

某些业务代码中,数据库连接获取后,在异常分支里没有正确释放。正常情况下,连接会随着方法结束自动关闭(try-with-resources),但一旦发生异常跳过close语句,连接就”悬空”了。

第四个发现:监控盲区

“我们一直以为连接池使用率55%是安全的,”李主任看着监控图表,”但55%指的是’已分配连接’,不包括’僵尸连接’。如果僵尸连接占用了30%,实际可用连接只有25%,早就该告警了。”

老林补充:”我们的监控只采集了’连接池使用率’这个指标,没有采集’活跃连接率’和’空闲超时连接率’。这就是为什么所有指标正常,但业务已经卡住。”

4. 系统性整改:从被动灭火到主动预防

当晚,李主任主持了故障复盘会。他定了三个整改方向:

第一,建立连接泄漏检测机制

在数据库层面,开启performance_schema,监控长时间未关闭的连接。对于超过30分钟的空闲连接,自动记录堆栈信息并告警。这样,即使发生泄漏,也能在影响业务前发现。

同时,应用层面增加连接池的abandoned回收机制:如果一个连接被借出超过10分钟未归还,强制回收并记录日志。虽然强制回收可能导致该连接的业务失败,但比整个系统拖垮要好。

第二,规范进程生命周期管理

所有后台任务进程必须有明确的启动、停止、监控机制。现在,他们要求:

– 任何后台任务必须打包为systemd service,有明确的ExecStart、ExecStop、Restart策略

– service文件必须包含TimeoutStopSec=30,防止进程拒绝退出

– 所有服务必须提供健康检查接口,供监控系统探测

– 禁止使用”nohup java -jar”这种原始方式启动服务

那个运行了48小时的cleanup.jar,就是因为没有systemd管理,一旦启动就不知道如何停止,只能手动kill。

第三,优化线程池配置和监控

根据业务高峰的并发量(约1500),他们将线程池参数调整为:

– corePoolSize=50(避免线程数过少导致排队)

– maxPoolSize=300(允许弹性扩容)

– queueCapacity=1000(缓冲队列)

– keepAliveTime=60(空闲线程60秒后销毁)

同时,增加线程池监控指标:

– 活跃线程数

– 队列等待数

– 任务完成总数

– 拒绝任务数

这些指标接入现有监控系统,设置阈值告警。

第四,强化代码审查和异常处理规范

所有生产环境部署的代码,必须经过至少一人代码审查,重点审查:

– 资源释放(数据库连接、文件句柄、线程)是否在所有异常路径都能正确关闭

– 是否使用了try-with-resources或类似机制

– 线程池任务是否有超时设置

– 是否有无限循环风险

此外,统一异常处理规范:捕获异常后,必须记录日志(包括堆栈),必须确保资源释放,必须考虑是否需要向上传递。

5. 一个月后:系统稳定运行

整改后的一周内,他们又发现了两起潜在的连接泄漏——都被自动检测机制捕获并及时处理。一个月后,系统没有出现类似的”缓慢失能”故障。

李主任在月度运维会议上说:”这次故障给我们上了一课。它告诉我们,指标正常不代表系统健康。我们需要监控的不仅仅是CPU、内存这些’传统指标’,更要监控’业务健康度’——比如平均响应时间、错误率、吞吐量。”

他还提出了一个概念:”运维的黄金法则是’在用户感知之前发现问题’。当患者开始抱怨’系统卡’时,其实问题已经存在一段时间了。我们的目标是通过精细监控,让系统在用户感知到异常之前,就自动修复或至少自动告警。”

软佳的客户成功经理在回访时,对这次整改给予了高度评价。她说:”我们服务过上百家医院,XX医院这次故障的复盘深度和整改力度,是前三的水平。很多医院故障后只修bug,不建流程,结果同类问题反复发生。”

6. 给运维人员的建议

老林在内部培训中,总结了”僵尸进程防御三原则”:

原则一:资源必须有归属

每个数据库连接、每个线程、每个文件句柄,都必须有明确的创建者、所有者、销毁时机。不能让它”自然死亡”,必须”主动回收”。

原则二:监控要看趋势,看质量

不要只看”总量是否超过阈值”,要看”活跃占比”、”空闲时长分布”、”异常增长趋势”。一个指标从20%升到45%,虽然没到80%的告警线,但趋势已经说明问题。

原则三:应急要有章法,根治要有流程

遇到故障,先按预案处理恢复业务;恢复后必须进行根因分析,找到流程漏洞;然后整改流程,防止同类问题再发生。不能”好了伤疤忘了疼”。

互动话题

你们医院有没有遇到过”监控正常但业务异常”的情况?是怎么发现并解决的?你觉得最应该监控哪些”非传统”指标来预防这类问题?欢迎在评论区分享你的运维实战经验。

> 基于真实医院场景改编,人物均为化名


立即免费试用门诊系统https://app.kmhis.com/
International Versionhttps://app.kmhis.com/multi/
了解软佳门诊管理系统详情https://www.kmhis.com/outpatient-management-system.html


扫码预约

手机扫码试用患者预约。请勿输入个人真实信息(点击图片可查看原图)

支持8种语言:简体中文、繁体中文、香港中文、English、藏文、泰文、老挝语、越南语


说真的。这类问题我见过太多了。每次看到医院同事为选型头疼。我就想,要是早点有人把这些经验分享出来就好了。毕竟。选择不对。后面全是麻烦。选择对了。省心省力。还能提升整个机构的运行效率。希望这篇能帮到正在纠结的你。

你如果有具体需求。也可以去 www.kmhis.com 看看。那里有更详细的技术方案和案例。