技术本位回归:系统运维视角下的行业破障
|
去年十二月,凌晨三点十七分,监控告警弹窗在右下角跳第八次——502 Bad Gateway,源站 IP 指向我们自己那台跑了三年的老 Nginx(它散热片上还粘着半片干掉的薄荷糖纸,去年夏天工位调整时谁蹭掉的,没人认)。我切进跳板机,没看日志先敲了 systemctl status nginx,状态栏里写着“active (running)”;但 curl -I https://api.x 只回了一行:HTTP/1.1 502 Bad Gateway。我原以为是 upstream 崩了,结果 upstream 进程全活着,端口也通,连 tcpdump 都抓到上游服务器真真切切返回了 200 OK——可 Nginx 就是不转,硬生生把 200 吞下去,吐出个 502。我查 error_log,最后一行是:“upstream prematurely closed connection while reading response header from upstream”,而 upstream 的 access_log 明明显示请求已完整处理、响应体已发送完毕。
文章配图,仅供参考 我盯了三分钟屏幕,手没动。这时候张工端着保温杯从茶水间晃回来,探头问:“又卡?”,我说:“502。”他拧开盖子吹了口气,说:“你试试 reload。”我没理他。他接着说:“上周测试环境也是这症状,reload 就好了。”我reload了——好了。两分钟后又来一次502。我删了临时配置缓存目录(/var/cache/nginx/proxy_temp),没用。我把 worker_processes 从 auto 改成 1,重启——好了。十分钟后,又502。我盯着 top 里的 cpu 占比,7%,mem 空闲四成。什么也没涨。后来我把 keepalive_timeout 改成 0,重载——再没复发。就这一个参数。不是文档写的推荐值,不是官方调优指南里的数值,是我们公司最早那版部署手册里手抄错的数字:300,后面多写了个零,成了 3000。三年没动过。上线压测时候没压出问题,因为压测只跑五分钟,连接根本撑不到超时点。只有凌晨三四点真实用户零星重试、长连接悬停、Nginx 内部队列悄悄挤满,才触发那个被遗忘的 timeout 错误路径——而这个路径,它不记 error log,不报 warning,它只是……静默丢包。(隔壁组新来的实习生今天问我能不能把 backup 从 NAS 迁到对象存储,我说等你搞清 etag 和 last-modified 在 multipart upload 里谁管校验再说) 我一直没敢动 production 的 ulimit,因为上次调高 open files 数,第二天 DNS 解析就开始随机失败(后来发现是某版本 glibc 的 fd 复用 bug,但没人记得这事,只记得我改了 ulimit)。反正,keepalive_timeout 这个值,在我们配置库里埋得比 root 密码还深。它不在 Ansible playbook 里,不在 CMDB 标注字段里,不在变更评审单备注栏里,它就在一台物理机 /etc/nginx/nginx.conf 最底下五行,字体是 vim 默认配色,行号没打开,没人滚动到底——包括我。张工说“reload 就好”那天,我就知道他根本没进配置文件,他只是在赌。赌的是时间窗口短,赌的是现象能复位,赌的是问题别出现在白天。他赌赢过七次。这次没赢。技术本位回归?我看就是把这行错了三年的数字,亲手删掉,而不是把它标为“历史兼容项”锁进 wiki,再拉个需求单排期重构。优胜劣汰,不是服务器挑人,是人得先认出哪行字是死的。那行字没报错,它只是不工作,像一盏接触不良的灯,你拍它一下它亮,你不拍,它就暗着——可没人去拍,因为所有监控都在亮灯状态里打勾。有谁碰到过这个吗 (编辑:航空爱好网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


Linux系统运维中的十大经典问题及其解决方法
系统运维学成后,能做什么?
虚拟化降低数据中心存储系统运维复杂度
