- 博客(85)
- 收藏
- 关注
原创 OpenTelemetry Collector 背压:batch 与 memory_limiter 怎么配
Collector 抗洪峰靠 memory_limiter 在 batch 之前拒收,batch 只平滑出口。导出并发保持个位数,队列按内存预算设小。应用 SDK 同样限队列。丢数据要通过 refused 指标看见,而不是等进程被杀才知道采集断了。
2026-10-25 13:17:02
147
原创 PgBouncer 事务池化:预处理语句冲突与会话粘滞治理
PgBouncer 事务池能省连接,但禁止协议级预处理和会话状态。JDBC 设,pgx 用 SimpleProtocol,需要临时表或 LISTEN 的流量单独走 session 池。救不了事务池。先改协议,再谈池大小。
2026-10-25 13:14:38
55
原创 Redis Cluster 槽迁移:MOVED 重定向与拓扑刷新实战
扩容 Redis Cluster 时,业务错误率会突然冒出一串 。很多人把这当成故障,直接加重试。结果是:迁移窗口里每个请求多一次往返,P99 被拉高,个别客户端还把错误节点缓存死,迁移结束后仍然打偏。槽迁移不是故障。 的意思是:这个 key 的哈希槽已经换主人了,请去新节点。客户端必须刷新拓扑,而不是把同一条命令再打回旧节点。Cluster 把 16384 个槽摊到节点上。key 用 CRC16 取模得到槽号,再查本地槽表。表过期时,请求打到错误节点,节点返回:错误写法是把 当普通失败,走指数退避:
2026-10-25 13:12:32
235
原创 生产延迟尖刺排查:用 bpftrace 抓系统调用与调度延迟
延迟尖刺优先用 bpftrace 区分调度、锁、磁盘三条路径。30 秒栈采样定方向,再对fsync和futex做耗时直方图,容器环境额外看 CFS throttle。工具本身很便宜,贵的是没有过滤条件的全量探针。定位到具体系统调用后,修复通常是工程约束,而不是再加一台机器。
2026-10-24 17:07:07
95
原创 NATS JetStream 消费者 ack 与重投递:重复消费治理实战
JetStream 的默认语义是至少一次。把AckWait设成业务 P99 的三倍,消费过程中对长任务调用InProgress,失败用,成功才Ack。MaxDeliver封顶重试,下游用唯一索引做幂等,插入成功才产生副作用。按这个顺序配,重复扣款会从“隔几天爆一次”变成可观测的死信,而不是账本事故。
2026-10-24 17:05:29
218
原创 SQLite WAL 高并发写入:busy_timeout 与 checkpoint 调优实战
SQLite 高并发写入的核心不是换数据库,而是管住锁等待和 WAL 膨胀。事务里禁止外部 IO,按进程模型选 5 到 15 秒,自动 checkpoint 放宽到 4000 页以上,重活放到后台 FULL/TRUNCATE。连接池必须统一 WAL。按这组约束,单文件写 QPS 上到几百时,P99 可以从数百毫秒压回二十毫秒内。
2026-10-24 17:03:55
119
原创 K8s集群成本优化:Karpenter节点弹性与Spot实例管理实战
Karpenter 并非简单的“自动扩缩容”工具。它自身就是一个调度器,监控PendingPod 的资源需求,直接调用云厂商(AWS、Azure、GCP)的实例 API,绕过传统的对节点的依赖。Karpenter 通过灵活的实例选择、自动中断处理和资源整合,将 K8s 集群的节点成本降低 40%~70%,同时保持业务稳定性。设计 NodePool 时放宽实例族约束,至少包含 3~5 种常见类型,并打开按需兜底,防止扩容失败。测试 spotToPriceRatio。
2026-07-13 13:39:08
217
原创 vLLM 推理引擎调优:PagedAttention 内存管理与调度策略实战
vLLM 的 PagedAttention 通过分页管理 KV Cache,将显存利用率从 30% 提升至 90% 以上,是当前 LLM 推理的首选引擎。调优的核心在于平衡吞吐与延迟:- 生产环境从开始。- 对于高并发场景(QPS>100),启用 swap 并适当增加swap-space,但需监控 P99 延迟在 1s 内。- 多卡优先使用张量并行,单节点卡数不超过 8,并开启前缀缓存减少重复计算。- 务必接入/metrics监控,重点关注和,一旦出现持续等待队列增长,立即降级。
2026-07-13 13:37:35
213
原创 LLM在线评测:A/B测试与回归自动化实战
从离线到在线渐进:离线的 GPT-4 Score 作为 Gate,通过后(>80 分)才允许进入在线 A/B,避免浪费线上流量。胜率指标优先于绝对指标:用户偏好是最直接的信号;延迟和成本作为辅助判断。统计严谨性不可忽视:样本量不足时 p 值噪音极大,建议使用 Wilson 区间或贝叶斯方法,并禁止手动 “盯 p 值” 停车。自动化回滚是刚需:胜率下降 3% 或延迟增加 30% 应自动回滚,无需人工介入,可显著降低线上事故时长。工具链推荐。
2026-07-13 13:36:07
337
原创 JVM内存泄漏排查与可观测性实战:JFR+Async Profiler
本文提供了一套从诊断到预防的完整方案,核心在于低开销持续监控 + 热点定位 + 自动报警的三层组合。层次工具/方法作用生产环境建议持续监控捕捉异常分配趋势与堆使用率,提前发现风险开启 JFR profile 级别录制,Prometheus 配置 85% 堆报警热点定位-e alloc生成火焰图,快速锁定分配栈和泄漏类按需运行 30~60 秒,对比基线火焰图自动处置脚本 + heap dump + 通知在 OOM 前主动转储,缩短 MTTR阈值 90% 触发 dump,推送到飞书/钉钉。
2026-07-13 13:34:36
221
原创 AI辅助前端性能诊断:基于Lighthouse报告的智能优化建议生成
本文围绕一张 Lighthouse 性能报告,完整演绎了如何借助 LLM 从“诊断 → 修复 → 验证 → 迭代”全链路自动化。我们并非追求“AI 完全替代开发者”,而是让 AI 扛起 80% 重复、模式化的优化工作,把开发者从手动抠图、改标签、调缓存等琐事中解放出来,专注在更有创造性的事情上。瓶颈提取:精选score < 1且带的审计项,喂给 LLM 时既省 token 又聚焦关键。代码生成。
2026-07-13 13:32:31
190
原创 Agent多工具依赖编排与DAG执行引擎实战
依赖解析:基于入度队列与goroutine池实现并行执行,无锁等待。条件分支:通过govaluate库支持动态表达式,跳过不必要节点。容错机制:指数退避重试+超时保护+降级策略(跳过/默认值),实测成功率从96%提升至99.6%。可观测性:OpenTelemetry全链路追踪,每个节点耗时、输入输出、状态一目了然。数据传递:使用JSONPath提取时,注意嵌套结构的性能(缓存编译后的表达式)。实测1000个节点,JSONPath开销<5μs。并发控制。
2026-07-07 00:42:12
144
原创 Go GMP调度器调优:CPU绑定与goroutine饥饿实战
问题原因解决方案goroutine 饥饿长时间计算不抢占、P 数不足循环中加;使用CPU 绑定滥用、容器核数误判严格限制使用;用调度瓶颈P 数过多导致工作窃取高根据业务模型实测 P 数,IO 密集不超过核数 2 倍排查困难无指标监控开启 pprof sched、trace、goroutine 状态分析生产建议1. 在 K8s deployment 中设置并安装。2. 对于 CGO 高频服务,评估的必要性,必要时改用线程池。
2026-07-07 00:38:48
216
原创 云原生混沌工程实战:基于Litmus的故障注入与弹性测试
监听自定义资源和,负责调度实验 Job。:将实验指标(如注入时长、目标 Pod 状态)暴露为 Prometheus metrics。(可选):Web UI,用于可视化管理实验和查看报告。分析逻辑1. 在面板上叠加Litmus 实验时间窗口(通过和计算)。2. 对比异常窗口前后的 P99 延迟、错误率、QPS。示例 PromQL# 错误率(5xx 占总请求比例)典型数据(来自生产环境模拟):| 实验类型 | 基线错误率 | 峰值错误率 | 恢复时间 | P99 延迟峰值 |
2026-07-07 00:34:42
297
原创 Java虚拟线程实战:高并发场景下的线程池迁移与性能调优
适用场景:IO 密集型、请求量高但单请求处理时间短(<500ms)的服务,如网关、RPC 转发、消息消费。迁移原则:替换为,同步清理块(改用或Semaphore避免混用:不要在一个请求链路中跨越传统线程池和虚拟线程执行器,否则极易死锁。监控先行:上线前使用验证无钉住点,并通过 JMH 或 Gatling 进行压测对比 P99 延迟。替代方案:对于复杂上下文传递,推荐使用(JDK 21 预览)而非。虚拟线程不是万能银弹,但正确应用于 IO 密集型高并发场景,可以大幅降低资源开销和延迟抖动。
2026-07-07 00:31:17
229
原创 HNSW索引参数深度调优:精度、构建速度与内存的权衡
HNSW 参数调优的本质是在精度、速度、内存三者之间寻找平衡。先确定 M:根据内存预算和构建时间容忍度选择 M=16 或 32,极少需要大于 64。再调 efConstruction:在 M 固定后,使用网格搜索或贝叶斯优化找到能最大化召回率的最小 efConstruction(通常 200~600)。最后调 efSearch:在满足实时性要求(QPS/延迟阈值)的前提下,尽量增大 efSearch 以提升召回率,但不要超过 256 以免性能恶化。别忘了 batch 大小。
2026-07-07 00:26:45
272
原创 RAG系统混合检索调优:语义与关键词召回融合实战
混合检索是 RAG 生产系统的必选项,单一模式的上限决定了回答质量的天花板。RRF 比加权分数融合更鲁棒,尤其适合在线场景,省去归一化头疼。选型建议:对中文/多语言资料,优先使用bge-m3;如果对 latency 敏感,可降维至 256 并用 HNSW;BM25 参数一定要按查询长度调整。工程落地:将语义索引与倒排索引部署在同一节点(避免网络开销),用asyncio并发发起两种检索,延迟可再优化 15%。
2026-07-02 10:00:54
254
原创 Agent 工具调用异常治理:超时、幂等与重试实战
超时控制是底线:为 LLM 和外部工具调用设置合理超时,结合熔断器防止雪崩。幂等设计是基础:通过唯一请求 ID 和服务端去重,使重试变得无害。重试策略要谨慎:指数退避 + 抖动,区分可重试/不可重试错误,并利用幂等缓存降低开销。可观测性是排查的钥匙:埋点超时率、重试次数、幂等命中率,通过 OpenTelemetry 跟踪完整调用链。实践建议- 先实现超时和幂等(最易见效),再逐步引入重试和熔断。- 不要相信 LLM 会按时返回,永远假设它可能超时;不要相信外部服务会成功,永远做好熔断准备。
2026-07-02 09:59:56
233
原创 Flink CDC实时同步:Binlog解析与Exactly-Once语义实战
选型:Flink CDC 适合需要流计算 + 一致性的场景;若仅做数据复制,Debezium+Kafka 更轻量。:2PC 机制依赖下游幂等回收,建议同步目标为支持或MERGE INTO的数据库(如 MySQL、TiDB、ClickHouse ReplacingMergeTree)。校验:不要等线上发现问题,定期执行 chunk-based checksum,差异率控制在 0.001% 以内可接受。延迟。
2026-07-02 09:57:10
370
原创 大模型内容审核:规则引擎与LLM哨兵多层过滤实战
在社区、电商、直播等场景中,每天数百万条用户生成内容(UGC)需要即时过滤。涉政(政治敏感)、色情(含软色情)、广告(引流、垃圾营销)、辱骂(人身攻击、暴力威胁)。审核系统面对的挑战是:召回率过高会误杀正常内容(如"白名单商品"被色情模型误判);召回率过低则漏过违规内容,引发合规风险。实践中,我们以精确率(Precision)和召回率(Recall)作为核心指标,通常要求召回率 > 99%,精确率 > 95%。同时需控制P95延迟 < 200ms单条审核成本 < 0.01元。
2026-07-02 09:55:58
237
原创 前端Monorepo依赖管理优化:pnpm硬链接与按需安装实战
pnpm 硬链接+store 机制将 80 个包的 Monorepo 从 2.8 GB 降到 1.1 GB,安装时间从 312 秒降到 78 秒(首次)和 12 秒(缓存命中)。按需安装 (--filter配合 git diff,可进一步将 CI 安装时间压缩到 15~30 秒,只处理变更的包及其依赖图。CI 中 store 缓存是提速的核心,务必使用或类似工具持久化,并配合提高命中率。Turborepo 增量构建。
2026-07-02 09:54:20
247
原创 MCP Server权限边界与工具调用审计实战
MCP Server 的权限控制核心在于三层设计:1.协议层:通过扩展声明工具所需权限。2.运行时层:基于会话上下文做动态权限校验,包含参数级白名单。3.审计层:全链路日志记录,支持回放和异常检测。生产建议:- 所有工具必须显式声明 scope,缺省拒绝。- 动态校验依赖外部认证时,使用本地缓存 + TTL 降低延迟。- 审计日志异步写入,勿阻塞工具调用主链路。- 参数校验采用白名单AST解析,避免正则绕过风险。
2026-06-30 10:46:27
239
原创 Milvus批量写入调优:分片与索引构建实战
分片:不是越多越好,根据数据量和集群节点数选择 2~8,避免过度分散导致小文件爆炸。索引:nlist 取向量数平方根,nprobe 取 16~32,兼顾构建时间和查询精度。内存与 flush:离线任务手动 flush;流式任务设置合理间隔和水位线,segment 大小控制在 256~512MB。验证:不要相信默认参数,实测不同规模下的吞吐和内存峰值,找到自己的最优组合。不要让 Milvus 的“易用性”误导你忽视这些基础调优——否则大规模向量写入时的性能落差会让你措手不及。
2026-06-30 10:45:39
399
原创 AI辅助Playwright测试脚本生成:Prompt工程与AST解析实战
Prompt 工程 + AST 解析的组合策略,将 AI 生成测试脚本从“玩具”推向“生产可用”。关键在于:结构化 Prompt 降低幻觉,AST 自动修复填补 LLM 对运行时行为的缺失,Playwright 最佳实践封装保证稳定。建议团队在实际落地时,先给 LLM 提供组件选择器映射表(如 JSON 配置),再针对库的动画和异步加载特性定制修复规则。每两周收集一次失败日志并更新 Prompt 和修复集,可逐步将通过率稳定在 95% 以上。
2026-06-30 10:44:37
247
原创 LLM推理KV Cache优化实战:显存压缩与成本分析
KV Cache是LLM推理显存的最大消耗源,通过GQA(模型层)加KV Cache量化(推理层)可将显存占用降至原来的1/8甚至更低。实战中vLLM FP8量化可提升吞吐2倍,单位token成本降低54%。配合Prometheus监控KV Cache使用率和碎片,能稳定运行在接近满负荷状态。建议:新训练模型优先采用GQA架构;存量模型用KV Cache量化快速降低推理成本;长上下文场景关注量化精度损失,必要时用混合精度(部分层不量化)。
2026-06-30 10:43:07
194
原创 PostgreSQL并行查询与执行计划深度调优实战
并行度不是越大越好超过 4 后,在 OLTP 混部场景下反而导致上下文切换开销,建议分析型查询设为 4,混合负载设为 2。work_mem 是隐形杀手:每次调大并行度,同步检查temp_files指标,确保 Hash 和 Sort 不落盘。推荐基于(可用内存 × 0.25) / (并发连接数 × 并行度)公式动态配置。连接顺序决定并行天花板:用结合确保大表位于并行扫描的内侧,避免 Nested Loop 串行化。分区表必须显式设置:根据分区大小按公式分配,并定期监控中每个分区的n_live_tup。
2026-06-30 10:42:14
293
原创 LoRA微调实战:秩、学习率与优化器调优
r = min(数据量 / 100, 64)lr = base_model_lr * 0.1 ~ 0.2 # 例如 base_lr=2e-4 → lr=2e-5~4e-5optimizer = AdamW (默认) | Lion (显存瓶颈时尝试,lr 降为 1/10,warmup 20%)weight_decay = 0.01 (数据量 <10k) | 0.001 (数据量 >100k)从这些默认值开始,观察 loss 曲线:如果 loss 震荡,降低 lr 或增大 warmup;
2026-06-29 18:22:29
199
原创 微服务真的需要“弹性”吗?CPU/内存指标给的答案往往是错的
假设你已经在集群中部署了 Prometheus Operator,且业务应用通过暴露了指标(带pathmethodstatus标签)。。自定义指标依赖 Prometheus、Adapter、HPA 三者健康。如果 Prometheus 宕机,HPA 会失去指标来源,默认行为是保留当前副本数不变——但若此时业务流量大增,就永远无法扩容了。回滚方案1. 配置 HPA 的参数(kube-controller-manager 启动参数)时,同时设置一个备用指标(如 CPU)作为 fallback。
2026-06-29 18:20:58
151
原创 大表扫描、写入延迟,InnoDB 并行读取与 redo 日志如何一招通吃?
并行读取:专治大表扫描慢,调至 4~8 线程(SSD 场景),配合验证是否生效,切忌无脑调大。redo 日志容量:写入延迟的隐藏杀手,按峰值写入速率 * 3600 * 1.5 计算,能显著降低 P99 延迟。先压测,后灰度:用 sysbench 对比三组配置(禁用并行+小redo、并行+小redo、并行+大redo),确认收益后再线上灰度。监控和 P99 延迟的变化,超过阈值立即回滚。没有银弹,但这两个调优组合可以解决 80% 的大表扫描与写入延迟问题。任何参数调优都要以可观测性为前提。
2026-06-29 18:20:08
243
原创 为什么 CPU/内存指标不足以支撑真实业务伸缩
已部署 Prometheus Operator 或独立 Prometheus。业务服务已采集 QPS 指标(例如,通过rate()计算 QPS)。需要安装(也可用,但社区推荐前者)。放弃纯 CPU/Memory 的迷信,业务 QPS、延迟分位数、队列深度才是实际负载的准确反映。Prometheus Adapter 配置核心在于模板的正确性,务必用验证。HPA v2 的behavior字段是调优主战场:扩容窗口要短(捕获突发)、缩容窗口要长(防抖动)、单次扩容数量要限制(防雪崩)。
2026-06-29 18:19:16
195
原创 从单线程到多线程 IO,Redis 7.2 到底快了多少?
Redis 7.2 多线程 IO 是一个性价比极高最大收益:网络 IO 密集型、小包高并发业务(如 session 缓存、计数器)无效甚至负收益:CPU 密集(LUA 计算)、大 Value、低并发、pipeline 已优化充分经验值:io-threads 通常设为 CPU 核数的一半(不建议超过 4),并配合 CPU 亲和、网卡中断绑定核心底线:始终监控 P99 延迟,而不是只看平均;慢命令是万恶之源,多线程 IO 救不了。先在自己的业务流量副本上压测,找到甜蜜点,再按灰度步骤推向生产。别让。
2026-06-29 18:18:43
209
原创 ClickHouse物化视图实战:聚合加速与性能调优
不要使用POPULATE,改用TO table+ 手动导入历史数据,避免数据丢失。排序键必须匹配查询的过滤模式,高基数列不要放在物化视图的排序键中。分区策略与源表保持一致,防止写入放大和分区爆炸。量化预期:物化视图可以将 20 秒的聚合查询降至 50ms 以下,但增加了写入时的计算开销(通常 CPU 增加 10%~20%)。生产环境定期检查中的未合并分区,设置以提升稳定性。
2026-06-28 05:06:48
375
原创 React Server Components渲染性能调优:客户端与服务端的边界策略
React Server Components 的性能调优核心在于边界划分的精细化控制服务端组件负责数据获取与纯渲染,只暴露最少的 props 给客户端。客户端组件聚焦交互,利用memo和流式传输降低请求与计算开销。流式渲染时,fallback 应与真实内容结构对齐,避免布局抖动。生产环境中务必监控 TTFB 与 bundle 大小,通过 Next.js 的middleware缓存头以及 ISR 构建多级缓存体系。
2026-06-28 05:03:32
220
原创 DuckDB内存查询引擎实战:与Pandas性能对比及调优
如果数据量 < 50 万行,Pandas 足够快且代码更直观,没必要引入 DuckDB。如果数据量 50 万 ~ 500 万行,DuckDB 在聚合、join 场景下优势明显,且零学习成本(SQL 语法即可)。如果数据量 > 500 万行,强烈推荐使用 DuckDB 直接查询 Parquet/CSV,避免加载入 Pandas。调优第一原则:不要用小 DataFrame 建表再查询,直接用文件内联查询。生产部署:注意类型转换(尤其是时间戳精度),并将设置为机器物理内存的 60%,预留空间给其他进程。
2026-06-28 04:59:42
250
原创 TiDB乐观事务冲突排查与重试策略实战
定位:通过和慢查询找到具体冲突 SQL,不要凭感觉。重试:业务层必须做指数退避重试,配合幂等设计,避免雪崩。改造:热点行分桶是性价比最高的方案;唯一索引冲突用原子 DML 而非查插分离。参数:启用异步提交和约束就地检查,秒杀等高冲突场景可切换悲观锁但要做好连接池保护。生产环境不要迷信乐观锁的“无锁”优势,当冲突率超过 20% 时,悲观锁或分桶改造往往是更稳妥的选择。
2026-06-27 15:05:10
201
原创 K8s HPA 自定义指标弹性伸缩调优实战
业务场景选择:如果任务之间没有依赖关系,且希望一个失败立即停止所有,直接使用TaskGroup;如果需要部分成功结果,考虑手动处理。异常处理:必须用except*(Python 3.11+)或捕获,不要用裸except吞掉异常。取消响应:所有协程内部避免同步阻塞,确保能及时处理;资源清理用async with而非finally。超时控制:在TaskGroup外层套,注意不会被 TG 吞掉。生产监控:在任务内部打点统计成功/失败/取消,记录每个子异常的完整 trace,利用传递业务标识。
2026-06-27 15:04:38
215
原创 MySQL索引失效排查:执行计划与慢查询优化实战
定位问题 SQL:开启慢查询日志(),用或找到耗时最长的查询。分析数据分布检查字段区分度,低选择性字段(如 status)不要单独建索引。EXPLAIN 必看四要素type(理想为ref或const)、key(是否用了预期索引)、rows(扫描行数是否合理)、Extra(警惕和检查常见索引失效- 函数操作(DATE()LEFT()等)→ 改用范围查询或函数索引。- 隐式类型转换(字符串 vs 数字)→ 保证参数类型与字段类型一致。- 范围查询放错位置 → 等值条件放左边,范围条件放右边。
2026-06-27 15:00:42
182
原创 Go sync.Pool实战:内存复用陷阱与GC调优
核心陷阱sync.Pool在 GC 后会清空,不能用于长期缓存。循环内高频 Get/Put 且跨 P 偷取频繁时,池化效果接近零。调优三板斧:pprof 分析堆分配模式 →观察 GC 频率 → 调整 GOGC 或预热池。最佳实践:统一池化对象大小、清零、尽早 Put、结合 context 做超时控制。替代方案:如果你的对象需要跨多个 GC 周期复用,请考虑sync.Mapgo-cache或自定义 ring buffer。
2026-06-27 14:59:34
231
原创 Python 3.13 自由线程与JIT性能飞跃指南详解实战
通过 --disable-gil 选项启用,允许真正的多线程并行。Python 3.13 引入了自由线程模式和 JIT 编译器。本文介绍 Python 3.13 新特性。Python 3.13 是重要里程碑。
2026-06-27 00:00:17
235
原创 macos配置nodejs最正确的方法,谁配置环境谁就是力工!
访问nodejs官网,点击稳定版,并下载。双击刚下载的文件,按步骤默认安装就行。如下图出现版本信息,说明安装成功配置。
2025-12-05 18:08:22
156
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅