Linuxcpu测试工具_Linuxcpu测试工具

Linuxcpu测试工具_Linuxcpu测试工具linux系统分析之工具大全(观测,性能分析等)修订记录2023/03/23 增加并细化pidstat指令2023/06/13 细化blktrace(实在是分析io的利器)2023/06/14 新增"分析问题前60秒你使用的分

linux系统分析之工具大全(观测,性能分析等)
  修订记录

  2023/03/23 增加并细化pidstat指令2023/06/13 细化blktrace(实在是分析io的利器)2023/06/14 新增"分析问题前60秒你使用的分析手段"小节

  前言

  工欲善其事必先利其器,要想分析清楚linux服务器中的各类问题,比如性能问题,服务程序的bug,那么必须对该系统下的分析工具有一定的了解,本文对当前的主流cpu,内存,网络,io以及各种debug分析工具(blktrace,perf,systemtap)做了个简单总结。

  注:学无止境,故需持续更新

  性能分析工具

  Linuxcpu测试工具_Linuxcpu测试工具Linuxcpu测试工具_Linuxcpu测试工具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的分析结果,结果如下图,形象Linuxcpu测试工具_Linuxcpu测试工具Linuxcpu测试工具_Linuxcpu测试工具

  一些有意思的使用某个阶段(比如d2c)延时图

  得到数据后,通过excel工具就可以画图了Linuxcpu测试工具_Linuxcpu测试工具Linuxcpu测试工具_Linuxcpu测试工具

  每秒iops和bps变化图

  注意,这一步之后,我们会得到如下文件:

  注意,如果我们blktrace -d sdb,只sdb的时候,我们可以通过sys_iops_fp.dat和sys_mbps_fp.dat对应的IOPS和MBPS信息:

  通过excel等工具画图Linuxcpu测试工具_Linuxcpu测试工具Linuxcpu测试工具_Linuxcpu测试工具

  io size分布

  这个步骤之后会生成三个文件:

  其中r表示读操作的offset和size信息,w表示写操作的offset和size信息,c表示读+写。

  其输出格式如下:

  第一个字段是时间,第二个字段是开始扇区即offset,第三个字段为结束扇区。根据第二个字段和第三个字段算出来size。单位为扇区。然后通过excel等工具可以画图Linuxcpu测试工具_Linuxcpu测试工具Linuxcpu测试工具_Linuxcpu测试工具

  绘制io轨迹图

  上一小节里,可以拿到不同时间里,访问磁盘的位置以及访问扇区的个数,如果不考虑访问扇区的个数,我们可以得到一张访问轨迹2D图:Linuxcpu测试工具_Linuxcpu测试工具Linuxcpu测试工具_Linuxcpu测试工具一个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

  Linuxcpu测试工具_Linuxcpu测试工具Linuxcpu测试工具_Linuxcpu测试工具

  类似于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

(0)
上一篇 2024年 5月 31日
下一篇 2024年 5月 31日

相关推荐

关注微信