# 客户问题快速诊断工具集分享文档
# 1. 工具集与示例文件
工具分享地址:
# 2. 分享目标
依据 10个问题诊断、功能辅助工具,重点说明这些工具在什么场景下使用、解决什么问题、如何组合形成排障证据链,以及现场分享和演示时应该如何组织内容。
本文不是简单的命令清单,而是面向客户现场快速处理问题的工具使用指南。目标是帮助现场支持、交付、运维和研发同学在面对客户问题时快速完成三件事:
快速判断问题方向:慢在哪里、错在哪里、资源瓶颈在哪里。
快速沉淀证据:从日志、数据库、Redis、K8s、JVM、火焰图中生成可解释报告。
快速形成结论:明确影响范围、风险等级、下一步动作和是否需要研发深入介入。
# 3. 适用人群
现场交付和运维:需要快速采集客户现场证据、生成报告、判断影响范围。
一线支持:需要根据客户反馈快速选择工具、缩小问题范围。
研发同学:需要拿到结构化证据后继续分析代码、SQL、Redis、JVM 或 K8s 问题。
技术负责人:需要了解这套工具如何支撑客户现场稳定性治理和故障复盘。
# 4. 10 个工具总览
| 编号 | 工具 | 工具定位 | 现场价值 |
|---|---|---|---|
00_db_stress | 数据库压测工具 | 对 MySQL/达梦执行多场景 SQL 压测 | 验证 SQL 或数据库变更前后的吞吐、P90/P99、成功率 |
01_diag_flow | 全景诊断编排入口 | 按场景串联 K8s 扫描和火焰图采样 | 降低现场执行复杂度,一条命令完成复合诊断 |
02_dm_log_analyzer | 达梦慢查询日志分析 | 解析达梦慢日志并按 SQL 指纹聚合 | 找出高频慢 SQL、累计耗时 SQL、爆发时间窗口 |
03_error_log_statistics | 错误日志统计 | 聚合 ERROR 日志、异常类型和趋势 | 把大量错误日志压缩成 TopN 错误清单和爆发趋势 |
04_form_load_statistics | 表单/审批加载耗时分析 | 解析审批应用动态加载耗时分布 | 判断表单/审批慢在哪个加载阶段 |
05_k8s_scan | K8s Java 全景诊断 | 采集 K8s、Pod、JVM、GC、线程、事件、指标 | 形成集群 + Pod + JVM 三层运行态证据 |
06_log_search | 日志关键字检索 | 在大量日志和 ZIP 中检索关键字、正则、表达式 | 客户只给关键字、traceId、错误片段时快速定位上下文 |
07_log_statistics | 日志量统计 | 按应用、类名、日志级别统计日志量和字节量 | 找出日志刷屏来源,支撑日志降噪和容量治理 |
08_redis_scan | Redis 低风险诊断 | 采集 Redis 慢日志、连接、内存、持久化、复制、Key 样本 | 高峰期低风险判断 Redis 风险点 |
09_sy_profiler | Java 容器火焰图采样 | 在 K8s 容器内执行 async-profiler 采样 | 定位 CPU 热点、分配热点、锁竞争、wall time 卡顿 |
# 5. 客户现场快速选型矩阵
| 现场问题 | 首选工具 | 辅助工具 | 处理目标 |
|---|---|---|---|
| 页面慢 | log_search | error_log_statistics、k8s_scan、dm_log_analyzer、redis_scan | 先定位慢在入口、应用、数据库、Redis 还是资源 |
| 接口慢 | log_search | k8s_scan、sy_profiler、dm_log_analyzer、redis_scan | 还原接口上下文,判断链路瓶颈和运行态压力 |
| 审批/表单慢 | form_load_statistics | log_search、dm_log_analyzer、k8s_scan | 找出慢表单、慢应用 ID 和加载阶段耗时 |
| 错误爆发 | error_log_statistics | log_search、k8s_scan、redis_scan、dm_log_analyzer | 聚合异常类型、爆发时间和影响应用 |
| 只知道 traceId | log_search | k8s_scan、dm_log_analyzer、redis_scan | 快速找到请求上下文和涉及服务 |
| 只知道关键字 | log_search | error_log_statistics、log_statistics | 用关键字、正则或逻辑表达式缩小范围 |
| 达梦慢 SQL | dm_log_analyzer | log_search、db_stress | 找 SQL 指纹、慢查询时间窗口和优化验证证据 |
| Redis 慢/内存高 | redis_scan | log_search | 低风险分析慢日志、连接、内存、持久化、复制和 Key 样本 |
| K8s Pod 异常 | k8s_scan | log_search、error_log_statistics、sy_profiler | 采集 Pod、JVM、GC、线程、事件和节点证据 |
| CPU 高 | k8s_scan | sy_profiler、log_search | 先确认目标 Pod,再采火焰图定位热点 |
| 日志刷屏/磁盘增长快 | log_statistics | log_search、error_log_statistics | 找出哪个应用、类名、日志级别贡献最大 |
# 6. 工具详细说明
# 6.1 00_db_stress 数据库压测工具
# 工具定位
db_stress 是 MySQL/达梦数据库多场景 SQL 压测工具,用于将“数据库性能感觉慢”转化为可量化的吞吐、耗时和错误率数据。
# 解决的问题
它适合验证数据库在指定 SQL、指定并发和指定持续时间下的表现,输出 TPS、成功数、失败数、平均耗时、P90、P99 等指标。它更适合作为变更验证和性能基准工具,而不是客户现场慢问题的第一步诊断工具。
# 适用场景
数据库版本升级、参数调整、SQL 优化前后做性能对比。
验证达梦或 MySQL 在特定查询场景下的并发能力。
在测试环境复现某类 SQL 并发后响应变慢的问题。
对客户现场定位出的慢 SQL 做低峰或非生产验证。
# 不适用或慎用场景
生产高峰期直接压测数据库。
未确认 SQL 安全性时执行写入或批量事务场景。
没有控制并发、时长、数据范围时直接运行。
用它替代慢日志分析或执行计划分析。
# 输入材料
db_stress_mysql.yaml或db_stress_dm.yaml。数据库连接配置或 DSN。
SQL 场景列表。
可选 CSV 参数文件。
并发数和持续时间。
# 输出结果
控制台压测统计。
./logs/<脚本名>_YYYYMMDD_HHMMSS.log。./output/report_YYYYMMDD_HHMMSS.html。
# 核心处理流程
读取 YAML 配置
-> 初始化 MySQL/达梦连接池
-> 解析多个 SQL 场景
-> 将总并发平分到各场景
-> 执行查询或批量事务
-> 汇总 TPS、成功率、失败率、P90、P99
-> 输出 HTML 报告
# 常用命令
# MySQL 压测示例
./db_stress-v1.1.4-darwin-arm64 -config db_stress_mysql.yaml -c 10 -t 10
# 达梦压测示例
./db_stress-v1.1.4-darwin-arm64 -config db_stress_dm.yaml -c 10 -t 10
# 报告怎么看
TPS:看数据库在该场景下的吞吐能力。
成功数/失败数:失败数高时先看连接、SQL、权限、锁或超时。
平均耗时:看整体稳定性。
P90/P99:看尾部延迟,客户现场慢通常更关注 P99。
场景维度:多 SQL 场景时要看哪个场景拖慢整体结果。
# 现场处理建议
页面慢或接口慢时不要第一步就跑压测。建议先用 log_search、error_log_statistics、dm_log_analyzer 判断是否确实指向数据库,再用 db_stress 在受控环境验证 SQL 优化效果。
# 6.2 01_diag_flow 全景诊断编排入口
# 工具定位
diag_flow 是诊断工具链的统一入口和场景编排器。它通过场景 YAML 把 k8s_scan、sy_profiler 等子工具组合起来,让现场从“记一堆命令”变成“选择一个场景”。
# 解决的问题
它解决的是现场执行复杂、参数易错、输出分散的问题。对 K8s 和 JVM 类问题,现场通常需要先扫 Pod/JVM 状态,再对目标 Pod 采火焰图。diag_flow 可以把这些动作封装为一个场景命令。
# 适用场景
客户现场需要一键执行 K8s 全景诊断。
CPU 高时需要先扫描目标应用,再采集火焰图。
多个工具需要统一输出目录、日志目录和结果编号。
分享或培训时需要降低命令复杂度。
# 不适用或慎用场景
只需要单独跑一个简单日志工具时,不必使用编排入口。
场景配置未校验前,不建议直接在客户生产环境运行。
子工具风险仍然存在,
diag_flow不会消除sy_profiler或深度扫描本身的影响。
# 输入材料
主配置
config.yaml。场景配置
config/scenes/*.yaml。子工具目录
tools/。场景参数,如 namespace、应用名、Pod、采样时长、采样事件。
# 输出结果
logs/diag-flow_<timestamp>.log。统一
output/目录。子工具生成的 HTML、JSON、CSV、tar.gz 或 raw 数据。
# 核心处理流程
解析 -s 场景名和透传参数
-> 读取主配置和场景 YAML
-> 校验脚本、步骤和参数映射
-> 组装子工具命令
-> 按步骤执行 k8s_scan / sy_profiler 等工具
-> 汇总日志和输出目录
# 常用命令
cd /usr/local/src/diag_flow
# K8s 全景扫描
./diag_flow -s k8s_scan_all -app bpm -n seeyon-wcl -id a1002
# K8s 扫描 + CPU 火焰图采样
./diag_flow -s k8s_scan_profiler -app ai -p ai-9b6bbd678-2rp6l -d 10 -e cpu -n seeyon-wcl -id a1004
# 报告怎么看
先看
diag_flow日志确认每个步骤是否执行成功。再进入子工具报告目录看
k8s_scan或sy_profiler的具体结果。如果场景失败,优先检查参数映射、子工具权限、目标 namespace 和 Pod 是否正确。
# 现场处理建议
在客户现场,建议把 diag_flow 作为 K8s/JVM 类问题的推荐入口。普通日志分析仍直接使用对应工具即可。
# 6.3 02_dm_log_analyzer 达梦慢查询日志分析工具
# 工具定位
dm_log_analyzer 是达梦慢查询日志分析工具,用于把达梦慢日志转化为 SQL 指纹、耗时、次数、时间窗口和来源维度报告。
# 解决的问题
它解决“达梦慢日志太多、无法快速看出哪些 SQL 真正影响最大”的问题。通过 SQL 指纹归并,它能找出高频慢 SQL、累计耗时最高 SQL、单次最慢 SQL 和慢查询爆发时间段。
# 适用场景
页面慢或接口慢最终怀疑达梦数据库。
客户提供达梦慢日志,需要快速出分析报告。
国产数据库迁移后出现 SQL 性能问题。
需要把应用慢和数据库慢按时间窗口对齐。
# 不适用或慎用场景
非达梦慢日志格式。
需要直接分析执行计划、锁等待或数据库实例内部状态的场景。
慢日志未开启或日志字段缺失时,分析结果有限。
# 输入材料
达梦慢日志文件。
达梦慢日志目录。
包含达梦慢日志的 ZIP。
可选时间范围、慢 SQL 阈值、时间桶粒度。
# 输出结果
./output/report_<时间戳>.html。SQL 指纹聚合结果。
慢 SQL TopN。
时间窗口趋势。
用户/IP 来源维度。
# 核心处理流程
扫描日志文件或 ZIP
-> 识别达梦慢日志块
-> 解析 SQL、EXECTIME、ROWCOUNT、用户、IP、时间
-> 按阈值和时间范围过滤
-> 生成 SQL 指纹并聚合
-> 统计 TopN、P95、时间窗口趋势
-> 输出 HTML 报告
# 常用命令
# 基础分析
./dm_log_analyzer-1.5.0-darwin-arm64 -d ../../assist/dm_logs/
# 指定阈值和输出目录
./dm_log_analyzer-1.5.0-darwin-arm64 -d ./logs -t 1000 -o ./output
# 指定时间范围
./dm_log_analyzer-1.5.0-darwin-arm64 -d ./logs -start "2026-05-19 10:00:00" -end "2026-05-19 12:00:00"
# 报告怎么看
SQL 指纹 TopN:优先看累计耗时高且执行次数多的 SQL。
单次最慢 SQL:用于定位极端慢请求。
平均耗时/P95:判断该 SQL 是否稳定慢。
时间窗口趋势:用于和客户反馈时间、接口慢时间对齐。
用户/IP:判断慢 SQL 来源应用或节点。
# 现场处理建议
如果 dm_log_analyzer 显示同一 SQL 指纹高频慢,下一步应结合应用入口、SQL 参数、索引、执行计划和数据量分析。它是第一层证据,不应单独作为最终根因。
# 6.4 03_error_log_statistics 错误日志统计工具
# 工具定位
error_log_statistics 是错误日志聚合工具,用于把大量 ERROR 日志和异常堆栈归类成 TopN 错误、趋势和爆发时间。
# 解决的问题
它解决“错误很多,不知道主要错误是什么”的问题。它会提取异常类型、归一化动态参数、按应用和类名聚合,帮助现场快速识别最需要处理的错误模式。
# 适用场景
客户反馈系统大量报错。
故障期间 error 日志很多,需要快速归类。
多个应用同时报错,需要判断是否公共依赖异常。
需要输出错误爆发趋势和 TopN 错误清单。
# 不适用或慎用场景
需要还原完整调用链的场景。
非标准日志格式可能只能部分解析。
日志文件名不包含
error时,需要调整文件名过滤参数。
# 输入材料
error 日志目录。
多个日志目录,逗号分隔。
ZIP 日志包。
可选 TopN、文件名过滤、时间桶参数。
# 输出结果
HTML 交互式报告。
CSV 报告。
过程日志。
错误类型趋势、类名趋势和尖峰分析。
# 核心处理流程
扫描 error 日志和 ZIP
-> 解析 ERROR 日志头和异常堆栈
-> 提取异常类型和根因
-> 归一化 UUID、ID、IP、时间、JSON 等动态内容
-> 构建错误签名
-> 聚合 TopN、时间趋势、尖峰
-> 输出 HTML 和 CSV 报告
# 常用命令
# 基础分析
./error_log_statistics-v1.1.6-darwin-arm64 -d ../../assist/中核
# 指定 TopN 和文件名过滤
./error_log_statistics-v1.1.6-darwin-arm64 -d ./logs -n 100 -pattern error
# 多目录分析
./error_log_statistics-v1.1.6-darwin-arm64 -d /data/app1,/data/app2 -w 8
# 仅做趋势分析
./error_log_statistics-v1.1.6-darwin-arm64 --trend-only -d ./logs
# 报告怎么看
TopN 错误:优先看出现次数最多、涉及应用最多的错误。
错误趋势:看错误是否在某个时间点突然爆发。
应用维度:判断是单应用问题还是公共依赖问题。
类名维度:定位错误集中在哪些代码路径。
样本堆栈:用于交给研发继续定位。
# 现场处理建议
如果客户只给一批 error 日志但没有明确关键字,先用 error_log_statistics 聚合。如果已经知道 traceId、异常类型或业务关键字,再用 log_search 查上下文。
# 6.5 04_form_load_statistics 表单/审批加载耗时分析工具
# 工具定位
form_load_statistics 是审批应用和表单加载耗时专项分析工具,用于解析业务日志中的动态加载总耗时和阶段耗时分布。
# 解决的问题
它解决“审批或表单打开慢,但不知道慢在哪个阶段”的问题。它能从日志中提取应用 ID、加载总耗时、class 数量和各阶段耗时占比。
# 适用场景
审批应用打开慢。
表单首次加载慢。
动态应用加载超时。
需要判断慢在
data init、scan module classes、download module等哪个阶段。
# 不适用或慎用场景
普通接口慢分析。
日志中没有“耗时分布”或“动态加载总耗时”标记。
非审批/表单加载类日志。
# 输入材料
审批应用相关日志目录。
app-approval-info.log*日志。ZIP 日志包。
可选阈值和 TopN。
# 输出结果
./output/report.html。./output/report.csv。超时加载 TopN。
应用 ID、总耗时、阶段耗时分布。
# 核心处理流程
扫描审批/表单日志和 ZIP
-> 自动识别 UTF-8/GBK
-> 解析加载 class 数量、应用 ID、耗时分布
-> 提取动态加载总耗时和阶段耗时
-> 按阈值筛选超时记录
-> 汇总 TopN 和统计指标
-> 输出 HTML 和 CSV 报告
# 常用命令
# 基础分析
./form_load_statistics-1.0.0-darwin-arm64 -d ../../assist/zhai
# 指定多个目录和阈值
./form_load_statistics-1.0.0-darwin-arm64 -d "./log1,./log2" -t 5000
# 指定配置文件
./form_load_statistics-1.0.0-darwin-arm64 -c custom_config.yaml
# 报告怎么看
总记录数:本次分析识别到多少加载事件。
超时记录:超过阈值的加载事件数量。
TopN 慢记录:优先看最慢的应用 ID。
阶段耗时占比:判断慢在数据初始化、扫描 class、下载模块还是创建实例。
原始日志块:用于研发复核和二次定位。
# 现场处理建议
如果报告显示大量慢记录集中在 data init,要继续看数据量、权限、表单配置、数据库查询等。如果集中在 scan module classes,要关注动态模块数量、类扫描和部署包结构。
# 6.605_k8s_scan K8s Java 全景诊断工具
# 工具定位
k8s_scan 是 K8s Java 应用全景诊断工具,用于采集集群、Pod、容器、JVM、GC、线程、事件和 Prometheus 指标,形成运行态证据包。
# 解决的问题
它解决“应用运行态到底有没有问题”的问题。客户现场出现 Pod 重启、CPU 高、内存高、GC 异常、线程异常、节点资源紧张时,k8s_scan 可以快速形成全景快照。
# 适用场景
K8s Pod 异常、重启、NotReady、CrashLoopBackOff。
Java 服务 CPU 高、内存高、GC 频繁。
接口慢但需要确认应用运行态是否异常。
需要采集一份可归档的现场运行态报告。
# 不适用或慎用场景
没有
kubectl或目标 namespace 权限。目标容器禁止 exec。
容器镜像裁剪严重,缺少 JDK 工具时 JVM 诊断能力会下降。
未确认目标范围时不要大范围 deep 扫描。
# 输入材料
Kubernetes 当前 context。
namespace。
Pod 名称关键字。
可选 Prometheus 地址。
输出 ID。
# 输出结果
HTML 报告。
CSV/JSON 指标。
raw 原始快照。
response.json。tar.gz 归档包。
运行日志。
# 核心处理流程
解析 namespace、Pod 过滤和模式
-> 前置检查 kubectl、exec、JDK 工具、Prometheus
-> 发现 Node、Pod、资源 request/limit
-> 采集 K8s 事件和节点信息
-> 采集 JVM、GC、线程、内存、CPU 等运行态数据
-> 拉取 Prometheus 指标
-> 生成诊断报告和归档包
# 常用命令
# 通过 diag_flow 执行 K8s 全景扫描
./diag_flow -s k8s_scan_all -app bpm -n seeyon-wcl -id a1002
# 直接执行前置检查
./k8s_scan -check -n <namespace> -p <pod-keyword>
# 直接执行快速诊断
./k8s_scan -n <namespace> -p <pod-keyword> -m quick -id <case-id>
# 报告怎么看
Pod 状态:看是否重启、NotReady、OOMKilled。
资源配置:看 request/limit 是否过低或资源争抢。
JVM 指标:看 GC、线程、堆内存、死锁风险。
K8s 事件:看调度、探针、镜像、节点事件。
Prometheus 指标:看问题时间窗口内的 CPU、内存、网络、IO 趋势。
# 现场处理建议
CPU 高或接口慢时,不要直接采火焰图。建议先用 k8s_scan 确认目标 Pod、资源、GC 和线程情况,再决定是否用 sy_profiler 深挖。
# 6.706_log_search 日志关键字检索工具
# 工具定位
log_search 是日志排障的第一把筛子。它支持普通文本和 ZIP 日志,支持字符串、正则、通配符、函数表达式、上下文行和趋势聚合。
# 解决的问题
它解决“客户只给一个关键字、traceId、用户 ID、接口名、错误片段,不知道日志在哪”的问题。它可以快速从大量日志和 ZIP 包里定位命中位置、上下文和时间分布。
# 适用场景
只知道 traceId。
只知道错误关键字。
只知道用户 ID、单据号、应用 ID、接口路径。
需要在 ZIP 日志中直接检索,不想手工解压。
需要查看命中前后上下文。
# 不适用或慎用场景
需要语义理解或完整调用链还原。
关键字过宽导致命中量巨大。
大日志量使用 memory 模式可能占用较多内存。
# 输入材料
日志目录。
日志文件。
ZIP 日志包。
关键字、正则、通配符或函数表达式。
可选文件名过滤、后缀过滤、上下文行。
# 输出结果
HTML 报告。
JSON 报告。
CSV 报告。
运行日志。
disk 模式临时结果文件,正常结束会自动清理。
# 核心处理流程
解析路径、关键字和匹配模式
-> 扫描文件和 ZIP
-> 初始化字符串/正则/通配符/函数表达式匹配器
-> 多 worker 检索命中行
-> 提取上下文和时间信息
-> 聚合文件、目录、时间桶趋势
-> 输出 HTML/JSON/CSV
# 常用命令
# 基础检索 ERROR
./log_search-v3.6.9-darwin-arm64 -k ERROR -d ../../assist/中核
# 查看上下文
./log_search-v3.6.9-darwin-arm64 -d ../log -k "ERROR" -C 2
# 大日志量使用 disk 模式
./log_search-v3.6.9-darwin-arm64 -d ../log -pm disk -k "ERROR" -f html,json
# 函数表达式
./log_search-v3.6.9-darwin-arm64 -d ../log -m f -k "and(ERROR, Database)"
# 文件名过滤
./log_search-v3.6.9-darwin-arm64 -d ../log -k "ERROR" -p "*-error*.log"
# 指定趋势时间范围
./log_search-v3.6.9-darwin-arm64 -d ../log -k "ERROR" -ts 09:00 -te 18:00 -tb 1
# 报告怎么看
命中总数:判断关键字是否大量出现。
命中文件:判断涉及哪些应用或节点。
时间趋势:判断是否在客户反馈时间窗口集中出现。
上下文:判断关键字前后是否有异常、接口、用户、SQL、Redis 等线索。
输出 JSON/CSV:适合交给研发或二次处理。
# 现场处理建议
现场不知道从哪里开始时,优先用 log_search 粗筛。如果命中的是大量 ERROR,再转 error_log_statistics 聚合。如果命中的是慢 SQL、Redis 超时、审批加载耗时,再转专项工具。
# 6.8 07_log_statistics 日志量统计工具
# 工具定位
log_statistics 是日志量统计和日志降噪工具,用于按应用、类名、级别和字节量统计日志贡献度。
# 解决的问题
它解决“日志到底是谁打出来的、为什么磁盘涨得快、哪个类在刷屏”的问题。它关注日志量和容量治理,不直接分析业务错误根因。
# 适用场景
客户现场磁盘增长快。
info/error 日志刷屏。
需要找出日志量最大的应用、类名或日志级别。
需要评估忽略某些类或降低日志级别后能节省多少空间。
# 不适用或慎用场景
需要分析异常根因时,应使用
error_log_statistics。需要按关键字找上下文时,应使用
log_search。非标准日志格式可能无法准确识别类名和应用名。
# 输入材料
日志文件。
日志目录。
ZIP 日志包。
可选忽略类名配置。
# 输出结果
HTML 报告。
CSV 数据。
中间数据文件。
控制台摘要。
# 核心处理流程
扫描日志文件和 ZIP
-> 识别日志文件类型
-> 多 worker 解析日志行
-> 提取应用、类名、日志级别、字节量
-> 写入中间数据
-> 汇总 class/app/level 维度
-> 输出日志量统计报告
# 常用命令
# 基础分析
./log_statistics-1.0.0-darwin-arm64 -d ../../assist/中核
# 指定配置和忽略类
./log_statistics-1.0.0-darwin-arm64 -d /var/logs -f config.yaml -i "com.example.IgnoredClass"
# 仅分析已有中间数据
./log_statistics-1.0.0-darwin-arm64 -a -data ./log_stats.dat
# 报告怎么看
应用维度:看哪个应用贡献日志最多。
类名维度:看哪个类刷屏。
级别维度:看 ERROR/WARN/INFO 的占比。
字节量:看真正造成磁盘压力的日志来源。
忽略类模拟:评估降噪收益。
# 现场处理建议
磁盘告警或日志量暴涨时,先用 log_statistics 找刷屏来源,再用 log_search 查看刷屏内容,若是 error 刷屏再用 error_log_statistics 聚合异常类型。
# 6.9 08_redis_scan Redis 低风险诊断工具
# 工具定位
redis_scan 是 Redis 服务端低风险诊断工具,以高峰可用、低风险优先为设计目标,采集慢日志、客户端、内存、持久化、复制、命令统计和 Key 样本。
# 解决的问题
它解决“Redis 慢、连接高、内存高、持久化或复制风险不明确”的问题。通过 peak/routine/night 三种模式控制采集力度,避免在高峰期执行高风险命令。
# 适用场景
Redis 响应慢或应用侧 Redis 超时。
Redis 连接数高。
Redis 内存高或疑似大 Key。
需要检查 Redis 慢日志、持久化、复制状态。
高峰期需要低风险采集基础证据。
# 不适用或慎用场景
高峰期直接使用
night -F。期望通过一次采样证明全量 Key 分布。
网络、认证、权限不明确时直接执行正式采集。
# 输入材料
Redis 地址和端口。
Redis 密码。
采集模式:
peak、routine、night。可选输出格式和 result id。
# 输出结果
HTML 报告。
JSON 结构化结果。
运行日志。
风险点、证据和建议。
# 核心处理流程
读取配置和 CLI 参数
-> 校验 Redis 地址、模式和输出格式
-> dry-run 或建立 Redis 连接
-> 根据模式执行低风险采集
-> 采集 INFO、SLOWLOG、CLIENT、持久化、复制、命令统计
-> routine/night 执行受控 Key 采样
-> 汇总风险点和建议
-> 输出 HTML/JSON 报告
# 常用命令
# 使用配置文件中的地址,执行高峰保守采集
./redis_scan-v2.0.1-darwin-arm64 -m peak
# 参数校验,不连接 Redis
./redis_scan-v2.0.1-darwin-arm64 -d <redis-host>:6379 -n
# 常规低风险诊断
./redis_scan-v2.0.1-darwin-arm64 -d <redis-host>:6379 -a "<password>" -m routine -f html,json
# 低峰深度采样
./redis_scan-v2.0.1-darwin-arm64 -host <redis-host> -port 6379 -m night -slowlog 20 -sample-limit 200
# 报告怎么看
慢日志:看是否有高耗时命令、发生时间和 Key。
客户端连接:看是否连接堆积或异常客户端过多。
内存:看 used_memory、maxmemory、碎片率和淘汰风险。
持久化:看 RDB/AOF 是否可能引起抖动。
复制:看主从状态、延迟和角色。
Key 样本:看疑似大 Key、无 TTL Key 或 Key 分布异常。
# 现场处理建议
高峰期优先 peak 或 routine。只有在低峰并确认风险后,才考虑 night。-F 强制模式会跳过安全降级,应作为最后手段。
# 6.10 09_sy_profiler Java 容器火焰图采样工具
# 工具定位
sy_profiler 是 K8s Java 容器 async-profiler 采样工具,用于在不改镜像、不重启服务的情况下采集 CPU、alloc、lock、wall 等火焰图。
# 解决的问题
它解决“CPU 高但不知道代码热点在哪里、接口慢但不知道线程在等什么、锁竞争或对象分配热点不清楚”的问题。
# 适用场景
Java 服务 CPU 高。
接口慢且怀疑应用内部热点。
需要分析对象分配热点:
event=alloc。需要分析锁竞争:
event=lock。需要分析线程等待、IO、阻塞:
event=wall。
# 不适用或慎用场景
未确认目标 Pod 和容器。
容器不允许 attach 或缺少必要权限。
多 Java 进程但未明确目标进程。
在多个 Pod 上长时间同时采样。
# 输入材料
namespace。
Pod 名称。
container 名称。
采样事件:
cpu、alloc、lock、wall。采样时长。
本地 async-profiler 扩展包。
# 输出结果
- HTML 火焰图。
- JFR 文件。
- collapsed 文件。
- metadata.json。
- 运行日志。
- tar.gz 归档。
# 核心处理流程
解析 namespace、pod、container、event、duration
-> 校验 kubectl、目标 Pod 和容器
-> 识别容器 CPU 架构
-> 下发 async-profiler 到容器
-> 自动识别 Java PID
-> 执行采样并生成 HTML/JFR/collapsed
-> 容器内打包结果
-> 回传本地归档
# 常用命令
# 通过 diag_flow 执行 K8s 扫描 + CPU 火焰图采样
./diag_flow -s k8s_scan_profiler -app ai -p ai-9b6bbd678-2rp6l -d 10 -e cpu -n seeyon-wcl -id a1004
# 直接采集 CPU 火焰图
./sy_profiler -c config.yaml -n <namespace> -pod <pod-name> -container <container-name> -event cpu -duration 30 -id <case-id>
# 采集 wall time
./sy_profiler -c config.yaml -n <namespace> -pod <pod-name> -container <container-name> -event wall -duration 60 -id <case-id>
# 报告怎么看
CPU 火焰图:宽度越大的方法占用 CPU 越高。
wall 火焰图:反映等待、阻塞、IO、网络等耗时,不等同于 CPU 消耗。
lock 火焰图:用于分析锁竞争。
alloc 火焰图:用于分析对象分配热点。
metadata:确认采样对象、Pod、容器、事件和时间是否正确。
# 现场处理建议
CPU 高时先用 k8s_scan 确认目标 Pod,再用 sy_profiler 短时间采样。采样结果应交给研发结合代码路径分析,不建议只凭火焰图宽度直接做业务结论。
快速跳转
- 客户问题快速诊断工具集分享文档
- 1. 工具集与示例文件
- 2. 分享目标
- 3. 适用人群
- 4\. 10 个工具总览
- 5. 客户现场快速选型矩阵
- 6. 工具详细说明
- 6.1 `00_db_stress` 数据库压测工具
- 6.2 `01_diag_flow` 全景诊断编排入口
- 6.3 `02_dm_log_analyzer` 达梦慢查询日志分析工具
- 6.4 `03_error_log_statistics` 错误日志统计工具
- 6.5 `04_form_load_statistics` 表单/审批加载耗时分析工具
- 6.6`05_k8s_scan` K8s Java 全景诊断工具
- 6.7`06_log_search` 日志关键字检索工具
- 6.8 `07_log_statistics` 日志量统计工具
- 6.9 `08_redis_scan` Redis 低风险诊断工具
- 6.10 `09_sy_profiler` Java 容器火焰图采样工具