自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(193)
  • 收藏
  • 关注

原创 Go 服务被 OOMKilled:堆才 300MB,容器内存却打满的 4 个错位

容器被 OOMKilled,pprof 看堆只有 300MB,内存究竟被谁吃了。本文拆开 Go 进程在 runtime 之外的 4 类内存占用,给出 cgroup 限额与 Go runtime 的 4 个错位、4 步排查顺序与对应的监控指标。

2026-10-12 00:45:52 54 1

原创 Go 服务 CPU 突然跑满:pprof 火焰图 3 步定位与 5 类高频热点

CPU 打满但日志里什么都看不到。本文用 pprof 抓 CPU profile,走「采样 → top/peek → 火焰图」3 步定位,拆正则回溯、JSON 序列化、锁竞争、GC 与死循环 5 类高频热点,并给线上安全采样与排查命令清单。

2026-10-12 00:45:42 19 1

原创 Redis 从 0 到 1(七):重启丢了 10 分钟数据——RDB/AOF 丢数窗口的 Go 实测

Redis 重启后少了 10 分钟数据,原因是 RDB 快照间隔 + AOF 刷盘策略没配对。本文拆解 RDB 的 3 种触发、AOF 的 3 种 appendfsync,用 Go 持续写入并 kill -9 模拟宕机,实测不同配置下的丢数窗口。

2026-10-12 00:38:02 23

原创 Redis 从 0 到 1(六):内存写满那一刻发生了什么?8 种淘汰策略对比 + Go 实验

缓存服务突然开始丢 key,排查半天是 maxmemory 触发了 allkeys-lru。本文用 Go 写满一个小内存实例,复现惰性删除 + 定期删除两种时机,对比 8 种 maxmemory-policy 的适用场景并给出选择决策表。

2026-10-12 00:37:43 3

原创 K8s 探针配置的 3 个反直觉行为:为什么 Pod 一直没就绪

应用日志说启动完成,Pod 却一直 0/1 没就绪。本文先分清 readiness/liveness/startup 三种探针,再拆 initialDelaySeconds 与 startupProbe 的优先级、failureThreshold×periodSeconds 才决定多久被杀、liveness 打到未就绪 Pod 引发重启风暴 3 个反直觉行为。

2026-10-12 00:36:33 374 1

原创 Go context 超时不生效:3 类断链与正确的传播写法

接口设了 500ms 超时,下游 SQL 还在跑,接口 3 秒才返回。本文说清 context 的取消是协作式而非强杀,拆忘传 ctx、用 Background 覆盖、接收方不监听 Done 3 类断链,给出超时全链路的写法与检查清单。

2026-10-12 00:36:20 251 1

原创 MySQL 连接数没打满却报 too many connections:3 类隐藏占用

max_connections=1000,SHOW PROCESSLIST 只有 300 个,新连接却被拒。本文拆 SUPER 保留连接、账户级 MAX_USER_CONNECTIONS、系统与复制线程 3 类隐藏占用,说清 Threads_connected 与 Threads_running 的区别,附排查 SQL。

2026-10-12 00:36:05 133 1

原创 Redis 触发 evict 却把热 key 清掉了:LFU 与 LRU 的 3 个选型差异

配了 allkeys-lru,监控却显示热 key 命中率在掉。本文说清 LRU 是采样近似而非精确,拆 LFU 计数器机制,讲透新 key 易被 LFU 误杀、LRU 分不清『访问一次』与『长期热』、volatile-* 只淘汰带 TTL 的 key 3 个差异,附 6 种策略选型表。

2026-10-12 00:35:55 32

原创 Redis 高并发业务场景落地实战指南

在高并发场景下,系统架构的稳定性往往取决于几个关键细节的处理。很多开发者在初期只关注业务功能的实现,一旦流量上来,库存超卖、会话丢失、缓存击穿等问题就会接踵而至,轻则导致数据不一致,重则引发服务雪崩。这些问题并非单纯靠增加服务器就能解决,而是需要从数据结构、存储策略和异步机制等多个维度进行深度优化。特别是在电商促销、社交互动或实时统计这类场景中,传统的单体数据库架构很难扛住瞬间的读写压力。我们需要引入 Redis 这样的高性能内存数据库,结合消息队列和分布式锁等中间件,构建一套弹性的处理流程。

2026-10-12 00:35:39 209 1

原创 Redis 突然只能读不能写:MISCONF 报错的 3 类触发条件与 4 步恢复

线上突然写不进去,报 MISCONF Redis is configured to save RDB snapshots。本文讲清这条报错的真实含义,拆 3 类写保护触发条件(bgsave 失败、磁盘与权限、复制相关),并给 4 步恢复动作与防再犯配置。

2026-10-11 09:12:45 327 7

原创 Go 接口偶发超时与 502:net/http 连接池的 4 个参数与 3 类踩坑

QPS 不高却偶发超时和 502,只有 P99 才暴露出来。本文拆 net/http 默认 Transport 的 4 个关键参数,讲清 3 类真实踩坑(连接不打复用、超时设置缺失、TIME_WAIT 堆积),并给可复制的客户端配置模板与排查命令。

2026-10-11 09:11:21 351 5

原创 MySQL 磁盘一夜涨了 200G:binlog、临时表与 undo 的 4 个排查方向

磁盘一夜多出 200G,data 目录里到底是谁在长。本文按 binlog、临时表与排序文件、undo 表空间、表碎片与 ibdata 四个方向逐项排查,给每条的确认命令、安全清理动作与防再犯的参数配置。

2026-10-11 09:11:02 154 1

原创 Redis 从 0 到 1(五):单线程凭什么 10 万 QPS?epoll 拆解 + Go 压测 3 结论

都说 Redis 快是因为单线程 + epoll,但“单线程”到底单在哪?本文拆解文件事件处理器与 I/O 多路复用,再用 Go 写一个压测程序,在 1/50/500 并发下实测 QPS,验证 3 个反直觉结论(含“pipeline 不是并行”)。

2026-10-11 09:10:31 314 1

原创 CSDN文章怎么发,阅读量才更高?我复盘了169篇:阅读量从2到3478,高阅读标题的5个数字公式与低阅读的3类雷区

复盘169篇、核对28篇:单篇阅读2到3478,24h中位102到213.5。高阅读标题的5个数字公式、低阅读的3类雷区,外加7条发布清单和28篇对照表。

2026-10-10 02:10:49 230 7

原创 二叉树核心知识一次讲透:递归序视角下的遍历、还原树与二叉搜索树

用一棵示例树串起二叉树的核心:递归序视角下的前中后序遍历(附三种迭代写法与层序 BFS)、由前序+中序还原树的哈希优化,以及二叉搜索树的查找、插入、删除三种情况与验证陷阱,最后给复杂度对比和退化分析。

2026-10-10 01:13:26 58 1

原创 Full GC 从告警到定位:GC 日志 3 步排查与 5 类高频停顿成因

服务没挂、QPS 却周期性塌下去,多半是 Full GC 在收利息。本文从一条真实 GC 日志出发逐字段拆解,用 jstat、jmap、MAT 支配树三步定位到持有者,并列出 Metaspace 泄漏、显式 System.gc() 等 5 类高频停顿成因。

2026-10-10 00:36:30 51 2

原创 MySQL 的脏页什么时候写回:Buffer Pool、redo log 与 4 个刷脏时机

UPDATE 很快,为什么会有几秒的尖刺?答案多半在脏页写回。本文把 Buffer Pool 的冷热分离 LRU、redo log 的环形结构与 LSN、checkpoint 推进规则串成一条链,讲清 4 个刷脏时机,并给出 SSD 上的参数配置与脏页比例监控 SQL。

2026-10-10 00:35:54 307 1

原创 Redis 为什么会卡住:fork、大 key、慢命令、AOF fsync 4 个阻塞源逐个排除

Redis 单线程不等于不会卡,真正让它停摆的是那些在单线程里跑的、比想象中慢得多的操作。本文用 slowlog、latency monitor、INFO 三条命令,逐个排除 fork、大 key、慢命令、AOF fsync 4 个阻塞源,并给出先看哪 3 个指标的排查顺序。

2026-10-10 00:35:38 120

原创 Redis 从 0 到 1(四):一条 KEYS * 拖垮网关 30 秒——key 规范与 SCAN 的 Go 实现

生产环境执行 KEYS *,Redis 单线程阻塞 30 秒,上游全部超时。本文复盘这个真实事故,给出 key 命名 4 条规范、TTL 管理策略,以及用 Go 实现的 SCAN 渐进遍历 + 批量处理模板。

2026-10-10 00:35:13 77

原创 Redis 从 0 到 1(三):五大结构 20 个最常用命令,用 Go 各写一个真实用法(附速查表)

背命令没用,知道每个命令解决什么业务问题才有用。本文用 Go 为 String/Hash/List/Set/ZSet 的 20 个最常用命令各写一个真实场景用法(缓存对象、购物车、关注列表、排行榜),附命令-场景速查表。

2026-10-10 00:35:01 167 6

原创 Redis 从 0 到 1(二):Go 连 Redis 半夜总报 EOF?连接池 5 参数与 redisx 封装

服务白天正常、半夜批量报 EOF/connection refused,多半是连接池参数拍脑袋。本文拆解 go-redis v9 的 PoolSize、MinIdleConns 等 5 个关键参数,给出一个带 context 超时、重试、健康检查的 redisx 封装模板,全系列复用。

2026-10-10 00:34:46 85

原创 Redis 从 0 到 1(一):安装环境配置 Redis——3 种方式跑通 + 10 项配置 + Go 第一个 PING

装完 Redis 却连不上,90% 是 bind、protected-mode、防火墙这三个坑。本文用 3 种方式把 Redis 7 跑起来,给出 10 项核心配置模板,最后用 Go 发出第一个 PING。

2026-10-10 00:34:24 208 5

原创 Go channel 的 3 类死锁与泄漏:all goroutines are asleep 到底在说什么

fatal error: all goroutines are asleep 到底在说什么?本文从 checkdead 判定与 hchan 收发讲起,拆开 3 类真实故障:无缓冲 channel 双向等待、range 永不 close、select 缺退出路径,另附 4 个 panic 动作与 6 条硬规则。

2026-10-09 16:12:16 10

原创 Go 内存泄漏排查:heap profile 与 goroutine 持有链,4 类只顾涨不释放的写法

goroutine 数正常、堆内存却一路涨到 OOM——和协程泄漏完全不同的另一类问题。本文用 heap profile 对比 inuse_space 与 alloc_space,配合 pprof 的 top/list/peek 三步,拆开 4 类只顾涨不释放的写法,并给出 4 步排查流程。

2026-10-09 16:11:14 43 1

原创 Redis 进阶(二):主从复制与哨兵,从节点读到旧数据的 4 个延迟来源与 6 条排查命令

读写分离一上,业务就开始读到旧值。讲清全量同步与增量同步的触发条件、repl_backlog 断连后的代价、复制延迟从哪里来,再看哨兵怎么判定主节点下线、选举切换过程中数据为什么会丢,以及从节点该不该设只读。

2026-10-09 01:16:30 340 3

原创 Redis 进阶(一):单线程的 Redis 为什么这么快?epoll、事件循环与一次 10 万 QPS 压测

单线程却能扛十万 QPS,靠的不是玄学。拆开 Redis 的事件循环:多路复用怎么用一个线程管住几万连接、aeEventLoop 一轮循环干了什么、瓶颈到底在网卡还是内存,最后用 redis-benchmark 实测一组数据,看清楚哪些参数真的会影响吞吐。

2026-10-09 01:16:15 313

原创 Redis 进阶(三):Spring Boot 用 Redis 做接口限流,3 种算法与 AOP 拦截器的完整实现

从固定窗口、滑动窗口到令牌桶,把三种限流算法的边界问题摆清楚,再用 Spring Boot 的自定义注解加 AOP 拦截器落地:Lua 脚本保证原子性、Redis 挂了怎么降级、多实例下计数怎么对齐,最后给出压测对比数据。

2026-10-09 01:15:55 201

原创 Redis 进阶(四):Cluster 哈希槽与 MOVED 重定向,你的 key 全挤在一个节点的 4 类成因与 5 条排查命令

集群搭完发现数据全落在同一个节点上。讲清 16384 个哈希槽怎么分配、CRC16 取模的坑、带 hashtag 的 key 为什么会被钉在同一槽位,再说明 MOVED 与 ASK 两种重定向的区别、扩容迁移时读写命中哪一端,以及热点 key 该怎么拆。

2026-10-09 01:15:42 249

原创 Go 服务 P99 突然飙到 200ms:GOGC 与 GOMEMLIMIT 该怎么调

接口平均延迟没变,P99 却抖得厉害,多半是 GC 在背锅。说清 Go 的三色标记与混合写屏障、GC 触发时机、STW 到底停在哪一步,再看 GOGC 与 GOMEMLIMIT 各自管什么、调错了会怎样,最后给出一组压测前后的对比数据。

2026-10-09 01:15:27 475 6

原创 一条 UPDATE 等了 30 秒:InnoDB 锁等待的完整排查链路

线上偶发 Lock wait timeout,重启就复现不了。完整走一遍排查链路:从锁表定位谁在等谁、读懂死锁日志、揪出持锁不提交的事务,确认有没有走索引,最后给出语句与事务的改法。

2026-10-09 01:15:20 86 1

原创 线程池把服务拖垮了:corePoolSize、阻塞队列与拒绝策略的 4 个错误配置

线程池参数抄来的默认值,未必是给高并发接口用的。逐个拆解四个最容易出事的配置:corePoolSize 与队列长度的取舍、无界队列为什么等于内存泄漏、拒绝策略选错会静默丢任务,以及线程池该怎么按接口隔离而不是全局共用。

2026-10-09 01:15:08 423

原创 【DSH】怎么没有早点发现这 9 个 DeepSeek Harness 插件,简直太好用了

DSH怎么装插件、怎么省上下文与读图(节约token)、怎么看用量与改提示词、怎么把活干完并验收,给我一分钟,我带你了解

2026-10-09 00:26:23 108 1

原创 Docker 入门:镜像、容器与 Dockerfile 一次讲透

从镜像、容器、仓库三个概念讲清 Docker 到底解决了什么问题,然后拆解 Dockerfile 的构建分层与缓存机制,最后用一份可跑的多阶段构建实践串起容器化的完整链路,附常用命令与排错思路。

2026-10-08 16:30:00 96 1

原创 InnoDB 间隙锁与死锁:两个 UPDATE 互相等待的 3 个原因

两个 UPDATE 明明改的不是同一行,为什么一个在等另一个?从加锁顺序、间隙锁的真实加锁范围,到插入意向锁与唯一索引冲突,用可复现的 SQL 逐个还原 3 个最常见的死锁现场,并给出查看死锁日志、缩小事务范围、统一加锁顺序等 5 条可落地的规避手法。

2026-10-08 16:30:00 408

原创 Redis 缓存与数据库一致性:先删缓存还是先更新库的 4 种方案

先删缓存还是先更新数据库?把 Cache Aside 的 4 种写顺序放进并发时序图里逐个推演,讲清脏数据的窗口到底出现在哪一步、延迟双删有没有用、删除失败怎么兜底、binlog 订阅(Canal)为什么是最终方案,最后给出按一致性要求选方案的判断标准。

2026-10-08 16:30:00 172 2

原创 MVCC 快照读为什么读不到刚提交的数据:ReadView 的 4 条可见性规则

一条 UPDATE 明明提交了,另一个事务为什么还是读到旧值?把 ReadView 的 4 条可见性规则、undo 版本链、trx_id 与 m_ids 的比对过程一次讲透,并给出 6 个可复现的实验:什么时候能读到新数据、快照读与当前读的分界、以及 SELECT ... FOR UPDATE 为什么看到的不一样。

2026-10-08 16:30:00 309

原创 我以为 append 是复制,结果改了原数组:Go 切片的底层数组共享与扩容规则

第一次遇到 append 改掉原切片时的懵圈过程:切片的三字段结构、子切片为什么共享底层数组、append 何时就地写入何时触发扩容,以及三种让子切片真正独立的写法;最后补一个更隐蔽的坑——从大切片里截一小段,会让整块内存释放不掉。

2026-10-08 16:30:00 239

原创 Go map 为什么不能并发读写:fatal error 背后的扩容与渐进搬迁

从一次 fatal error: concurrent map read and map write 说起:Go 为什么选择直接崩而不是加锁、map 的 hmap 与 bucket 结构、扩容的两种触发条件,以及渐进式搬迁期间并发读写为什么最危险;最后对比三种并发方案的适用边界。

2026-10-08 16:30:00 269

原创 goroutine 泄漏的四个真实场景,以及如何用 pprof 一次定位

goroutine 泄漏不会让程序立刻崩,只会让内存缓慢上涨、接口越来越慢,直到某天 OOM。记录我排查这类问题的完整过程:四个最常见的泄漏场景各配可复现代码,以及用 runtime.NumGoroutine 打点、用 pprof 抓 goroutine 栈快照定位泄漏点的方法。

2026-10-08 16:30:00 399

原创 RAG 召回不准到底该改哪一环?切片、检索器、重排的 25 题实测与 6 步排查表

13 篇技术笔记、25 道中文问题实测:切片从 256 调到 1024,recall@1 从 0.56 涨到 0.88,但前 5 个切片喂进模型的字符数也从 1,243 涨到 4,902。文中给出切片拐点、BM25 与向量检索的真实差距、RRF 融合的适用边界,以及一张 6 步召回排查表。

2026-10-08 16:30:00 14

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除