1127 字
6 分钟
其他分析工具

参考:https://blog.csdn.net/jctian000/article/details/80695747

工具名称 性能影响 主要功能 典型应用场景 gcore 中 为正在运行的进程生成core dump文件 程序“卡死”但未崩溃时,保存现场用于后续分析;生产环境抓取问题瞬间状态 gdb 大 交互式调试或分析core文件 分析程序崩溃原因(结合core文件);单步调试逻辑bug;调试多线程程序 pstack 中 快速打印正在运行的进程所有线程的调用栈快照 快速定位进程卡死或高CPU占用原因;初步判断死锁 strace 中 ​ 跟踪进程执行的系统调用(如文件、网络操作)和信号 诊断程序启动失败;分析文件、网络I/O问题;排查程序异常行为 perf 小 性能分析工具,分析CPU使用率、函数热点、调用链等 定位CPU性能热点;分析内存访问模式;生成火焰图进行可视化分析 valgrind 大 主要用于检测内存泄漏、内存越界等内存错误 检查程序的内存使用问题,如内存泄漏、非法内存访问 #################################################################################

##############################################gcore############################################## https://blog.csdn.net/qq_42382539/article/details/119139506

1.查看进程id ps -ef |grep oracle

2.设置core文件大小为无限制 ulimit -c #查看,0是关闭 ulimit -c unlimited #启用,unlimited是启用 ulimit -c 0 #关闭

3.设置生成路径 echo “/cmdb/core-%e-%p-%t” > /proc/sys/kernel/core_pattern

参数 含义 示例 %e 程序名(被截断到15字符) mate-indicators %p 进程 PID 3930199 %t Unix 时间戳(秒) 1772078457 %u 用户 ID(UID) 0 (root) %g 组 ID(GID) 0 %s 导致崩溃的信号编号 11 (SIGSEGV) %h 主机名 ocp %c Core 文件大小限制 unlimited %d Dump 模式 1 %E 程序完整路径(/ 转为 !) !usr!bin!ls %I 线程 ID (TID) 12345 %% 输出一个 % 字符 %

#恢复到默认值 echo “core” > /proc/sys/kernel/core_pattern

#恢复到 systemd 的默认处理(如果系统使用 systemd) echo ”|/usr/lib/systemd/systemd-coredump %P %u %g %s %t %c %h” > /proc/sys/kernel/core_pattern

4.手动生成文件 gcore -o core.2914 2914 #gcore -o 文件名 进程pid #生成的 core 文件大小基本等于目标进程当时占用的物理内存大小

5.定位可执行文件路径 ll /proc/2914/exe

6.不干扰进程的情况下分析核心转储文件 gdb /proc/2914/exe core.2914

##############################################gdb##############################################

1.进入gdb,加载符号表 gdb -p $(pidof observer) file /ob_soft/oceanbase/bin/observer

有符号表 无符号表 可以用函数名打断点:b ob_start 只能用地址打断点:b *0x123456 显示变量名:print server_status 只能看到寄存器值 可读的调用栈:显示函数名和行号 调用栈只显示原始地址 查看源代码:list 无法查看源代码

2.常用命令 break xx info breakpoints #显示所有断点 delete breakpoints #删除所有断点 continue #恢复程序运行,不被断点劫持,简写c quit #退出

backtrace 或 bt #显示调用栈

3.命令行执行gdb,删除所有断点 gdb -batch -p 705101 -ex “delete breakpoints” -ex “detach” -ex “quit” 2>/dev/null 命令解析 -batch #批处理模式,执行完命令后自动退出,不进入交互界面 -ex “detach” #与目标进程分离,让进程继续执行

##############################################strace##############################################

#用 strace 追踪程序最后做了什么: 1.先找到进程PID(如果程序还在运行) ps aux | grep server-manager ps aux | grep server-manager

2.或者下次启动时用strace追踪 strace -o /tmp/strace.log -ff -T -p #o /tmp/strace.log:输出到这个文件 #ff:每个线程一个文件(因为程序是多线程的) #p 14842:附加到这个进程 #-T 显示每个系统调用的耗时时间

#起来就挂的场景 strace -o startup_trace.log -f -tt -T sqlplus / as sysdba <<EOF startup exit EOF

#其他场景,快速定位卡主命令(如:硬盘命令卡主) strace -t df -h

3.找到问题日志

搜 panic#

grep -r “panic” /tmp/strace.log.*

搜 error#

grep -r “error|ERROR” /tmp/strace.log.*

搜所有异常退出#

grep -r “exited” /tmp/strace.log.*

按大小排序,看前5-10个#

ls -laS /tmp/strace.log.* | head -10

##############################################perf############################################## 1.采集 perf record -g -p 705101 -o /tmp/perf.data —call-graph dwarf record #采集性能数据 -g #启用调用链记录(call graph),记录函数,记录谁调用了它 -p #附加到 PID 为 705101 的进程(observer) -o #把记录的数据保存到这个文件 —call-graph dwarf #使用 DWARF 调试信息获取更详细的调用栈(更准确但开销稍大)

2.查看 perf report -i /tmp/perf.data —stdio —no-children | head -50 -i /tmp/perf.data #指定输入文件 —stdio #用文本格式输出(不是交互界面) —no-children #不展开子函数的调用(只显示直接调用的函数)

其他分析工具
https://blog.newworld.help/posts/其他分析工具/
作者
勇敢DBA不怕困难
发布于
2026-05-08
许可协议
CC BY-NC-SA 4.0