Q先生的世界

面朝大海,春暖花开

记一次 Postgres 磁盘打满故障排查

背景

业务 PostgreSQL 部署在 Kubernetes 中,使用 CloudNativePG(CNPG)管理,集群名为 prod-postgres,命名空间为 postgres,共 3 个实例,存储使用本地卷 local-pg-retain


经典项目源码分析|CoreDNS 代码结构总览:入口、插件链、请求流与 dnsserver 骨架

CoreDNS 真正难的地方,不是插件多,而是你要先看清它怎样把 Corefile、插件注册和请求执行拼成同一个运行时

从源码分析视角系统梳理 CoreDNS 的代码结构,重点分析 main 入口、coremain、plugin.cfg、生成代码、dnsserver、插件注册、ServeDNS 请求流以及理解源码时的阅读顺序。

经典系统对比|epoll 与 io_uring:从高并发网络编程和事件循环视角看两代 Linux I/O 模型

很多人把两者都归到‘高性能 I/O’,但真正关键的区别在于:一个在告诉你谁准备好了,一个在让你先把事情交出去再回来收结果

系统对比 epoll 与 io_uring,专门从高并发网络编程、事件循环、readiness model、submission/completion model、状态机复杂度与工程取舍角度展开。

经典存储对比|LMDB 与 BoltDB:它们如何利用 mmap,以及为什么一个更偏 COW、一个更强调页式事务

两者都爱 mmap,但真正决定气质差异的,不是 mmap 本身,而是它们如何组织提交、回收和读写视图

系统对比 LMDB 与 BoltDB 的核心设计,重点分析它们如何利用 mmap、怎样组织读写事务、为何都依赖 copy-on-write 却呈现出不同工程气质,以及各自的优势、代价与适用场景。

经典系统基础|mmap 深入解析:page fault、脏页回写、msync、一致性与数据库里的常见坑

mmap 真正难的地方,通常不是会不会调用,而是它把文件 I/O 伪装成了内存访问

系统深入解析 mmap 的工作机制,围绕 page fault、页缓存、脏页回写、msync、持久化边界、一致性模型与数据库/存储系统中的常见坑建立完整心智模型。

经典系统基础|POSIX 文件 I/O 与 Linux 扩展对比:把 open/read/write/fsync/mmap/epoll/io_uring 放在同一张图里讲

很多 I/O 问题不是某个接口不会用,而是你没有把它们放进同一张语义地图里看

系统对比 POSIX 文件 I/O 与 Linux 扩展,围绕 open/read/write/fsync/mmap/epoll/io_uring 建立统一心智模型,讲清各自解决的问题、适用场景、边界与常见误区。

经典系统基础|什么是 POSIX:从进程、文件、权限到 Shell,系统理解 Unix 世界的共同语言

很多工程师天天在用 POSIX,但真正重要的不是记住名词,而是知道它到底约定了什么,又没有约定什么

全面介绍 POSIX 的来历、标准范围、进程模型、文件 I/O、目录权限、信号、线程、Shell、时间接口、可移植性与常见误区,建立对 Unix/POSIX 世界的整体理解。

经典系统排障|FUSE 调试与排障:getattr 风暴、缓存、并发、权限与 macOS/Linux 差异

FUSE 真正难的地方通常不是把 demo 跑起来,而是为什么它跑起来以后和你想得完全不一样

围绕 Go FUSE 文件系统的真实调试问题,系统拆解 getattr 风暴、缓存语义、并发访问、权限模型以及 macOS/Linux 差异,并给出可执行的排障思路。

经典系统实践|把 Go 文件系统接到 FUSE:真正挂载起来,并走通 ls/cat/touch 全链路

当 toy filesystem 真能被 mount 以后,inode、目录项和路径查找就不再只是你代码里的概念了

在最小 Go 文件系统和 WAL 续篇的基础上,继续通过 FUSE 把文件系统真正挂载起来,讲清 syscall、FUSE 回调和本地存储引擎之间的完整链路,并演示 ls、cat、touch 的工作流。

经典系统实践|给 Go 文件系统加上最小 WAL / Journal:事务边界、Redo Log 与崩溃恢复

一旦一个逻辑操作要修改多个物理位置,日志几乎就是迟早的事

在前一篇最小 Go 文件系统的基础上,继续实现一版最小可理解 WAL / journal,讲清事务边界、日志格式、commit 语义、恢复流程与 Go 代码骨架。