精选文章
最新文章
Gzip CPU 占用过高的根因:压缩级别 6 吃掉了 54% 的 CPU
- Gzip 压缩如何在生产环境中吃掉了 54% 的 CPU
- Gzip CPU 占用为何如此之高:配置级根因诊断
- 量化 Gzip 与 Brotli 的 CPU 开销
- 从凭感觉到数据驱动的压缩调优

- Gzip 压缩如何在生产环境中吃掉了 54% 的 CPU
- Gzip CPU 占用为何如此之高:配置级根因诊断
- 量化 Gzip 与 Brotli 的 CPU 开销
- 从凭感觉到数据驱动的压缩调优
Nginx C++ 模块内存泄漏:生产环境不重启定位根因
- 生产环境难题:无法用 GDB 调试的 C++ 模块内存泄漏
- 火焰图如何锁定 ngx_dubbo_module 中的泄漏函数
- 从被动应对到主动赋能:XRay 带来的排障新闭环
- 总结

- 生产环境难题:无法用 GDB 调试的 C++ 模块内存泄漏
- 火焰图如何锁定 ngx_dubbo_module 中的泄漏函数
- 从被动应对到主动赋能:XRay 带来的排障新闭环
- 总结
无侵入式 Java 探针:生产环境无 Java Agent 捕获方法参数
- 为什么无侵入式 Java 探针在生产环境很重要
- 实战演示:在生产环境捕获 Java 方法参数
- OpenResty XRay 与常见 Java Profiler 的差异
- 常见问题

- 为什么无侵入式 Java 探针在生产环境很重要
- 实战演示:在生产环境捕获 Java 方法参数
- OpenResty XRay 与常见 Java Profiler 的差异
- 常见问题
自动根因分析:OpenResty XRay 如何将故障精确定位到代码行
- 为什么“更多可观测性数据”不等于“更快的根因分析”
- XRay 的自动根因分析与传统监控有何不同?
- 自动根因分析实战:三个生产环境案例
- 常见问题 FAQ

- 为什么“更多可观测性数据”不等于“更快的根因分析”
- XRay 的自动根因分析与传统监控有何不同?
- 自动根因分析实战:三个生产环境案例
- 常见问题 FAQ
Perl 内存泄漏排查案例:数 GB 降至 60MB,一张火焰图定位根因
- 精准定位内存泄漏根因
- 显著的优化成效
- 延展阅读
- 总结

- 精准定位内存泄漏根因
- 显著的优化成效
- 延展阅读
- 总结
Node.js 函数探针:不改代码捕获运行中函数的实参
- 为什么要在不修改代码的前提下追踪 Node.js 函数?
- 如何不改代码捕获 Node.js 函数实参
- 团队如何在生产环境使用无侵入式 Node.js 探针

- 为什么要在不修改代码的前提下追踪 Node.js 函数?
- 如何不改代码捕获 Node.js 函数实参
- 团队如何在生产环境使用无侵入式 Node.js 探针
Nginx Worker 进程 RPS 上不去:追踪到 75 毫秒的事件循环阻塞
- 负载很高却没干活:缺失 worker_cpu_affinity 导致的 CPU 争抢
- 阻塞的 Lua IO 操作如何拖停 Nginx 事件循环
- 量化文件 IO 延时:单次最高 1.5 毫秒
- Nginx 事件循环阻塞有多严重?43952 个样本、最大 75 毫秒
- 常见问题

- 负载很高却没干活:缺失 worker_cpu_affinity 导致的 CPU 争抢
- 阻塞的 Lua IO 操作如何拖停 Nginx 事件循环
- 量化文件 IO 延时:单次最高 1.5 毫秒
- Nginx 事件循环阻塞有多严重?43952 个样本、最大 75 毫秒
- 常见问题
双重瓶颈并发?OpenResty XRay 多维分析破解性能难题
- 整体 CPU 使用分析
- 深入模块内部分析
- 压缩策略深度分析
- 分析结论
- 优化解决方案

- 整体 CPU 使用分析
- 深入模块内部分析
- 压缩策略深度分析
- 分析结论
- 优化解决方案
零侵入 Node.js CPU 性能分析:火焰图实战
- Node.js 应用中的高 CPU 使用率问题
- Node.js 应用中的 CPU 阻塞问题
- 支持的 Node.js 版本和操作系统
- 性能影响和额外负担
- 下一步的计划

- Node.js 应用中的高 CPU 使用率问题
- Node.js 应用中的 CPU 阻塞问题
- 支持的 Node.js 版本和操作系统
- 性能影响和额外负担
- 下一步的计划
从崩溃到根因:OpenResty XRay 如何将 Nginx 内存踩踏问题分析得明明白白
- 案例背景:日志无法解释的 Nginx worker 进程频繁崩溃
- 分析录制文件:把崩溃过程回放回“第一现场”
- 根因:Nginx 连接生命周期中的 Use-After-Free
- 常见问题(FAQ)

- 案例背景:日志无法解释的 Nginx worker 进程频繁崩溃
- 分析录制文件:把崩溃过程回放回“第一现场”
- 根因:Nginx 连接生命周期中的 Use-After-Free
- 常见问题(FAQ)
UDB + OpenResty XRay:解锁 OpenResty 应用性能之谜
- OpenResty XRay 如何协同 UDB 增效
- 实战:使用 UDB 与 OpenResty XRay 分析 OpenResty 应用的 Lua 代码调用栈
- 时间旅行调试的优势

- OpenResty XRay 如何协同 UDB 增效
- 实战:使用 UDB 与 OpenResty XRay 分析 OpenResty 应用的 Lua 代码调用栈
- 时间旅行调试的优势
UDB 与 OpenResty XRay 如何让你看透 Perl 代码执行全过程
- UDB 是什么?
- 实战:使用 OpenResty XRay 与 UDB 分析 Perl 应用的代码调用栈
- 为什么越来越多开发者选择 UDB?

- UDB 是什么?
- 实战:使用 OpenResty XRay 与 UDB 分析 Perl 应用的代码调用栈
- 为什么越来越多开发者选择 UDB?
如何用时间旅行调用栈调试 Java 文件 I/O
- IDE 断点和 coredump 在 Java 文件 I/O 排查中的短板
- 从 native write() 系统调用重建完整的 Java 调用栈
- 用时间旅行回放一步步调试 Java 文件 I/O
- 常见问题

- IDE 断点和 coredump 在 Java 文件 I/O 排查中的短板
- 从 native write() 系统调用重建完整的 Java 调用栈
- 用时间旅行回放一步步调试 Java 文件 I/O
- 常见问题
结合 UDB 的时间旅行功能,揭秘 Python 代码执行过程
- UDB 在 Python 调试中的独特价值
- 结合 OpenResty XRay 增强调试能力
- 实战案例:分析 Python 网络请求的调用栈
- 总结

- UDB 在 Python 调试中的独特价值
- 结合 OpenResty XRay 增强调试能力
- 实战案例:分析 Python 网络请求的调用栈
- 总结
追踪 OpenResty 中 LRU 缓存引发的内存泄漏 —— 根因竟是缓存的 SSL 证书
- 为什么一个低流量的 OpenResty 应用会持续泄漏内存
- 一步步追踪 LRU 缓存内存泄漏的完整过程
- 最终结果:从无限增长到内存平稳

- 为什么一个低流量的 OpenResty 应用会持续泄漏内存
- 一步步追踪 LRU 缓存内存泄漏的完整过程
- 最终结果:从无限增长到内存平稳
Nginx Worker CPU 占用不均:定位未启用 reuseport 与 cjson 解析瓶颈
- 症状:部分 Nginx Worker 进程 CPU 打满,其余接近空闲
- OpenResty XRay 如何定位根因
- 修复:三项优化与各自的实测收益
- 总结:OpenResty XRay 几分钟内的发现
- 常见问题

- 症状:部分 Nginx Worker 进程 CPU 打满,其余接近空闲
- OpenResty XRay 如何定位根因
- 修复:三项优化与各自的实测收益
- 总结:OpenResty XRay 几分钟内的发现
- 常见问题
动态追踪的瑞士军刀:Y 语言如何让动态追踪不再复杂
- 行业痛点:为什么我们迫切需要一门全新的追踪语言?
- 技术硬实力:Y 语言凭什么敢说“革命性”?
- Y 语言语法:熟悉的 C,更强大的追踪能力
- 杀手级应用场景:解决传统工具无法解决的问题
- 全平台支持:没有 Y 语言到不了的地方

- 行业痛点:为什么我们迫切需要一门全新的追踪语言?
- 技术硬实力:Y 语言凭什么敢说“革命性”?
- Y 语言语法:熟悉的 C,更强大的追踪能力
- 杀手级应用场景:解决传统工具无法解决的问题
- 全平台支持:没有 Y 语言到不了的地方
OpenResty XRay 重要突破:无侵入分析 Java 应用内存与 Envoy Lua 性能
- 无需侵入,彻底洞察 Java 应用内存
- 首次打通 Envoy 内 Lua 性能黑盒

- 无需侵入,彻底洞察 Java 应用内存
- 首次打通 Envoy 内 Lua 性能黑盒
为什么动态追踪才是生产环境调试的未来
- 现代软件中看不见的危机
- 传统工具为何会失效?
- 故障排除的新范式:动态追踪
- OpenResty XRay 的独特之处

- 现代软件中看不见的危机
- 传统工具为何会失效?
- 故障排除的新范式:动态追踪
- OpenResty XRay 的独特之处
P99 延迟:为什么平均值会骗人,以及如何诊断最慢的 1%
- 什么是 P99 延迟?
- P50 vs P95 vs P99:每个百分位告诉你什么
- 为什么平均延迟会骗人
- P99 延迟为什么高?根因谱系
- 如何诊断高 P99 延迟
- 如何降低 P99 延迟:修你查出来的问题
- 小结
- 常见问题

- 什么是 P99 延迟?
- P50 vs P95 vs P99:每个百分位告诉你什么
- 为什么平均延迟会骗人
- P99 延迟为什么高?根因谱系
- 如何诊断高 P99 延迟
- 如何降低 P99 延迟:修你查出来的问题
- 小结
- 常见问题
火焰图详解:如何读懂 CPU 火焰图,找出烧掉 CPU 的代码
- 什么是火焰图:定义、坐标轴与四条读图规则
- 怎样读火焰图:plateau、tower、hair 形态与 self / total
- 三个真实案例:PHP preg_match、Go regexp.MustCompile、Erlang erts_pcre_exec
- 从 100% CPU 到罪魁代码行:四步排查流程与技术栈路由表
- 如何为你的技术栈生成火焰图
- Icicle graph、flame chart 与其他变体
- AI 能替你读火焰图吗?

- 什么是火焰图:定义、坐标轴与四条读图规则
- 怎样读火焰图:plateau、tower、hair 形态与 self / total
- 三个真实案例:PHP preg_match、Go regexp.MustCompile、Erlang erts_pcre_exec
- 从 100% CPU 到罪魁代码行:四步排查流程与技术栈路由表
- 如何为你的技术栈生成火焰图
- Icicle graph、flame chart 与其他变体
- AI 能替你读火焰图吗?
生产环境内存泄漏定位:从 RSS 飙升到源码行号的分层归因
- 症状:只升不降的内存曲线
- 内存泄漏还是内存占用高?
- 四类泄漏模式的真实根因链
- 看起来在涨,其实不是泄漏
- 如何定位泄漏:自顶向下的分层归因
- 传统工具为什么在生产环境里不够用
- 常见问题

- 症状:只升不降的内存曲线
- 内存泄漏还是内存占用高?
- 四类泄漏模式的真实根因链
- 看起来在涨,其实不是泄漏
- 如何定位泄漏:自顶向下的分层归因
- 传统工具为什么在生产环境里不够用
- 常见问题
Off-CPU 分析实战:CPU 使用率低但延迟高的四类根因与定位方法
- Off-CPU 时间是什么?
- 症状:CPU 使用率上不去,请求却在排队
- 四类 Off-CPU 根因的真实根因链
- 如何量化 Off-CPU 时间
- On-CPU + Off-CPU = 挂钟时间:全局视角与工具生态
- 常见问题

- Off-CPU 时间是什么?
- 症状:CPU 使用率上不去,请求却在排队
- 四类 Off-CPU 根因的真实根因链
- 如何量化 Off-CPU 时间
- On-CPU + Off-CPU = 挂钟时间:全局视角与工具生态
- 常见问题
OpenResty XRay AI 助手:让每一份分析数据都能开口说话
- 它和“把报告贴进 ChatGPT”有什么区别?
- 三个典型场景
- 常见问题:AI 能读懂火焰图吗?解读可靠吗?

- 它和“把报告贴进 ChatGPT”有什么区别?
- 三个典型场景
- 常见问题:AI 能读懂火焰图吗?解读可靠吗?
OpenResty 私有库:高性能 Lua 与 Nginx 模块
- 完整目录
- 按场景分类
- 许可方式
- 常见问题

- 完整目录
- 按场景分类
- 许可方式
- 常见问题
不改代码、不重启服务:OpenResty XRay 如何对生产环境做全栈动态追踪
- 现有动态追踪框架的技术权衡与生产环境局限性
- OpenResty XRay 的动态追踪架构级突破
- 全栈火焰图
- 能力边界的持续扩展

- 现有动态追踪框架的技术权衡与生产环境局限性
- OpenResty XRay 的动态追踪架构级突破
- 全栈火焰图
- 能力边界的持续扩展
OpenResty XRay 是什么
- 以“零侵入”重构生产环境性能分析
- 将海量遥测数据转化为可执行的洞察
- 适应弹性架构的无感观测能力
- 赋能高可用架构的长期主义

- 以“零侵入”重构生产环境性能分析
- 将海量遥测数据转化为可执行的洞察
- 适应弹性架构的无感观测能力
- 赋能高可用架构的长期主义
一次无法重启的 Nginx 内存泄漏,我们是如何在生产环境把它抓出来的
- 一次生产环境内存泄漏的完整解剖
- 为什么这类问题几乎无解?
- 从“靠运气”到“可预测”
- 当性能问题超越“工具”范畴”

- 一次生产环境内存泄漏的完整解剖
- 为什么这类问题几乎无解?
- 从“靠运气”到“可预测”
- 当性能问题超越“工具”范畴”
Nginx 反向代理 QPS 暴跌 15 倍:upstream keepalive 缺失与 -O0 编译选项的根因定位
- Nginx 反向代理慢 15 倍,日志却零报错
- 火焰图暴露连接风暴:upstream keepalive 缺失
- 剩下的 10% 差距:基线对比指向编译器
- -O0 调试编译如何吃掉我们 10% 的性能
- 15 倍 QPS 差异的工程性复盘

- Nginx 反向代理慢 15 倍,日志却零报错
- 火焰图暴露连接风暴:upstream keepalive 缺失
- 剩下的 10% 差距:基线对比指向编译器
- -O0 调试编译如何吃掉我们 10% 的性能
- 15 倍 QPS 差异的工程性复盘
我们如何在一个 500k QPS 的 OpenResty 网关中定位 244 毫秒的性能异常
- 被健康平均值掩盖的延迟尖刺与 CPU 浪费
- 无需改代码、无需重启:OpenResty 延迟问题排查
- 优化结果:延迟毛刺消除,CPU 使用率下降 30%
- 常见问题

- 被健康平均值掩盖的延迟尖刺与 CPU 浪费
- 无需改代码、无需重启:OpenResty 延迟问题排查
- 优化结果:延迟毛刺消除,CPU 使用率下降 30%
- 常见问题
如何在生产环境中定位 Java 内存泄漏——无需堆转储、无需重启
- 为什么多次 Full GC 后堆内存仍未回落
- 如何在不导出堆转储的情况下定位生产环境的 Java 内存泄漏
- 如何定位 Java 内存泄漏:一套可复用的三步法
- 为什么用 OpenResty XRay 定位 Java 内存泄漏
- 常见问题

- 为什么多次 Full GC 后堆内存仍未回落
- 如何在不导出堆转储的情况下定位生产环境的 Java 内存泄漏
- 如何定位 Java 内存泄漏:一套可复用的三步法
- 为什么用 OpenResty XRay 定位 Java 内存泄漏
- 常见问题
当”黑盒”插件吃掉 45% CPU,我们如何在无源码情况下定位到 Lua 第 93 行
- 当 perf 遇到“黑盒”
- 从采样到全栈动态追踪
- 拿到证据链
- 从“发生了什么”到“为什么”

- 当 perf 遇到“黑盒”
- 从采样到全栈动态追踪
- 拿到证据链
- 从“发生了什么”到“为什么”
Gzip CPU 占用过高的根因:压缩级别 6 吃掉了 54% 的 CPU
- Gzip 压缩如何在生产环境中吃掉了 54% 的 CPU
- Gzip CPU 占用为何如此之高:配置级根因诊断
- 量化 Gzip 与 Brotli 的 CPU 开销
- 从凭感觉到数据驱动的压缩调优

- Gzip 压缩如何在生产环境中吃掉了 54% 的 CPU
- Gzip CPU 占用为何如此之高:配置级根因诊断
- 量化 Gzip 与 Brotli 的 CPU 开销
- 从凭感觉到数据驱动的压缩调优
Nginx C++ 模块内存泄漏:生产环境不重启定位根因
- 生产环境难题:无法用 GDB 调试的 C++ 模块内存泄漏
- 火焰图如何锁定 ngx_dubbo_module 中的泄漏函数
- 从被动应对到主动赋能:XRay 带来的排障新闭环
- 总结

- 生产环境难题:无法用 GDB 调试的 C++ 模块内存泄漏
- 火焰图如何锁定 ngx_dubbo_module 中的泄漏函数
- 从被动应对到主动赋能:XRay 带来的排障新闭环
- 总结
自动根因分析:OpenResty XRay 如何将故障精确定位到代码行
- 为什么“更多可观测性数据”不等于“更快的根因分析”
- XRay 的自动根因分析与传统监控有何不同?
- 自动根因分析实战:三个生产环境案例
- 常见问题 FAQ

- 为什么“更多可观测性数据”不等于“更快的根因分析”
- XRay 的自动根因分析与传统监控有何不同?
- 自动根因分析实战:三个生产环境案例
- 常见问题 FAQ
Perl 内存泄漏排查案例:数 GB 降至 60MB,一张火焰图定位根因
- 精准定位内存泄漏根因
- 显著的优化成效
- 延展阅读
- 总结

- 精准定位内存泄漏根因
- 显著的优化成效
- 延展阅读
- 总结
Node.js 函数探针:不改代码捕获运行中函数的实参
- 为什么要在不修改代码的前提下追踪 Node.js 函数?
- 如何不改代码捕获 Node.js 函数实参
- 团队如何在生产环境使用无侵入式 Node.js 探针

- 为什么要在不修改代码的前提下追踪 Node.js 函数?
- 如何不改代码捕获 Node.js 函数实参
- 团队如何在生产环境使用无侵入式 Node.js 探针
Nginx Worker 进程 RPS 上不去:追踪到 75 毫秒的事件循环阻塞
- 负载很高却没干活:缺失 worker_cpu_affinity 导致的 CPU 争抢
- 阻塞的 Lua IO 操作如何拖停 Nginx 事件循环
- 量化文件 IO 延时:单次最高 1.5 毫秒
- Nginx 事件循环阻塞有多严重?43952 个样本、最大 75 毫秒
- 常见问题

- 负载很高却没干活:缺失 worker_cpu_affinity 导致的 CPU 争抢
- 阻塞的 Lua IO 操作如何拖停 Nginx 事件循环
- 量化文件 IO 延时:单次最高 1.5 毫秒
- Nginx 事件循环阻塞有多严重?43952 个样本、最大 75 毫秒
- 常见问题
双重瓶颈并发?OpenResty XRay 多维分析破解性能难题
- 整体 CPU 使用分析
- 深入模块内部分析
- 压缩策略深度分析
- 分析结论
- 优化解决方案

- 整体 CPU 使用分析
- 深入模块内部分析
- 压缩策略深度分析
- 分析结论
- 优化解决方案
零侵入 Node.js CPU 性能分析:火焰图实战
- Node.js 应用中的高 CPU 使用率问题
- Node.js 应用中的 CPU 阻塞问题
- 支持的 Node.js 版本和操作系统
- 性能影响和额外负担
- 下一步的计划

- Node.js 应用中的高 CPU 使用率问题
- Node.js 应用中的 CPU 阻塞问题
- 支持的 Node.js 版本和操作系统
- 性能影响和额外负担
- 下一步的计划
从崩溃到根因:OpenResty XRay 如何将 Nginx 内存踩踏问题分析得明明白白
- 案例背景:日志无法解释的 Nginx worker 进程频繁崩溃
- 分析录制文件:把崩溃过程回放回“第一现场”
- 根因:Nginx 连接生命周期中的 Use-After-Free
- 常见问题(FAQ)

- 案例背景:日志无法解释的 Nginx worker 进程频繁崩溃
- 分析录制文件:把崩溃过程回放回“第一现场”
- 根因:Nginx 连接生命周期中的 Use-After-Free
- 常见问题(FAQ)
UDB + OpenResty XRay:解锁 OpenResty 应用性能之谜
- OpenResty XRay 如何协同 UDB 增效
- 实战:使用 UDB 与 OpenResty XRay 分析 OpenResty 应用的 Lua 代码调用栈
- 时间旅行调试的优势

- OpenResty XRay 如何协同 UDB 增效
- 实战:使用 UDB 与 OpenResty XRay 分析 OpenResty 应用的 Lua 代码调用栈
- 时间旅行调试的优势
UDB 与 OpenResty XRay 如何让你看透 Perl 代码执行全过程
- UDB 是什么?
- 实战:使用 OpenResty XRay 与 UDB 分析 Perl 应用的代码调用栈
- 为什么越来越多开发者选择 UDB?

- UDB 是什么?
- 实战:使用 OpenResty XRay 与 UDB 分析 Perl 应用的代码调用栈
- 为什么越来越多开发者选择 UDB?
如何用时间旅行调用栈调试 Java 文件 I/O
- IDE 断点和 coredump 在 Java 文件 I/O 排查中的短板
- 从 native write() 系统调用重建完整的 Java 调用栈
- 用时间旅行回放一步步调试 Java 文件 I/O
- 常见问题

- IDE 断点和 coredump 在 Java 文件 I/O 排查中的短板
- 从 native write() 系统调用重建完整的 Java 调用栈
- 用时间旅行回放一步步调试 Java 文件 I/O
- 常见问题
结合 UDB 的时间旅行功能,揭秘 Python 代码执行过程
- UDB 在 Python 调试中的独特价值
- 结合 OpenResty XRay 增强调试能力
- 实战案例:分析 Python 网络请求的调用栈
- 总结

- UDB 在 Python 调试中的独特价值
- 结合 OpenResty XRay 增强调试能力
- 实战案例:分析 Python 网络请求的调用栈
- 总结
追踪 OpenResty 中 LRU 缓存引发的内存泄漏 —— 根因竟是缓存的 SSL 证书
- 为什么一个低流量的 OpenResty 应用会持续泄漏内存
- 一步步追踪 LRU 缓存内存泄漏的完整过程
- 最终结果:从无限增长到内存平稳

- 为什么一个低流量的 OpenResty 应用会持续泄漏内存
- 一步步追踪 LRU 缓存内存泄漏的完整过程
- 最终结果:从无限增长到内存平稳
Nginx Worker CPU 占用不均:定位未启用 reuseport 与 cjson 解析瓶颈
- 症状:部分 Nginx Worker 进程 CPU 打满,其余接近空闲
- OpenResty XRay 如何定位根因
- 修复:三项优化与各自的实测收益
- 总结:OpenResty XRay 几分钟内的发现
- 常见问题

- 症状:部分 Nginx Worker 进程 CPU 打满,其余接近空闲
- OpenResty XRay 如何定位根因
- 修复:三项优化与各自的实测收益
- 总结:OpenResty XRay 几分钟内的发现
- 常见问题
动态追踪的瑞士军刀:Y 语言如何让动态追踪不再复杂
- 行业痛点:为什么我们迫切需要一门全新的追踪语言?
- 技术硬实力:Y 语言凭什么敢说“革命性”?
- Y 语言语法:熟悉的 C,更强大的追踪能力
- 杀手级应用场景:解决传统工具无法解决的问题
- 全平台支持:没有 Y 语言到不了的地方

- 行业痛点:为什么我们迫切需要一门全新的追踪语言?
- 技术硬实力:Y 语言凭什么敢说“革命性”?
- Y 语言语法:熟悉的 C,更强大的追踪能力
- 杀手级应用场景:解决传统工具无法解决的问题
- 全平台支持:没有 Y 语言到不了的地方
OpenResty XRay 重要突破:无侵入分析 Java 应用内存与 Envoy Lua 性能
- 无需侵入,彻底洞察 Java 应用内存
- 首次打通 Envoy 内 Lua 性能黑盒

- 无需侵入,彻底洞察 Java 应用内存
- 首次打通 Envoy 内 Lua 性能黑盒
为什么动态追踪才是生产环境调试的未来
- 现代软件中看不见的危机
- 传统工具为何会失效?
- 故障排除的新范式:动态追踪
- OpenResty XRay 的独特之处

- 现代软件中看不见的危机
- 传统工具为何会失效?
- 故障排除的新范式:动态追踪
- OpenResty XRay 的独特之处
深入动态追踪技术:OpenResty XRay 如何彻底改变问题诊断方式
- 动态追踪:解决复杂系统问题的利器
- 为什么选择 OpenResty XRay?
- 产品聚焦:XRay 在真实场景中的应用案例
- 常见误区与 FAQ

- 动态追踪:解决复杂系统问题的利器
- 为什么选择 OpenResty XRay?
- 产品聚焦:XRay 在真实场景中的应用案例
- 常见误区与 FAQ
日志、埋点、A/B 测试都不够用了?你该了解”动态追踪”
- 传统方法 vs 动态追踪:效率与控制力的革命
- 动态追踪:系统的“透视眼”
- 从火焰图到系统全景
- 为什么选择 OpenResty XRay?
- 动态追踪的新边界

- 传统方法 vs 动态追踪:效率与控制力的革命
- 动态追踪:系统的“透视眼”
- 从火焰图到系统全景
- 为什么选择 OpenResty XRay?
- 动态追踪的新边界
为什么动态追踪落地难?OpenResty XRay 如何破局?
- 动态追踪技术的落地痛点
- OpenResty XRay:新一代动态追踪解决方案
- 动态追踪的未来

- 动态追踪技术的落地痛点
- OpenResty XRay:新一代动态追踪解决方案
- 动态追踪的未来
可观测性的下一站:OpenResty XRay 如何重新定义问题排查
- 现代软件架构下的问题排查为何越来越难?
- 趋势洞察:可观测技术的未来
- 动态追踪技术是如何打通抽象层的
- 实战案例:在线上 Kong 服务中实时统计插件资源消耗

- 现代软件架构下的问题排查为何越来越难?
- 趋势洞察:可观测技术的未来
- 动态追踪技术是如何打通抽象层的
- 实战案例:在线上 Kong 服务中实时统计插件资源消耗
从黑盒到白盒:OpenResty XRay 让系统问题无所遁形
- OpenResty XRay:黑盒变白盒的动态追踪利器
- 全方位多角度的分析能力
- 实际案例分享
- 产品愿景

- OpenResty XRay:黑盒变白盒的动态追踪利器
- 全方位多角度的分析能力
- 实际案例分享
- 产品愿景
自我优化:OpenResty XRay 的性能蜕变
- 显著的优化成果
- Ylang 语言:动态追踪的理想工具
- 技术协同的典范

- 显著的优化成果
- Ylang 语言:动态追踪的理想工具
- 技术协同的典范
OpenResty XRay 助力脚本性能提升 44 倍
- 真实案例:从发现瓶颈到显著提速
- OpenResty XRay 的工作原理
- 优化效果
- 支适用场景与实践建议

- 真实案例:从发现瓶颈到显著提速
- OpenResty XRay 的工作原理
- 优化效果
- 支适用场景与实践建议
跨介质数据结构漂移:OpenResty XRay 助力性能提升 20 倍
- 性能挑战与突破
- 20 倍性能提升的实际意义
- 未来展望

- 性能挑战与突破
- 20 倍性能提升的实际意义
- 未来展望
从 OOM 到 O(1):OpenResty 流式 JSON 解析器的实现之道
- JSONL 格式与传统 JSON 的区别
- 解决方案
- 技术验证
- 持续优化
- 技术启示

- JSONL 格式与传统 JSON 的区别
- 解决方案
- 技术验证
- 持续优化
- 技术启示
从数天到数小时:OpenResty XRay 如何让 Linux shred 工具提速几十倍
- 问题分析
- XRay 实战效果
- 优化过程
- 应用价值
- 总结与展望

- 问题分析
- XRay 实战效果
- 优化过程
- 应用价值
- 总结与展望
实战分享:OpenResty XRay 让 Ylang 编译器性能翻倍
- 显著的优化成果
- Ylang 语言:动态追踪的理想工具
- 技术协同的典范

- 显著的优化成果
- Ylang 语言:动态追踪的理想工具
- 技术协同的典范
OpenResty XRay Web 控制台:自动分析报告、实时仪表盘与引导式根因诊断
- Insights 页面能看到什么
- 如何解读分析报告
- Dashboard 展示哪些实时指标
- 用 Guided Analysis 诊断高 CPU 占用
- 配置 OpenResty XRay 的 Agent
- 什么是 OpenResty XRay

- Insights 页面能看到什么
- 如何解读分析报告
- Dashboard 展示哪些实时指标
- 用 Guided Analysis 诊断高 CPU 占用
- 配置 OpenResty XRay 的 Agent
- 什么是 OpenResty XRay
OpenResty XRay 移动端应用:在手机上监控与诊断线上应用(安卓 & iOS)
- 下载和安装 OpenResty XRay 安卓版
- 登录到 OpenResty XRay
- 全自动分析报告
- 在 dashboard 页面查看性能图表数据
- 引导式分析功能
- 常见问题

- 下载和安装 OpenResty XRay 安卓版
- 登录到 OpenResty XRay
- 全自动分析报告
- 在 dashboard 页面查看性能图表数据
- 引导式分析功能
- 常见问题
新的关于 OpenResty XRay 的常见问答
我们最近为 OpenResty XRay 产品准备了一篇《常见问答》文档

我们最近为 OpenResty XRay 产品准备了一篇《常见问答》文档
OpenResty XRay 的自动分析报告
- 过去
- 现在
- 将来

- 过去
- 现在
- 将来
Nginx 正则性能:用动态追踪定位最慢的正则模式
- 前提条件与环境
- 用 CPU 火焰图定位慢正则
- 正则优化后的性能对比
- 用 lua_regex_match_limit 限制 PCRE 回溯
- 非回溯引擎:RE2 与 OpenResty Regex
- Lua 内置模式作为正则替代
- 在 Docker 和 Kubernetes 中追踪正则性能
- 动态追踪工具的实现原理
- 工具开销:非采样时为零
- FAQ:Nginx 正则性能

- 前提条件与环境
- 用 CPU 火焰图定位慢正则
- 正则优化后的性能对比
- 用 lua_regex_match_limit 限制 PCRE 回溯
- 非回溯引擎:RE2 与 OpenResty Regex
- Lua 内置模式作为正则替代
- 在 Docker 和 Kubernetes 中追踪正则性能
- 动态追踪工具的实现原理
- 工具开销:非采样时为零
- FAQ:Nginx 正则性能
动态追踪技术漫谈
- 什么是动态追踪
- 动态追踪的优点
- DTrace 与 SystemTap
- SystemTap 在生产上的应用
- 火焰图
- 方法论
- 知识就是力量
- 开源与调试符号
- Linux 内核的支持
- 硬件追踪
- 死亡进程的遗骸分析
- 传统的调试技术
- 凌乱的调试世界
- OpenResty XRay

- 什么是动态追踪
- 动态追踪的优点
- DTrace 与 SystemTap
- SystemTap 在生产上的应用
- 火焰图
- 方法论
- 知识就是力量
- 开源与调试符号
- Linux 内核的支持
- 硬件追踪
- 死亡进程的遗骸分析
- 传统的调试技术
- 凌乱的调试世界
- OpenResty XRay
在 Kubernetes 集群上安裝 OpenResty XRay 的 Agent
- 登录控制台
- 在 Kubernetes 集群上安装 Agent
- 配置和检测应用
- 启动分析器和查看分析结果
- 安装另一个 Agent

- 登录控制台
- 在 Kubernetes 集群上安装 Agent
- 配置和检测应用
- 启动分析器和查看分析结果
- 安装另一个 Agent
在 Amazon Linux 上安裝 OpenResty XRay 的 Agent(使用 Bundle 包)
- 登录控制台
- 通过 Bundle 包安装 Agent
- 配置和检测应用
- 启动分析器和查看分析结果
- 安装另一个 Agent

- 登录控制台
- 通过 Bundle 包安装 Agent
- 配置和检测应用
- 启动分析器和查看分析结果
- 安装另一个 Agent
在 Ubuntu 上安裝 OpenResty XRay 的 Agent(使用 APT 包仓库)
- 登录控制台
- 通过 Deb 包安装 Agent
- 检查 Agent 状态和日志
- 配置和检测应用
- 启动分析器和查看分析结果
- 安装另一个 Agent

- 登录控制台
- 通过 Deb 包安装 Agent
- 检查 Agent 状态和日志
- 配置和检测应用
- 启动分析器和查看分析结果
- 安装另一个 Agent
在 CentOs 上安装 OpenResty XRay 的 Agent(使用 RPM 包仓库)
- 登录控制台
- 通过 RPM 包安装 Agent
- 检查 Agent 状态和日志
- 配置和检测应用
- 启动分析器和查看分析结果
- 安装另一个 Agent

- 登录控制台
- 通过 RPM 包安装 Agent
- 检查 Agent 状态和日志
- 配置和检测应用
- 启动分析器和查看分析结果
- 安装另一个 Agent
在微软 Azure 云上安装自主部署版 OpenResty XRay
- 创建订阅和资源组
- 创建 Azure Kubernetes 服务
- 准备环境变量
- 通过命令行登录 Azure
- 为 Kubernetes 创建 namespace 和 secret
- 创建 Azure Disk
- 更新持久化卷的配置文件
- 更新 kubernetes 的配置文件
- 创建持久化卷
- 部署 Kubernetes 服务
- 配置应用网关

- 创建订阅和资源组
- 创建 Azure Kubernetes 服务
- 准备环境变量
- 通过命令行登录 Azure
- 为 Kubernetes 创建 namespace 和 secret
- 创建 Azure Disk
- 更新持久化卷的配置文件
- 更新 kubernetes 的配置文件
- 创建持久化卷
- 部署 Kubernetes 服务
- 配置应用网关
在 Linux 上调试 Go 服务的硬盘 I/O 高问题
- 定位硬盘 I/O 高的 Go 进程
- 使用火焰图追踪 Go 磁盘读写代码路径
- 自动磁盘 I/O 分析报告
- 常见问题

- 定位硬盘 I/O 高的 Go 进程
- 使用火焰图追踪 Go 磁盘读写代码路径
- 自动磁盘 I/O 分析报告
- 常见问题
生产环境如何追踪 Go Panic(无需重启应用)
- 使用引导式分析功能分析 Go 应用中的程序异常
- 全自动分析报告
- 常见问题

- 使用引导式分析功能分析 Go 应用中的程序异常
- 全自动分析报告
- 常见问题
定位 Go 应用 CPU 最热的代码路径:Prometheus 高 CPU 实例分析(OpenResty XRay)
- 问题:高 CPU 使用率
- 使用 OpenResty XRay 的引导式分析功能定位 CPU 最热的 Go 代码路径
- 全自动分析与报告

- 问题:高 CPU 使用率
- 使用 OpenResty XRay 的引导式分析功能定位 CPU 最热的 Go 代码路径
- 全自动分析与报告
CockroachDB 高 CPU 使用率:用火焰图剖析运行中的 Go 服务
- 问题:CockroachDB 高 CPU 使用率
- 用引导式分析定位最耗 CPU 的 Go 代码路径
- 全自动 CPU 分析报告
- 关于 OpenResty XRay

- 问题:CockroachDB 高 CPU 使用率
- 用引导式分析定位最耗 CPU 的 Go 代码路径
- 全自动 CPU 分析报告
- 关于 OpenResty XRay
追踪 Go 应用时 OpenResty XRay 对系统性能的影响
- 分析期间对 CPU、内存和负载有何影响?
- 分析对吞吐量与延时的影响有多大?
- OpenResty XRay 与常驻式 APM Agent 的对比
- 常见问题

- 分析期间对 CPU、内存和负载有何影响?
- 分析对吞吐量与延时的影响有多大?
- OpenResty XRay 与常驻式 APM Agent 的对比
- 常见问题
编写自定义 Ylang 分析器动态追踪 Go 程序(使用 OpenResty XRay)
- 向 Go 变量插入两个键值对
- 编写自定义 Ylang 分析器,动态追踪 Go 程序
- 测试结果

- 向 Go 变量插入两个键值对
- 编写自定义 Ylang 分析器,动态追踪 Go 程序
- 测试结果
etcd 高 CPU 使用率:用火焰图定位最热的 Go 代码路径
- 问题症状:etcd 占用超过 70% 的 CPU 核心
- 使用 OpenResty XRay 引导式分析定位最热的 Go 代码路径
- etcd CPU 全自动监控与报告
- 什么是 OpenResty XRay

- 问题症状:etcd 占用超过 70% 的 CPU 核心
- 使用 OpenResty XRay 引导式分析定位最热的 Go 代码路径
- etcd CPU 全自动监控与报告
- 什么是 OpenResty XRay
Go 服务 CPU 使用率异常低:对运行中进程做 off-CPU 分析定位阻塞根因
- 症状:请求涌入,Go 服务 CPU 使用率却上不去
- 用 OpenResty XRay 对运行中的 Go 进程做 off-CPU 分析
- 根因:一行阻塞的 shell 命令调用
- 全自动分析与日报、周报

- 症状:请求涌入,Go 服务 CPU 使用率却上不去
- 用 OpenResty XRay 对运行中的 Go 进程做 off-CPU 分析
- 根因:一行阻塞的 shell 命令调用
- 全自动分析与日报、周报
Go 高 CPU 占用:正则表达式编译消耗了 36.8% 的 CPU 时间
- 观察 Go 进程的高 CPU 占用
- 使用 OpenResty XRay 剖析 Go 的 CPU 使用
- 全自动监控与报告
- 关于 OpenResty XRay

- 观察 Go 进程的高 CPU 占用
- 使用 OpenResty XRay 剖析 Go 的 CPU 使用
- 全自动监控与报告
- 关于 OpenResty XRay
使用 XRay 诊断 Python 应用的硬盘 I/O 高问题
- 定位硬盘 I/O 高的 Python 进程
- 使用火焰图追踪 Python 磁盘读写代码路径
- 自动磁盘 I/O 分析报告
- 常见问题

- 定位硬盘 I/O 高的 Python 进程
- 使用火焰图追踪 Python 磁盘读写代码路径
- 自动磁盘 I/O 分析报告
- 常见问题
生产环境实测:追踪 Python 应用时 OpenResty XRay 对系统性能的影响
- 分析期间对 CPU、内存和负载有何影响?
- 分析对吞吐量与延时的影响有多大?
- OpenResty XRay 与常驻式 APM Agent 的对比
- 常见问题

- 分析期间对 CPU、内存和负载有何影响?
- 分析对吞吐量与延时的影响有多大?
- OpenResty XRay 与常驻式 APM Agent 的对比
- 常见问题
Django 内存分析:逐个对象剖析运行中应用的内存占用(使用 OpenResty XRay)
- 用 ps 找出内存占用高的 Django 进程
- 用引导式分析剖析 Django 应用的内存使用
- 读懂火焰图:哪个 Python 模块占用内存最多
- 用 Insights 自动监控 Django 内存使用
- 关于 OpenResty XRay

- 用 ps 找出内存占用高的 Django 进程
- 用引导式分析剖析 Django 应用的内存使用
- 读懂火焰图:哪个 Python 模块占用内存最多
- 用 Insights 自动监控 Django 内存使用
- 关于 OpenResty XRay
Python 内存分析器:无需改代码定位最占内存的对象
- 找出哪个 Python 进程最占内存
- 用引导式分析剖析 Python 内存:定位最大的对象及其所属模块
- 用定时报告自动监控 Python 内存占用
- 关于 OpenResty XRay

- 找出哪个 Python 进程最占内存
- 用引导式分析剖析 Python 内存:定位最大的对象及其所属模块
- 用定时报告自动监控 Python 内存占用
- 关于 OpenResty XRay
Python 进程 CPU 使用率只有 8%:off-CPU 分析定位阻塞的 subprocess.run 调用
- 症状:请求涌入但 Python 进程 CPU 使用率上不去
- 用 OpenResty XRay 的引导式分析定位阻塞的 Python 代码路径
- Insights 页面中的全自动分析与报告
- FAQ

- 症状:请求涌入但 Python 进程 CPU 使用率上不去
- 用 OpenResty XRay 的引导式分析定位阻塞的 Python 代码路径
- Insights 页面中的全自动分析与报告
- FAQ
无侵入式 Java 探针:生产环境无 Java Agent 捕获方法参数
- 为什么无侵入式 Java 探针在生产环境很重要
- 实战演示:在生产环境捕获 Java 方法参数
- OpenResty XRay 与常见 Java Profiler 的差异
- 常见问题

- 为什么无侵入式 Java 探针在生产环境很重要
- 实战演示:在生产环境捕获 Java 方法参数
- OpenResty XRay 与常见 Java Profiler 的差异
- 常见问题
Java Tomcat 响应慢:用单请求 PCAP 精准定位慢请求
- 诊断 Tomcat 响应慢,精准捕获慢请求
- 选择性抓包:按响应时间、状态码、路径过滤
- 每个慢请求单独下载对应 PCAP 包
- 区分服务端延迟与网络延迟
- 支持 Spring Boot 内嵌 Tomcat 场景

- 诊断 Tomcat 响应慢,精准捕获慢请求
- 选择性抓包:按响应时间、状态码、路径过滤
- 每个慢请求单独下载对应 PCAP 包
- 区分服务端延迟与网络延迟
- 支持 Spring Boot 内嵌 Tomcat 场景
Java 应用性能剖析:CPU、Off-CPU 与磁盘 I/O 分析(无 Safepoint 偏差)
- 用火焰图剖析 Java CPU 热点
- Off-CPU Java 性能分析:锁等待与阻塞诊断
- Java 磁盘 I/O 剖析:追踪文件与套接字写入
- 支持 OpenJDK 8/11/17/21 应用剖析
- 自动化采样与专家分析
- 性能影响与开销
- 常见问题

- 用火焰图剖析 Java CPU 热点
- Off-CPU Java 性能分析:锁等待与阻塞诊断
- Java 磁盘 I/O 剖析:追踪文件与套接字写入
- 支持 OpenJDK 8/11/17/21 应用剖析
- 自动化采样与专家分析
- 性能影响与开销
- 常见问题
生产环境如何追踪 Perl 异常(无需重启应用)
- 使用引导式分析功能分析 Perl 应用中的程序异常
- 全自动分析报告
- 常见问题

- 使用引导式分析功能分析 Perl 应用中的程序异常
- 全自动分析报告
- 常见问题
Perl 进程 CPU 使用率只有 13%:off-CPU 火焰图定位阻塞的 HTTP 调用
- 症状:请求涌入但 Perl 进程 CPU 使用率上不去
- 用 OpenResty XRay 的 off-CPU 火焰图定位阻塞的 Perl 代码路径
- Insights 页面中的全自动分析与报告
- FAQ

- 症状:请求涌入但 Perl 进程 CPU 使用率上不去
- 用 OpenResty XRay 的 off-CPU 火焰图定位阻塞的 Perl 代码路径
- Insights 页面中的全自动分析与报告
- FAQ
生产环境实测:追踪 Perl 应用时 OpenResty XRay 对系统性能的影响
- 分析期间对 CPU、内存和负载有何影响?
- 分析对吞吐量与延时的影响有多大?
- OpenResty XRay 与常驻式 APM Agent 的对比
- 常见问题

- 分析期间对 CPU、内存和负载有何影响?
- 分析对吞吐量与延时的影响有多大?
- OpenResty XRay 与常驻式 APM Agent 的对比
- 常见问题
线上定位 Perl 进程中最大的内存对象
- 症状:top 里某个 Perl 进程内存占用过高
- 用 OpenResty XRay 引导式分析定位最大的 Perl 对象
- 把最大的对象追溯回源码文件
- 用 Insights 报告自动监控 Perl 进程内存
- 常见问题(FAQ)
- 关于 OpenResty XRay

- 症状:top 里某个 Perl 进程内存占用过高
- 用 OpenResty XRay 引导式分析定位最大的 Perl 对象
- 把最大的对象追溯回源码文件
- 用 Insights 报告自动监控 Perl 进程内存
- 常见问题(FAQ)
- 关于 OpenResty XRay
Perl 高 CPU 使用率:火焰图定位正则表达式热点(100% CPU 实战排查)
- 问题: 高 CPU 使用率
- 使用 OpenResty XRay 的引导式分析功能定位最热的 Perl 代码路径
- 全自动分析与报告

- 问题: 高 CPU 使用率
- 使用 OpenResty XRay 的引导式分析功能定位最热的 Perl 代码路径
- 全自动分析与报告
Rust 进程硬盘 I/O 高的原因定位方法
- 定位硬盘 I/O 高的 Rust 进程
- 使用火焰图追踪 Rust 磁盘写入热点代码路径
- 自动磁盘 I/O 分析报告
- 常见问题

- 定位硬盘 I/O 高的 Rust 进程
- 使用火焰图追踪 Rust 磁盘写入热点代码路径
- 自动磁盘 I/O 分析报告
- 常见问题
生产环境如何追踪 Rust Panic(无需重启应用)
- 使用引导式分析功能分析 Rust 应用中的程序异常
- 全自动分析报告
- 常见问题

- 使用引导式分析功能分析 Rust 应用中的程序异常
- 全自动分析报告
- 常见问题
生产环境实测:追踪 Rust 应用时 OpenResty XRay 对系统性能的影响
- 分析期间对 CPU、内存和负载有何影响?
- 分析对吞吐量与延时的影响有多大?
- OpenResty XRay 与常驻式 APM Agent 的对比
- 常见问题

- 分析期间对 CPU、内存和负载有何影响?
- 分析对吞吐量与延时的影响有多大?
- OpenResty XRay 与常驻式 APM Agent 的对比
- 常见问题
Rust CPU 剖析实战:用 OpenResty XRay 找出 Sled 库中最热的代码路径
- 问题:基于 Sled 的缓存服务 CPU 使用率超过 100%
- 用引导式分析剖析运行中的 Rust 进程
- 解读 Rust CPU 火焰图:第一热代码路径
- 第二热代码路径:get_inner 与 view_for_key
- 全自动 Rust CPU 分析报告
- 常见问题

- 问题:基于 Sled 的缓存服务 CPU 使用率超过 100%
- 用引导式分析剖析运行中的 Rust 进程
- 解读 Rust CPU 火焰图:第一热代码路径
- 第二热代码路径:get_inner 与 view_for_key
- 全自动 Rust CPU 分析报告
- 常见问题
从 AI 火焰图分析到经验证的修复:用 OpenResty XRay 驱动 Coding Agent 性能优化闭环
- 前提:目标机器上必须已安装 OpenResty XRay
- coding agent 缺的不是智力,是运行时视野
- 三轮优化:336 → 4,457 → 26,028 → 29,968 RPS
- Lua + C 双视角:为什么不要误优化 writev
- 常见问题

- 前提:目标机器上必须已安装 OpenResty XRay
- coding agent 缺的不是智力,是运行时视野
- 三轮优化:336 → 4,457 → 26,028 → 29,968 RPS
- Lua + C 双视角:为什么不要误优化 writev
- 常见问题
使用 C++ 动态追踪 C++ 应用
- 设置目标 C++ 程序
- 编写 C++(或 Y++)分析器
- 将目标和分析器投入运行
- 支持复杂 C++ 应用的进展
- 关于调试符号
- 结论

- 设置目标 C++ 程序
- 编写 C++(或 Y++)分析器
- 将目标和分析器投入运行
- 支持复杂 C++ 应用的进展
- 关于调试符号
- 结论
Erlang 高 CPU 使用率:通过火焰图追踪 PCRE 正则瓶颈
- 观察 Erlang 进程 CPU 使用率超过 200%
- 使用 OpenResty XRay 分析 Erlang CPU 使用率
- C 语言级别分析:erts_pcre_exec 与 PCRE 回溯
- PCRE 正则回溯在 BEAM VM 中为何代价高昂
- 自动监控与报告
- 常见问题:Erlang 高 CPU 使用率

- 观察 Erlang 进程 CPU 使用率超过 200%
- 使用 OpenResty XRay 分析 Erlang CPU 使用率
- C 语言级别分析:erts_pcre_exec 与 PCRE 回溯
- PCRE 正则回溯在 BEAM VM 中为何代价高昂
- 自动监控与报告
- 常见问题:Erlang 高 CPU 使用率
Nginx 报 No debugging symbols found?用 OpenResty XRay 自动重建调试符号
- 确认 Nginx 被 strip、调试符号缺失
- 自动重建缺失的 Nginx 调试符号——无需重新编译
- 持续分析:每日与每周 Insights 报告
- 常见问题:nginx-dbg、重新编译与分析 strip 过的二进制

- 确认 Nginx 被 strip、调试符号缺失
- 自动重建缺失的 Nginx 调试符号——无需重新编译
- 持续分析:每日与每周 Insights 报告
- 常见问题:nginx-dbg、重新编译与分析 strip 过的二进制
自动分析 Core Dump(使用 OpenResty XRay)
- 定位崩溃的 OpenResty/Nginx worker 进程产生的 core dump 文件
- 在 OpenResty XRay 中启动自动(引导式)core dump 分析
- 解读崩溃时的信号、CPU 寄存器和 C 调用栈
- 沿着 Lua 调用栈定位到精确的崩溃代码行
- 针对线上 core dump 的自动 Insights 报告

- 定位崩溃的 OpenResty/Nginx worker 进程产生的 core dump 文件
- 在 OpenResty XRay 中启动自动(引导式)core dump 分析
- 解读崩溃时的信号、CPU 寄存器和 C 调用栈
- 沿着 Lua 调用栈定位到精确的崩溃代码行
- 针对线上 core dump 的自动 Insights 报告
Envoy CPU 性能分析:用火焰图定位 C++ 热路径
- 场景:Envoy 进程 CPU 占用超 90%
- 用 C++ 火焰图分析 Envoy CPU 消耗
- 持续 CPU 监控与自动化报告
- 关于 OpenResty XRay
- FAQ:Envoy CPU 性能分析

- 场景:Envoy 进程 CPU 占用超 90%
- 用 C++ 火焰图分析 Envoy CPU 消耗
- 持续 CPU 监控与自动化报告
- 关于 OpenResty XRay
- FAQ:Envoy CPU 性能分析
如何使用 OpenResty XRay 排查 HTTP 504 超时错误
- 问题:HTTP 504 网关超时错误
- 使用 OpenResty XRay 的引导式分析功能排查错误
- 全自动分析与报告

- 问题:HTTP 504 网关超时错误
- 使用 OpenResty XRay 的引导式分析功能排查错误
- 全自动分析与报告
llama.cpp CPU 占用分析:400% 的 CPU 追踪到 ggml 热点函数
- 运行 llama.cpp 并观察到 400% 的 CPU 使用率
- 使用 OpenResty XRay 剖析 llama.cpp 的 CPU 占用
- 分析结果:最热的 C++ 代码路径
- 关于 OpenResty XRay

- 运行 llama.cpp 并观察到 400% 的 CPU 使用率
- 使用 OpenResty XRay 剖析 llama.cpp 的 CPU 占用
- 分析结果:最热的 C++ 代码路径
- 关于 OpenResty XRay
Ylang 生产实战:容器追踪、栈回溯与 Core Dump 分析(第四集,全四集)
- 透明的跨容器追踪
- 高效的栈展开
- 分析已终止进程(core dumps)
- 极低的追踪开销
- 标准 Y 语言库和工具
- 网络过滤和控制
- Y 语言编译器的实现
- 操作系统支持
- 对开源社区的贡献
- 结论
- 致谢

- 透明的跨容器追踪
- 高效的栈展开
- 分析已终止进程(core dumps)
- 极低的追踪开销
- 标准 Y 语言库和工具
- 网络过滤和控制
- Y 语言编译器的实现
- 操作系统支持
- 对开源社区的贡献
- 结论
- 致谢
Ylang:正则表达式、完整控制流与透明调试符号处理(第三集,全四集)
- Y 语言的语法(接上文)
- 字符串
- 内置的正则表达式支持
- 完整控制流支持
- 浮点数支持
- 与开源工具链的比较
- 清晰的调试符号方式
- 调试符号:无运行期系统开销
- 集中的软件包数据库
- 模糊匹配调试符号

- Y 语言的语法(接上文)
- 字符串
- 内置的正则表达式支持
- 完整控制流支持
- 浮点数支持
- 与开源工具链的比较
- 清晰的调试符号方式
- 调试符号:无运行期系统开销
- 集中的软件包数据库
- 模糊匹配调试符号
Ylang 语法详解:探针、追踪者/被追踪者空间与内置数据类型(第二集,全四集)
- 语言语法(接上文)
- 宏拓展
- 追踪者与被追踪者空间
- 探针
- 拓展变量类型

- 语言语法(接上文)
- 宏拓展
- 追踪者与被追踪者空间
- 探针
- 拓展变量类型
捕捉 Linux 内核追踪子系统中的两个 bug(使用 OpenResty XRay)
- 读取用户空间内存时的内核死锁
- 内核中 x86 断点插入的数据竞争

- 读取用户空间内存时的内核死锁
- 内核中 x86 断点插入的数据竞争
Lua 高 CPU 占用排查:快速定位 Nginx/OpenResty 中最热的 Lua 代码路径
- 症状:一个 Nginx 工作进程占用近 100% CPU
- 使用引导式分析定位最热的 Lua 代码路径
- 通过 Insights 报告自动监控 Lua CPU 占用
- 常见问题

- 症状:一个 Nginx 工作进程占用近 100% CPU
- 使用引导式分析定位最热的 Lua 代码路径
- 通过 Insights 报告自动监控 Lua CPU 占用
- 常见问题
Kong 插件 CPU 过高:被 pcall 隐藏的 Lua 异常,靠 CPU 火焰图定位
- 问题:流量不高,Kong 插件 CPU 却过高
- 用 OpenResty XRay 火焰图定位 CPU 瓶颈
- 结果:Kong CPU 使用率从 80% 降到 50%

- 问题:流量不高,Kong 插件 CPU 却过高
- 用 OpenResty XRay 火焰图定位 CPU 瓶颈
- 结果:Kong CPU 使用率从 80% 降到 50%
在线上 Kong 服务进程中实时统计 CPU 和内存用量最高的插件(使用 OpenResty XRay)
- 服务器进程中所有 Kong 插件的 CPU 使用情况
- 服务器进程中所有 Kong 插件的内存使用情况
- 服务器的额外负担
- 下一步是什么?

- 服务器进程中所有 Kong 插件的 CPU 使用情况
- 服务器进程中所有 Kong 插件的内存使用情况
- 服务器的额外负担
- 下一步是什么?
Ylang: 适用于 eBPF、SystemTap、GDB 等框架的动态追踪语言(第一集,全四集)
- 什么是动态追踪
- 为什么命名为 “Y”
- Ylang 入门
- 动态追踪后端:eBPF+、Stap+、GDB 和 ODB
- 为什么动态追踪需要一个统一的前端语言
- Ylang 语法:真正兼容 C
- 常见问题

- 什么是动态追踪
- 为什么命名为 “Y”
- Ylang 入门
- 动态追踪后端:eBPF+、Stap+、GDB 和 ODB
- 为什么动态追踪需要一个统一的前端语言
- Ylang 语法:真正兼容 C
- 常见问题
慢速 TCP 连接抓包:追踪 Nginx 读取请求体的 200ms 延迟
- 问题
- 分析过程:慢速 TCP 连接上的抓包
- 全自动化的分析
- OpenResty XRay 是什么

- 问题
- 分析过程:慢速 TCP 连接上的抓包
- 全自动化的分析
- OpenResty XRay 是什么
定位泄漏的 Lua table:registry / _LOADED(package.loaded)引用路径 · OpenResty XRay
- LuaJIT 如何管理内存
- OpenResty XRay 的命令行工具
- 一个 Lua table 泄漏示例
- 按 LuaJIT GC 对象类型拆解内存
- 解读 lj-gco-ref 火焰图:registry、_LOADED、package.loaded
- 全自动 Lua 内存泄漏分析

- LuaJIT 如何管理内存
- OpenResty XRay 的命令行工具
- 一个 Lua table 泄漏示例
- 按 LuaJIT GC 对象类型拆解内存
- 解读 lj-gco-ref 火焰图:registry、_LOADED、package.loaded
- 全自动 Lua 内存泄漏分析
使用 YSQL 语言对 Nginx 进程进行实时请求计数
- 如何安装 run-ysql 工具
- 统计实时总请求数
- 筛选出特定的请求
- 在 Web 控制台中使用 YSQL
- 真正的非侵入式追踪

- 如何安装 run-ysql 工具
- 统计实时总请求数
- 筛选出特定的请求
- 在 Web 控制台中使用 YSQL
- 真正的非侵入式追踪
Lua io.popen 阻塞 Nginx 事件循环:一次 150 倍吞吐量提升的实战案例
- 问题:每秒 130 个请求
- OpenResty XRay 如何定位阻塞
- io.popen 的非阻塞替代方案
- 结果:7 倍与 150 倍
- 常见问题

- 问题:每秒 130 个请求
- OpenResty XRay 如何定位阻塞
- io.popen 的非阻塞替代方案
- 结果:7 倍与 150 倍
- 常见问题
优化超大 Nginx 配置导致的内存碎片
- 挑战
- 分析
- 解决方案
- 结果

- 挑战
- 分析
- 解决方案
- 结果
QCon 北京 2023 大会上关于深度分析和诊断 K8s 容器应用的演讲
本周我受邀在 QCon 北京 2023 大会上作了一次远程分享。

本周我受邀在 QCon 北京 2023 大会上作了一次远程分享。
在 OpenResty 或 Nginx 进程中列出已加载的 Lua 模块
- 系统环境
- 已加载 Lua 模块的名称
- 直接在 Web 控制台中运行
- 追踪容器内的应用
- 工具的实现方式
- 工具的开销

- 系统环境
- 已加载 Lua 模块的名称
- 直接在 Web 控制台中运行
- 追踪容器内的应用
- 工具的实现方式
- 工具的开销
Nginx CPU 占用过高:定位哪个请求消耗最多 CPU
- 前提条件与环境准备
- 定位哪个请求主机名最耗 CPU
- 定位哪个请求 URI 最耗 CPU
- 深入探究:为什么某些主机名更耗 CPU
- 在 Web 控制台中运行这些工具
- 在容器内追踪 Nginx CPU 占用
- CPU 分析工具的实现原理
- 分析工具的开销
- 常见问题

- 前提条件与环境准备
- 定位哪个请求主机名最耗 CPU
- 定位哪个请求 URI 最耗 CPU
- 深入探究:为什么某些主机名更耗 CPU
- 在 Web 控制台中运行这些工具
- 在容器内追踪 Nginx CPU 占用
- CPU 分析工具的实现原理
- 分析工具的开销
- 常见问题
内存减少 60%,OpenResty XRay 精准定位问题代码,快速完成修复上线
- worker 进程内存占用高
- 分析过程
- worker 进程内存不释放的疑问

- worker 进程内存占用高
- 分析过程
- worker 进程内存不释放的疑问
Lua CPU 火焰图实战:在线定位 LuaJIT 性能瓶颈
- 什么是 Lua CPU 火焰图
- 分析简单 LuaJIT 应用:验证火焰图精度
- 生产环境实战:复杂 LuaJIT 应用
- 采样开销
- 生产安全性:不修改目标进程
- 兼容性
- 常见问题

- 什么是 Lua CPU 火焰图
- 分析简单 LuaJIT 应用:验证火焰图精度
- 生产环境实战:复杂 LuaJIT 应用
- 采样开销
- 生产安全性:不修改目标进程
- 兼容性
- 常见问题
OpenResty 与 Nginx 共享内存区的内存碎片问题
- 空的共享内存区
- 填充类似大小的条目
- 删除奇数键
- 删除前半部分的键
- 缓解内存碎片

- 空的共享内存区
- 填充类似大小的条目
- 删除奇数键
- 删除前半部分的键
- 缓解内存碎片
OpenResty 和 Nginx 的共享内存区是如何消耗物理内存的
- Slab 与内存页
- 分配的内存不一定有消耗
- 虚假的内存泄漏
- HUP 重新加载

- Slab 与内存页
- 分配的内存不一定有消耗
- 虚假的内存泄漏
- HUP 重新加载
OpenResty 和 Nginx 如何分配和管理内存
- 如何查看 Nginx 内存使用
- 系统层面
- 应用层面
- 传统的 Nginx 服务器
- FAQ:Nginx 需要多少内存?

- 如何查看 Nginx 内存使用
- 系统层面
- 应用层面
- 传统的 Nginx 服务器
- FAQ:Nginx 需要多少内存?
LuaJIT GC64 模式
- 老的内存限制
- 何时会碰到这个内存限制
- 内存限制是每进程的
- GC 管理的内存
- 不由 GC 管理的内存
- 提升 x64 模式的内存上限到 4 GB
- 新的 GC64 模式
- 如何开启 GC64 模式
- 性能影响
- 调试分析工具链

- 老的内存限制
- 何时会碰到这个内存限制
- 内存限制是每进程的
- GC 管理的内存
- 不由 GC 管理的内存
- 提升 x64 模式的内存上限到 4 GB
- 新的 GC64 模式
- 如何开启 GC64 模式
- 性能影响
- 调试分析工具链



