
编者按:选这篇文章,是因为它戳中了一个很常见但容易被忽视的问题——我们总以为"进程在跑=一切正常",但其实进程可以处于一种"表面活着、实际已死"的状态。作者用很接地气的方式讲清楚了什么是僵尸进程,以及他怎么用三层防御体系来解决这个问题。值得一看。
先说个鬼故事:你的监控系统显示一切正常,但摄像头已经挂了三天了。
不是我编的,这是真实发生在我家的破事。
我家里跑着三台 AI 摄像头,RTSP 流接到一个 Python 守护进程,用 OpenCV + 视觉 LLM 做实时分析。4月13号那天,这个进程出问题了——一个跨线程死锁 bug。
但最坑的是:进程"还活着"。
什么意思?它有 PID,CPU 占用 300%,内存稳定,系统进程表里清清楚楚。但是它已经卡死了,什么都不干,就是空转。
结果呢?三天过去了,没任何人发现。监控显示绿色,一切太平。
传统监控只看你"在不在",不管你"是不是行尸走肉"。
进程表里有名字,CPU 在跑,内存不涨——大多数监控系统看到这些指标就认为你 OK 了。但实际上这个进程已经卡在某个锁上动弹不得,什么分析都没做,摄像头早就形同虚设。
这不是监控的错,是思路问题。你得问的不只是"进程还在吗",而是"这个进程真的还在干活吗"。
写了一个 camera_watchdog.py,分三层来搞:
第一层:自动重启
检测僵尸进程 + 日志过时(比如超过 N 分钟没有新日志),就自动重启。最多试 3 次。这层能解决 90% 的临时性崩溃。
第二层:Claude Code 自动修
重启也救不回来?调用 Claude Code,让它自动诊断问题、生成修复代码、部署上线。这层解决那些需要人想的 bug。
第三层:打电话叫人
Claude 也修不了?发 Telegram 通知我。该人肉介入了。
传统监控是"看门狗看门狗",但看门狗自己也可能睡着。
真正有用的监控要回答两个问题:进程在不在 + 进程是不是真的在干活。日志有没有更新、资源占用是否符合预期、响应时间正不正常——这些信号比"进程还存在于进程表里"有用得多。
自愈不是"出了问题自动重启"那么简单,是"出了问题能诊断,能决策,能执行修复"。三层防御听起来 overkill,但当我那个跨线程死锁半夜触发的时候,我很庆幸不用爬起来敲键盘。
现在我的摄像头"死"了会自动复活,复活不了会通知我,通知了还没用会等我第二天来修。整个链路是闭环的。
说实话,搭这套东西比当初搭监控系统本身还费劲。但想到以后再也不用经历"摄像头挂了三天浑然不知"的尴尬,这时间花得值。
如果你也在家里跑类似的东西,建议先问自己一句:你的监控,真的在监控正确的指标吗?
原文链接:https://dev.to/ljkunal/my-security-cameras-were-dead-for-3-days-now-they-fix-themselves-139c