linux性能调试工具合集

本文详细介绍了几种常见的IT技术调试工具如gdb、valgrind、strace,以及网络抓包工具Wireshark、tcpdump,同时还涵盖了性能分析工具如vmstat、top、iostat和perf,帮助开发者诊断和优化软件性能。
摘要由CSDN通过智能技术生成

一、调试工具

1、gdb

l(list) 行号/函数名 —— 显示对应的code,每次10行
r(run) —— F5【无断点直接运行、有断点从第一个断点处开始运行】
b(breakpoint) + 行号 —— 在那一行打断点
b 源文件:函数名 —— 在该函数的第一行打上断点
b 源文件:行号 —— 在该源文件中的这行加上一个断点吧
info b —— 查看断点的信息
breakpoint already hit 1 time【此断点被命中一次】
d(delete) + 当前要删除断点的编号 —— 删除一个断点【不可以d + 行号】
d + breakpoints —— 删除所有的断点
disable b(breakpoints) —— 使所有断点无效【默认缺省】
enable b(breakpoints) —— 使所有断点有效【默认缺省】
disable b(breakpoint) + 编号 —— 使一个断点无效【禁用断点】
enable b(breakpoint) + 编号 —— 使一个断点有效【开启断点】
enable breakpount —— 使一个断点有效【开启断电】
n(next) —— 逐过程【相当于F10,为了查找是哪个函数出错了】
s(step) —— 逐语句【相当于F11,】
bt —— 看到底层函数调用的过程【函数压栈】
set var —— 修改变量的值
p(print) 变量名 —— 打印变量值
display —— 跟踪查看一个变量,每次停下来都显示它的值【变量/结构体…】
undisplay + 变量名编号 —— 取消对先前设置的那些变量的跟踪
until + 行号 —— 进行指定位置跳转,执行完区间代码
finish —— 在一个函数内部,执行到当前函数返回,然后停下来等待命令
c(continue) —— 从一个断点处,直接运行至下一个断点处【VS下不断按F5】

2、valgrind

Valgrind是一个用于内存调试,内存泄露检测以及性能分析的开源工具。它可以检测C和C++程序中的内存管理问题,如内存泄漏、未初始化的内存访问等。

-tool=<name> 最常用的选项。运行 valgrind中名为toolname的工具。默认memcheck。
    memcheck ---> 这是valgrind应用最广泛的工具,一个重量级的内存检查器,能够发现开发中绝大多数内存错误使用情况,比如:使用未初始化的内存,使用已经释放了的内存,内存访问越界等。
    callgrind ---> 它主要用来检查程序中函数调用过程中出现的问题。
    cachegrind ---> 它主要用来检查程序中缓存使用出现的问题。
    helgrind ---> 它主要用来检查多线程程序中出现的竞争问题。
    massif ---> 它主要用来检查程序中堆栈使用中出现的问题。
    extension ---> 可以利用core提供的功能,自己编写特定的内存调试工具
-h –help 显示帮助信息。
-version 显示valgrind内核的版本,每个工具都有各自的版本。
-q –quiet 安静地运行,只打印错误信息。
-v –verbose 更详细的信息, 增加错误数统计。
-trace-children=no|yes 跟踪子线程? [no]
-track-fds=no|yes 跟踪打开的文件描述?[no]
-time-stamp=no|yes 增加时间戳到LOG信息? [no]
-log-fd=<number> 输出LOG到描述符文件 [2=stderr]
-log-file=<file> 将输出的信息写入到filename.PID的文件里,PID是运行程序的进行ID
-log-file-exactly=<file> 输出LOG信息到 file
-log-file-qualifier=<VAR> 取得环境变量的值来做为输出信息的文件名。 [none]
-log-socket=ipaddr:port 输出LOG到socket ,ipaddr:port

适用于Memcheck工具的相关选项
-leak-check=no|summary|full 要求对leak给出详细信息? [summary]
-leak-resolution=low|med|high how much bt merging in leak check [low]
-show-reachable=no|yes show reachable blocks in leak check? [no]

valgrind --tool=memcheck --leak-check=full ./test

3、strace

strace是一个用于跟踪系统调用和信号的工具。它可以帮助你理解程序在运行时的行为,特别是当程序出现性能问题或者行为异常时。strace可以显示程序调用的每一个系统调用、接收到的信号以及它们的结果

 -tt : 在每行输出的前面,显示毫秒级别的时间
 -T : 显示每次系统调用所花费的时间
 -v : 对于某些相关调用,把完整的环境变量,文件stat结构等打出来。
 -f : 跟踪目标进程,以及目标进程创建的所有子进程
 -e : 控制要跟踪的事件和跟踪行为,比如指定要跟踪的系统调用名称
 -o : 把strace的输出单独写到指定的文件
 -s : 当系统调用的某个参数是字符串时,最多输出指定长度的内容,默认是32个字节
 -p : 指定要跟踪的进程pid, 要同时跟踪多个pid, 重复多次-p选项即可。

4、ltrace

ltrace与strace类似,但它主要关注于库函数的调用,而不是系统调用。这对于调试那些大量使用库函数的程序非常有用。

 -a : 对齐具体某个列的返回值。
 -c : 计算时间和调用,并在程序退出时打印摘要。
 -C : 解码低级别名称(内核级)为用户级名称。
 -d : 打印调试信息。
 -e : 改变跟踪的事件。
 -f : 跟踪子进程。
 -h : 打印帮助信息。
 -i : 打印指令指针,当库调用时。
 -l : 只打印某个库中的调用。
 -L : 不打印库调用。
 -n, --indent=NR : 对每个调用级别嵌套以NR个空格进行缩进输出。
 -o, --output=file : 把输出定向到文件。
 -p : PID 附着在值为PID的进程号上进行ltrace。
 -r : 打印相对时间戳。
 -s : STRLEN 设置打印的字符串最大长度。
 -S : 显示系统调用。
 -t, -tt, -ttt : 打印绝对时间戳。
 -T : 输出每个调用过程的时间开销。
 -u : USERNAME 使用某个用户id或组ID来运行命令。
 -V, --version : 打印版本信息,然后退出。

二、网络抓包工具

1、Wireshark

捕获并显示详细的网络数据包信息,包括IP地址、端口号、协议类型、数据包大小等。Wireshark还提供了强大的过滤和搜索功能,方便用户快速定位和分析特定的数据包

2、tcpdump

它可以通过过滤规则捕获指定类型的网络数据包,并将数据包以文本形式输出到终端或保存到文件中。Tcpdump对于分析网络流量、检测网络异常以及调试网络问题非常有用。

tcpdump -i eth0       #参数表示只抓取 eth0 接口数据包
tcpdump -w result.cap #抓取所有的网络包,并存到result.cap 文件中
tcpdump src host 192.168.1.100 -w result.cap #抓取源地址是192.168.1.100的包,并将结果保存到result.cap 文件中
tcpdump host 192.168.1.100    #抓取地址包含是192.168.1.100的包
tcpdump dest host 192.168.1.100  #抓取目的地址包含是192.168.1.100的包
tcpdump -i eth0 -vnn host 192.168.1.100 #抓取主机地址为192.168.1.100 的数据包
tcpdump -i eth0 -vnn net 192.168.1.0/24 #抓取包含192.168.1.0/24网段的数据包
tcpdump -i eth0 -vnn port 22  #抓取网卡eth0上所有包含端口22的数据包
tcpdump -i eth0 -vnn src host 192.168.1.100 #抓取经过 eth0 网卡的源 ip 是 192.168.1.100 数据包
tcpdump -i eth0 -vnn src port 22 #抓取源端口是22的数据包
tcpdump -i eth0  tcp  -vnn -r /tmp/result #从/tmp/result记录中读取tcp协议的数据包

3、iftop

iftop是一个用于显示带宽使用情况的实时网络监控工具。它可以显示每个连接的带宽使用情况,帮助用户识别出哪些连接占用了大量的带宽资源。

三、性能分析工具

1、vmstat

一个全面的性能分析工具,可以观察到系统的进程状态、内存使用、虚拟内存使用、磁盘的I/O、中断、上下文切换、CPU使用等。

 vmstat 2 #vmstat每2秒采集数据,一直采集

2、top 和 htop

这两个工具能够实时显示系统中各个进程的资源占用状况,包括CPU使用率、内存占用、运行时间等,帮助用户快速定位资源消耗大的进程。

3、iostat

主要用于监控系统输入/输出设备加载情况,如磁盘、CPU、网络等的I/O统计信息。

iostat -d -k 1 10         #查看TPS和吞吐量信息(磁盘读写速度单位为KB),每1s收集1次数据,共收集10次
iostat -d -m 2            #查看TPS和吞吐量信息(磁盘读写速度单位为MB),每2s收集1次数据
iostat -d -x -k 1 10      #查看设备使用率(%util)、响应时间(await)等详细数据, 每1s收集1次数据,总共收集10次 
iostat -c 1 10            #查看cpu状态,每1s收集1次数据,总共收集10次

4、perf

Linux下的性能分析工具,可分析CPU使用率、内存访问、系统调用等。

1)Perf List:查看当前软硬件平台支持的性能事件列表,性能事件的属性。

u: 仅统计用户空间程序触发的性能事件
k: 仅统计内核触发的性能事件
h: 仅统计 Hypervisor 触发的性能事件
G: 在 KVM 虚拟机中,仅统计 Guest 系统触发的性能事件
H: 仅统计 Host 系统触发的性能事件
p: 精度级别

2)Perf Stat:分析性能。

 perf stat -p $pid -d     # 进程级别统计
 perf stat -a -d sleep 5  # 系统整体统计
 perf stat -p $pid -e 'syscalls:sys_enter' sleep 10  #分析进程调用系统调用的情形

3)Perf Top:实时显示系统/进程的性能统计信息, 默认性能事件为 cycles ( CPU 周期数 )。

perf top -p $pid -g     # 进程级别
perf top -g  # 系统整体

4)Perf Record:记录一段时间内系统/进程的性能事件, 默认性能事件为 cycles ( CPU 周期数 )。

perf record -p $pid -g -e cycles -e cs #进程采样
perf record -a -g -e cycles -e cs #系统整体采样

5)Perf Script:读取 Perf Record 结果。

5、netstat

netstat -antp #列出所有TCP的连接
netstat -nltp #列出本地所有TCP侦听套接字,不要加-a参数
  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值