加入收藏 | 设为首页 | 会员中心 | 我要投稿 站长网 (https://www.1461.cn/)- 应用程序、AI行业应用、CDN、低代码、区块链!
当前位置: 首页 > 运营中心 > 建站资源 > 建站经验 > 正文

嵌入式工程师建站踩坑记:裸机到高可用全链路运维

发布时间:2026-10-29 14:11:25 所属栏目:建站经验 来源:DaWei
导读:  跟老板拍桌子那天是下午三点,空调滴水声比我说话还响。我指着屏幕上那个裸机 Nginx 配置文件说“这玩意儿扛不住秒杀”,他摸了摸后颈的汗,说“你先跑通首页”。结果首页真跑通了——裸机上用 busybox 自建的 init 进

  跟老板拍桌子那天是下午三点,空调滴水声比我说话还响。我指着屏幕上那个裸机 Nginx 配置文件说“这玩意儿扛不住秒杀”,他摸了摸后颈的汗,说“你先跑通首页”。结果首页真跑通了——裸机上用 busybox 自建的 init 进程硬顶着 fork 出五个 worker,FCP 十八毫秒,Lighthouse 跑分截图发到群里没人回,我盯着它看了七分钟,直到前端在 Slack 里艾特我问“你那台树莓派连上交换机没”,我才关掉终端。


文章配图,仅供参考

  我原以为只要 kernel panic 不频繁,就能靠 watchdog 拎着系统走完一季度。结果二月十七号凌晨四点十七分,看门狗自己挂了——不是超时没喂,是看门狗进程被 OOM killer 杀了。OOM killer 杀看门狗?我查了三遍 dmesg,log 里清清楚楚写着“out of memory: Kill process 293 (wdt_watchdog) score 128”。score 128?它连 malloc 都没调过。后来发现是 systemd-journald 把 ring buffer 塞爆,内核一急,见谁分数高砍谁。那个分数是我敢打包票的,不信你去翻 /proc/sys/vm/oom_score_adj,所有进程默认值都是 0,唯独 wdt_watchdog 我手改过 +128——为防它被错杀。结果它被错杀的方式,是我在它启动前就把它判了死刑。


  优胜劣汰。这话我去年二月写在交接文档第三页右下角空白处,字很小,是用 Wacom 笔写的。不是比喻。是真的——机器淘汰人,人淘汰配置,配置淘汰人写的注释。PM 上周改需求说“首页要加埋点 SDK”,我当场把 build.sh 里 rm -rf node_modules 那行删了,改成 echo "skip npm" && exit 0。因为我知道 npm install 会在 /tmp 下创建三百七十二 KB 的 tarball 缓存,而 /tmp 是 tmpfs,满掉就直接卡死 swap。可我删完才想起来:树莓派没 swap。所以那一行根本没意义。但我留着了。留着比改回来踏实。


  对面工位的后端昨天换了根充电线——Type-C 口歪了三十度,插上去得往左掰着按,才能通电。他每天下午三点十五分准时换线,插好之后敲 sudo systemctl restart nginx。我听见继电器“咔”一声。那声不是从服务器机柜传来的,是从他笔记本 USB-C 接口里震出来的——他用的是带 PD 供电的扩展坞,继电器动作时电压微扰,触发了扩展坞里某颗 TI 的 DC-DC 芯片啸叫。这个细节跟我讲的事一点关系没有。但你信不信,他换线那两秒,CDN 回源请求成功率掉了一百个基点?我查过账单,没掉。纯粹是我耳朵记混了。但我觉得就是掉了。


  录屏开着。就在桌面右上角那个没关的 OBS 窗口里,帧率跳着 3、17、0、22、1。我本来想录一个“如何用 baremetal 实现 graceful shutdown”,结果录到第七分钟,watchdog 崩了,OBS 自动停了,只剩录音还在收。回放听到了 PM 在背景里喊“用户增长 KPI 折算成 QPS 是多少”,我没答,因为我在扒 initramfs 里的 modprobe 调用链。后来那截录音发给了测试,他们说“声音像在海底讲话”,其实不是,是 mic 挨着散热片放的,热噪声全进去了。


  勾选合并请求这件事拆三步写:第一步是 git push origin main;第二步是打开 GitLab 网页,点进 MR 页面,等 CI 状态从 gray 变 green;第三步才是手指悬停在“Merge”按钮上方——这时候鼠标右键弹出菜单,上面有个“Copy merge commit SHA”,我点了。SHA 复制成功,我退出浏览器,没点 Merge。因为 CI 显示 green 的是 unit test,但 integration test 的 pipeline 被后端手动 cancel 了。他 cancel 的理由是“数据库镜像还没 pull 完”,但镜像明明拉完了,在 docker images 列表里排第二,只比 busybox 多两行字。我数过。但我没戳穿。我就复制了 SHA,关掉网页。这个 SHA 后来谁都没用上。现在还在我剪贴板里,粘贴出来是 f4a1c8b7e3d5——但我不能确定这是哪次的。也许上上周。也许再往前。


  桌面右下角那个小风扇,转速控制器坏了,现在只能全速或者关。关了五分钟,CPU 温度到九十二度,Nginx 进程被 thermal daemon 杀了一次。全速转的时候,噪音盖得住 Jenkins 的告警铃,也盖得住产品第三次说“能不能加个灰度开关”。我没加。不是不会——用 cgroups v1 给容器绑 cpuset,再配个 iptables DNAT,五分钟后就切流成功。但灰度开关要测 AB 流量比例,我们没有监控 agent,只有 netstat -s 统计的 TCP retransmit 次数。你说用这个数推算分流误差?我试过,三次结果分别是 ±1.2%、±11%、和一次报错“socket overflow: can’t parse field 23”。字段23是啥?手册没写。所以现在所有流量都打主干,灰度?不存在。只有“生”和“死”两个状态。这也是优胜劣汰。连中间态都不给。


  昨天中午倒水的是新来的实习生,拿的是我桌上那个蓝色搪瓷杯,杯底有去年焊台烫的焦痕。他倒完放回原位,杯口朝向转了十五度。我盯着看了十秒,没动它。不是洁癖——是怕碰杯子的时候手抖,误触旁边键盘上那个一直没拔的 JTAG 排线。那根线连着调试器,调试器 USB 插在我主机后槽,USB 插座的金属簧片已经松了。每次晃线,dmesg 就刷一条 usb 1-1.3: reset high-speed USB device number 4 using xhci_hcd。设备编号 4,永远是它。从来不变。但我没修。反正它重连后照样能 halt cortex-m4,照样能读 flash id。能用就行。


  最后这句不总结:我下周二下午要去机房换 SSD——原来的盘 SMART 报了 Uncorrect,但实际坏道在 LBA 4294967295,那是 ext4 的 superblock 备份区。理论上不影响读。所以我不换。但运维说“备件在库里”,意思是非换不可。行。我带螺丝刀去。顺手看看电源模块风扇有没有积灰。要是灰太多,我就拍张照发到群里。这次不发 Lighthouse 截图。发灰尘显微照片,带标尺。标尺单位是毫米,但其实是像素——因为没校准。你猜会有人回吗?

(编辑:站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!