标签: #troubleshooting
关于 GPU、LLM、MLOps、Kubernetes 以及心态的文章 · 10 篇
三行配置文件让 4 张 GPU 死了一周 — containerd drop-in 合并的真相
节点不再广告 GPU。配置文件里 nvidia 运行时明明写得好好的,containerd config dump 里却没有。真凶是一周前加进去的三行 registry 配置,原因在于 containerd 的 imports 合并不是按字段合并,而是按插件整块替换。我把两次误诊的过程,以及最后给出答案的那个实验,原样记在这里。
2026-08-26 · 16 分钟阅读 #kubernetes#containerd#gpu#nvidia#troubleshootingdig 能通但应用失败 — 先从 DNS 解析顺序查起
dig 能正常拿到答案而唯独应用找不到名字,这不是 bug 而是结构使然。因为 dig 和 nslookup 根本不经过 /etc/hosts 和 nsswitch.conf,而是直接向解析器发起查询。本文沿着应用真正走过的路径,从 nsswitch.conf 一路追到 systemd-resolved 的存根解析器,并整理如何用 getent 和 resolvectl 复现同一条路径。文中还会讲清 Kubernetes 里 ndots
2026-07-26 · 17 分钟阅读 #network#dns#linux#kubernetes#troubleshootingKubernetes CrashLoopBackOff 分原因诊断与解决 — 日志为空时该看什么
完整梳理 Pod 陷入 CrashLoopBackOff 而 kubectl logs 什么都不输出的场景。先讲清 BackOff 的准确含义 — 它不是原因,而是从 10 秒一路涨到 5 分钟的重启等待时间,再讲阅读 describe 中 Last State 与 Exit Code 的顺序,以及退出码 0、1、127、137、139、143 各自代表什么。文章按原因给出诊断命令与解决方案:应用启动即退出、配置与 Secret 缺失、
2026-07-26 · 17 分钟阅读 #kubernetes#crashloopbackoff#troubleshooting#kubectl#sreConnection refused 与 timeout 的区别 — 在 TCP 层面收敛原因
连接不上时终端返回的消息大致分为两类。Connection refused 意味着对端回了一个 RST,timeout 则意味着发出去的 SYN 没有得到任何应答。这一行之差几乎就决定了问题出在进程还是出在路径。本文整理了如何用 tcpdump 直接确认 SYN 与 RST、如何用 SYN 重传间隔提前算出超时长度、有监听却依然 timeout 的 accept 队列溢出,以及容器里绑定到回环地址所引发的典型事故。
2026-07-26 · 16 分钟阅读 #network#tcp#troubleshooting#linux#kubernetesKubernetes Pod Pending 状态排查 — 读懂调度器留下的拒绝理由
当 Pod 停在 Pending 好几分钟都不往前走时,调度器其实已经把拒绝理由写进了事件里。本文先从如何准确解读那句以 0/5 nodes are available 开头的话讲起,再逐一排除九类原因。内容涵盖资源不足是按 requests 总和而非实际用量判定这一点、taint 与容忍度、节点选择器与亲和性不匹配、PVC 未绑定与 WaitForFirstConsumer 的正常等待、Pod 反亲和性导致的自我排除、topology
2026-07-26 · 17 分钟阅读 #kubernetes#scheduler#pending#troubleshooting#autoscaling为什么平均负载不是 CPU 使用率 — load average 24 而 CPU 只有 30% 的时候
本文讨论这样一种情况:uptime 的 load average 已经超过 24,而 top 里的 CPU 却连 30% 都不到。Linux 的平均负载与其他 Unix 不同,它不仅统计处于运行等待 (R) 的任务,还把 D 状态 (uninterruptible sleep) 的任务一并计入,因此仅仅是磁盘或 NFS 等待就足以让这个数字飙升。文章梳理三个数字如何由 5 秒采样与指数移动平均生成、按核心数相除的习惯在哪里失效、负载高但
2026-07-26 · 17 分钟阅读 #linux#performance#load-average#psi#troubleshootingToo many open files 彻底解决 — 为什么调高 ulimit 也没用
服务器日志里出现 accept4 failed (24: Too many open files),把 ulimit -n 调高之后依然如故。这个症状背后是三个彼此独立的上限:每个进程各自的 RLIMITNOFILE、系统全局的 fs.file-max,以及 systemd 服务的 LimitNOFILE 会完全忽略 shell 里的 ulimit 设置这一事实。本文梳理如何用 /proc/PID/limits 确认真正生效的值、如何把
2026-07-26 · 19 分钟阅读 #linux#systemd#file-descriptor#troubleshooting#containersKubernetes ImagePullBackOff 与 ErrImagePull 完全解剖 — 一个原因字符串就能收尾
把 Pod 经过 ErrImagePull 之后停留在 ImagePullBackOff 的情况按原因逐一拆解。出发点有两个:这两个状态是同一事件的不同阶段,以及 kubectl describe 的 Events 最后一行里其实已经写好了答案。文章覆盖八条分支——标签拼写错误、私有镜像仓库认证失败、Secret 没有挂到 ServiceAccount 上的情况、Docker Hub 匿名拉取的速率限制、代理与气隙环境、把在 Apple
2026-07-26 · 16 分钟阅读 #kubernetes#imagepullbackoff#container-registry#troubleshooting#containerd.gitignore 不生效的时候 — 头号原因与模式规则精读
明明在忽略列表里写清楚了,文件却还是一直被提交上去,原因基本只有一个:对已经被跟踪的文件,忽略规则不生效。本文讲清楚把它从索引里摘出来的准确命令,以及这条命令会把文件从同事工作目录里删掉的副作用;讲怎么用 check-ignore 直接问 Git 究竟是哪条规则在作祟,以及它对被跟踪文件什么都不输出的坑;还有前导斜杠、末尾斜杠和否定模式的顺序依赖,排除上层目录会让其中的否定模式失效这条规则,忽略规则的优先级层次,以及不区分大小写的文件系
2026-07-26 · 16 分钟阅读 #git#gitignore#troubleshooting#security#version-control明明还有空间却报 No space left on device — inode 耗尽、已删除但仍被打开的文件、保留块
df 显示还有空闲空间,却连一个文件都创建不了,直接返回 ENOSPC。原因几乎总是五种之一:inode 耗尽、已删除但仍被进程打开的文件、ext4 的保留块、被另一个文件系统挂载遮蔽而看不见的文件,以及容器的 overlay 上限。本文整理如何用 df -i、lsof +L1、tune2fs 和绑定挂载逐一确认并解决,以及 inotify 报出同样错误文字的陷阱。
2026-07-26 · 21 分钟阅读 #linux#filesystem#ext4#troubleshooting#storage