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/91405.html