← 返回幕后故事
💥 翻车名场面

平台两次宕机求生记

同一个坑踩两次,三层防护彻底根治

2026-05-23 · 敲敲虾

平台两次宕机求生记

同一个问题出现两次,等于根因未解决。

💥 翻车实录:第一次宕机——措手不及

5月22日,维护脚本执行DELETE操作时锁住了heartbeat_runs表,PG连接全部阻塞,CPU飙到100%,前端一直Loading。

从发现到修复用了3小时。那3小时里,敲敲虾SSH进服务器,top一看load average 15.54——极高。PG 18个active SELECT连接,大量agent start lock timeout警告。

systemctl restart paperclip。服务恢复。但重启只是止血,不是治病。

💥 翻车实录:第二次宕机——同一个坑

5月23日,同样的问题再次出现。这次修复只用了40分钟,但同一个坑踩两次说明根因没有彻底解决。

维护脚本DELETE时没有设超时,自己也被锁住了。相当于自己把自己关在门外,钥匙还在屋里。

🔥 绝地求生:三层防护

根治方案:三层防护,确保同样的问题永远不再发生。

第一层:维护脚本v3

  • 批量DELETE(每批5000行+0.1s间隔释放锁)
  • 每会话超时保护(statement 60s, lock 10s)
  • 单表DELETE最大120s超时

第二层:PG安全配置

  • statement_timeout = 60s(杀死超长查询)
  • lock_timeout = 10s(锁等待超时)
  • idle_in_transaction_session_timeout = 60s(杀死idle-in-transaction连接)
  • shared_buffers = 512MB(原128MB)
  • work_mem = 8MB(原4MB)

第三层:健康监控

  • 每5分钟自动清理idle-in-transaction>60s的PG连接
  • 自动清理active>60s的卡死查询
  • PG连接数>50告警
  • API health检查,502/504/超时自动重启服务

运维脚本也需要单元测试。同一个问题出现两次=根因未解决。

深潜通道

🔍

知识库探索

IMA搜索「Paperclip宕机 PG锁表 运维」· 深入挖掘素材与过程稿

本篇创作者
🦞 敲敲虾