linux系统分析之工具大全(观测,性能分析等) 修订记录 2023/03/23 增加并细化pidstat指令2023/06/13 细化blktrace(实在是分析io的利器)2023/06/14 新增”分析问题前60秒你使用的分析手段”小节 前言 工欲善其事必先利其器,要想分析清楚linux服务器中的各类问题,比如性能问题,服务程序的bug,那么必须对该系统下的分析工具有一定的了解,本文对当前的主流cpu,内存,网络,io以及各种debug分析工具(blktrace,perf,systemtap)做了个简单总结。 注:学无止境,故需持续更新 性能分析工具
linux性能分析工具 总观 分析问题前60秒做的事情 分析问题,首先需要对全局有个大致了解,文章分析问题的前60秒应该做的事情 就展示了我们最开始该使用的一些分析手段,总结一下,就是以下几步: top 最常规的大盘工具了,展示进程以及系统全局的cpu,内存等信息 atop atop除了有非常全的大盘信息(cpu,内存,磁盘,网络),还能实时展示进程cpu,磁盘io信息,同时会实时监视频率期间,退出进程的退出原因(是正常退出,还是收到信号,如果是前者,其返回值是多少,如果是后者,又收到了什么信号呢?) 它以一定的频率记录系统的运行状态,所采集的数据包含系统资源(CPU、内存、磁盘和网络)使用情况和进程运行情况,并能以日志文件的方式保存在磁盘中,服务器出现问题后,我们可相应的atop日志文件进行分析。 http://bean-li.github.io/atop-exit-code/ https://www.cnblogs.com/xybaby/p/8098229.html dstat dstat默认输出的是相关资源的总和,通过设置相关参数,可以只看某个cpu,某个网卡或者某个磁盘的数据 sar sar(System Activity Reporter 系统活动情况报告)是目前 Linux 上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告,包括:文件的读写情况、系统调用的使用情况、磁盘 I/O、CPU 效率、内存使用状况、进程活动及 IPC 有关的活动等。 要判断系统瓶颈问题,有时需几个 sar 命令选项结合起来;怀疑CPU存在瓶颈 可用 sar -u 和 sar -q 等来查看怀疑内存存在瓶颈 可用sar -B、sar -r 和 sar -W 等来查看怀疑I/O存在瓶颈 可用 sar -b、sar -u 和 sar -d 等来查看 缺点 看到的是整个系统的情况,比如像进程的缺页中断等情况可以通过pidstat查看 sar 找出系统瓶颈的利器 sar —— Linux 上最为全面的系统性能分析工具之一 vmstat vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可实时动态监视操作系统的虚拟内存、进程、CPU活动 vmstat输出字段说明:Procs(进程): Memory(内存): Swap: IO:(现在的Linux版本块的大小为1024bytes) system: CPU(以百分比表示) pidstat pidstat – 进程(或子进程) 堆栈,磁盘,内存, cpu,上下文切换等 pidstat主要用于监控全部或指定进程占用系统资源的情况(甚至可以查看子进程),可监控如下状态:CPU(-u,通过-t还可以看到子进程的情况),内存(-r)(包括内存使用以及缺页情况)(重点是其能看到单个进程的情况)、磁盘IO(-d)、上下文切换切换进程堆栈使用 pidstat首次运行时显示自系统启动开始的各项统计信息,之后运行pidstat将显示自上次运行该命令以后的统计信息。用户可以通过指定统计的次数和时间来获得所需的统计信息 进程(或子进程)内存情况 除了可以展示常规的内存,还可以展示内存缺页中断情况 进程(或子进程)磁盘情况 进程(或子进程)堆栈使用情况 进程(或子进程)cpu使用情况 进程(或子进程)上下文切换使用情况 man pidstat 调用层 ltrace 用来跟踪进程调用库函数的情况 strace strace常用来跟踪进程执行时的系统调用和所接收的信号。strace可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间。 像ceph这种多进程程序,一般要加-f,表示除了监视主进程,也会监视其子进程 cpu相关 mpstat mpstat是Multiprocessor Statistics的缩写,是实时系统监控工具。其报告与CPU的一些统计信息,这些信息存放在/proc/stat文件中。在多CPUs系统里,其不但能查看所有CPU的平均状况信息,而且能够查看特定CPU的信息。mpstat最大的特点是:可以查看多核心cpu中每个计算核心的统计数据;而类似工具vmstat只能查看系统整体cpu情况。 perf 很重要的一点是还能输出进程占用耗时的调用栈 运行一会ctrl+C中断,会产生 perf.data文件,然后可以按如下查看: 使用perf 分析ceph CPU usage High tiptop 资料比较少,看man文档 内存相关 free slabtop pmap 通过该命令,可以看到一个进程的内存分布情况。最后一行的mapped 该进程映射到文件的内存量。writable/private 该进程使用的私有地址空间。shared 该进程和其它进程共享的地址空间量。 io相关 iotop 统计每个进程的io信息 iostat blktrace 分析io耗时 使用步骤一般如下:使用blktrace来收集硬盘io数据;使用blkparse来分析收集到的数据(此时信息太多,不利于查看)使用bbt汇总blkparse的分析结果,结果如下图,形象
一些有意思的使用某个阶段(比如d2c)延时图 得到数据后,通过excel工具就可以画图了
每秒iops和bps变化图 注意,这一步之后,我们会得到如下文件: 注意,如果我们blktrace -d sdb,只sdb的时候,我们可以通过sys_iops_fp.dat和sys_mbps_fp.dat对应的IOPS和MBPS信息: 通过excel等工具画图
io size分布 这个步骤之后会生成三个文件: 其中r表示读操作的offset和size信息,w表示写操作的offset和size信息,c表示读+写。 其输出格式如下: 第一个字段是时间,第二个字段是开始扇区即offset,第三个字段为结束扇区。根据第二个字段和第三个字段算出来size。单位为扇区。然后通过excel等工具可以画图
绘制io轨迹图 上一小节里,可以拿到不同时间里,访问磁盘的位置以及访问扇区的个数,如果不考虑访问扇区的个数,我们可以得到一张访问轨迹2D图:
一个io耗时和大小统计的脚本 统计了IO的读/写数量、最大延迟、延迟的分布情况、块大小及数量,来源: 剖析生产系统的I/O模式 输出示例 其他 当然,除了上面这些,还可以做很多其他的事情,具体参见bbt的help 上述使用主要参考来自blktrace分析IO 以及 Beyond iostat: Storage performance analysis with blktrace ,感谢 使用blktrace排查iowait cpu高的问题 : 通过blktrace可知道是哪个磁盘哪些扇区在频繁io,通过文件系统block块大小可由扇区推出来其在文件系统中的block号,进而通过debugfs可找到该block对应的inode号,进而可以通过inode号用debugfs获得文件名字,有了文件名字通过lsof就知道是哪个程序在频繁调用它了 perf分析io Linux 4.6 内核的块设备层的预定义了 19 个通用块层的 tracepoints。这些 tracepoints,可以通过如下 perf 命令来列出来, 我们可以利用 block:block_rq_insert 来跟踪 fio 测试时,该进程写往块设备 /dev/sampleblk1 IO 请求的起始扇区地址和扇区数量, 因为我们指定了记录调用栈的信息,所以,perf script 可以 fio 从用户态到内核 block:block_rq_insert tracepoint 的完整调用栈的信息。 并且,给出了主次设备号,相关操作,及起始扇区和扇区数, 使用简单的处理,我们即可发现这个测试在通用块层的 IO Pattern, Linux Block Driver – 4 线程io size分布以及数量 stap脚本如下: 对ceph存储机器运行脚本,结果显示如下: 性能优化大师Gregg的脚本 Linux Block Driver – 4 使用systemtap调查异常io的来源 iosnoop/Heatmap iosnoop 不但可以了解块设备上的 IO 请求大小,更有从 IO 请求发起到完成的延迟时间的信息。 iosnoop脚本 http://oliveryang.net/2016/08/linux-block-driver-basic-4/ http://www.brendangregg.com/blog/2014-07-16/iosnoop-for-linux.html iosnoop 在短时间内会产生大量的输出,每个 IO 请求的 IO 延迟时间都可能有很大差异,如何能对 fio 测试的延迟有没有更好的数据呈现方式呢? Heatmap 就是一个这样的工具(脚本见:https://github.com/brendangregg/HeatMap),结合iosnoop后的具体使用如下: 参考: Linux Block Driver – 4 网络相关 iftop
类似于iotop查看每个进程的io信息,iftop可以查看ge ge每个网络连通的主机的网络流量信息 缺点 与iptraf一样,只能跟踪单个网卡信息,如果不加-i选项,默认用的是第一个网卡 从零开始学习iftop流量监控(找出服务器耗费流量最多的ip和端口) nethogs 类似于top和iotop,可以按进程实时统计网络带宽利用率 ifstat 可以观察各个网卡流量的输入以及输出情况 netstat / ss ss是socket层专用的,而netstat横跨网络各层 ss(Socket Statistics的缩写)命令可以用来 socket统计信息,此命令输出的结果类似于 netstat输出的内容,但它能显示更多更详细的 TCP连接状态的信息,且比 netstat 更快速高效。它使用了 TCP协议栈中 tcp_diag(是一个用于分析统计的模块),能直接从获得第一手内核信息,这就使得 ss命令快捷高效。在没有 tcp_diag,ss也可以正常运行。 当服务器的socket连接数量变得非常大时,无论是使用netstat命令还是直接cat /proc/net/tcp,执行速度都会很慢。可能你不会有切身的感受,但请相信我,当服务器维持的连接达到上万个的时候,使用netstat等于浪费 生命,而用ss才是节省时间。 tcpdump + wireshark ip Linux下IP命令使用 ifconfig的替代品, 功能包括显示不同网络接口的统计数据, 比如接收发送包数量以及丢包,或包错误信息 ip地址的查看,添加,删除;网络接口设置 1)激活和停止网络端口 可以使用ip命令的up和down选项来激某个特定的接口 2)修改设置传输队列的长度 3)修改网络设置MTU(最大传输单)的值 4)修改网卡的MAC地址 路由查看,添加,修改,删除,路由策略设置 以下是查看百度网址的路由: 查看ARP信息 地址解析协议(ARP)用于将一个IP地址转换成它对应的物理地址,也就是通常所说的MAC地址。使用ip命令的neigh或者neighbour选项,你可以查看接入你所在的局域网的设备的MAC地址。 ping 查看网络时延以及丢包情况 iperf iperf服务器间的网络带宽能力以及带宽是否稳定 tc tc是网络模拟工具,可以模拟网络延迟,网络丢包,网络包重复,包乱序,包损坏等 Linux流量控制工具TC iptables 防火墙相关命令 处理目标文件的工具 来源于“深入理解计算机系统P473” ldd 查看程式运行所需的共享库,常用来解决程式因缺少某个库文件而不能运行的一些问题。 nm 列出一个目标文件的符号表种定义的符号 size 列出目标文件种节的名字和大小 readleaf 显示一个目标文件的完整结构,包括elf头中编码的所有信息。包含上面nm以及size命令的功能。 objdump 所有二进制工具之母,能够显示一个目标文件中的所有信息,它最大的作用试反汇编.text节中的二进制程序 硬件相关 lscpu/lspci/lsscis 内核分析 sysrq Linux内核调试方法总结之sysrq linux下的SysRq键 ftrace cephfs内核客户端性能追踪 https://www.ibm.com/developerworks/cn/linux/l-cn-ftrace1/index.html 使用 ftrace 来跟踪系统问题 – ftrace 介绍 使用 ftrace 来跟踪系统问题 – 隐藏的电灯开关 https://zhuanlan.zhihu.com/p/33267453 systemtap perf debugfs 使用blktrace排查iowait cpu高的问题 : 通过blktrace可知道是哪个磁盘哪些扇区在频繁io(也可以通过perf),通过文件系统block块大小可由扇区推出来其在文件系统中的block号,进而通过debugfs可找到该block对应的inode号,进而可以通过inode号用debugfs获得文件名字,有了文件名字通过lsof就知道是哪个程序在频繁调用它了通过文件系统上的block号查找inode 通过inode查找文件 查看文件的磁盘layout A Minimum Complete Tutorial of Linux ext4 File System man debugfs nb工具ebpf Libbpf-tools —— 让 Tracing 工具身轻如燕 其他 lsof lsof(list open files)是一个查看当前系统文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,该文件描述符提供了大量关于这个应用程序本身的信息。 lsof 一切皆文件 pstack 展示进程调用栈 swapon/swapoff swap分区开启于关闭 参考 Linux性能调优指南 linux性能调优指南 linux工具参考
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/70264.html