当前位置: 首页 > 科技观察

Linux性能分析工具总结

时间:2023-03-16 18:16:15 科技观察

出于对Linux操作系统的兴趣和对底层知识的强烈渴望,特编译本文。这篇文章也可以作为考基础知识的指标,文章涵盖了一个系统的方方面面。没有扎实的计算机系统知识、网络知识和操作系统知识,是不可能完全掌握文档中的工具的。此外,系统性能分析和优化是一个长期系列。本文档主要结合Netflix高级性能架构师Linux专家BrendanGregg更新Linux性能调优工具的博文,收集了Linux系统性能优化相关文章。主要结合博文中涉及的原理和性能测试工具。背景知识:拥有背景知识是分析性能问题时需要知道的。比如硬件缓存;另一个例子是操作系统内核。应用程序的行为细节往往与这些东西交织在一起。这些底层的东西会以意想不到的方式影响应用程序的性能。比如有些程序不能充分利用缓存,导致性能下降。比如不必要的调用过多的系统调用,导致频繁的内核/用户切换等。性能分析工具先看一张图:上图是BrendanGregg的性能分析分享,里面的所有工具都可以通过man帮助文档,下面简单介绍一下一般用法:vmstat--虚拟内存统计vmstat(VirtualMeomoryStatistics,虚拟内存统计)是Linux中常用的内存监控工具,可以监控虚拟内存的整体情况,操作系统的进程、CPU等。vmstat常用用法:vmstatintervaltimes表示每隔interval秒采样一次,共times采样次数,如果省略times,则一直采集数据,直到用户手动停止。一个简单的例子:你可以使用ctrl+c来停止vmstat收集数据。第一行显示系统自启动以来的平均值,第二行开始显示现在发生的情况,下一行会每隔5秒显示一次发生的情况,每一列的含义在表头,如下:procs:r这一列显示有多少进程在等待cpu,b列显示有多少进程在不间断地休眠(等待IO)。memory:swapd列显示有多少块已从磁盘换出(页面交换),其余列显示有多少块空闲(未使用),有多少块用作缓冲区,以及有多少块正在使用操作系统缓存。swap:显示交换活动:每秒有多少块被换入(从磁盘)和换出(到磁盘)。io:显示从块设备读取(bi)和写入(bo)的块数,通常反映硬盘I/O。system:显示每秒的中断(in)和上下文切换(cs)的数量。cpu:显示所有cpu时间花在各种操作上的百分比,包括执行用户代码(非内核)、执行系统代码(内核)、空闲和等待IO。内存不足性能:空闲内存急剧减少,回收缓冲区和缓存无济于事,大量使用交换分区(swpd),频繁的页面交换(swap),读写磁盘(io)数量增加,页面错误中断(在)。切换次数(cs)增加,等待IO的进程数(b)增加,大量CPU时间用于等待IO(wa)iostat--用于报告中央处理器统计信息iostat用于报告整个系统、适配器、tty设备、磁盘和CD-ROM的中央处理单元(CPU)统计信息和输入/输出统计信息。默认情况下,显示与vmstat相同的cpu使用信息。使用以下命令显示扩展设备统计信息:第一行显示自系统启动以来的平均数,显示增量的平均值,每个设备一行。常见Linux磁盘IO指标的缩写习惯:rq是request,r是read,w是write,qu是queue,sz是size,a是verage,tm是time,svc是service。rrqm/s和wrqm/s:每秒合并的读写请求,“合并”是指操作系统从队列中取出多个逻辑请求,合并为一个请求到实际磁盘。r/s和w/s:每秒发送到设备的读写请求数。rsec/s和wsec/s:每秒读写的扇区数。avgrq–sz:请求的扇区数。avgqu–sz:设备队列中等待的请求数。await:每次IO请求所花费的时间。svctm:实际请求(服务)时间。%util:花费在至少一个活动请求上的时间百分比。dstat--系统监控工具dstat显示cpu使用率、磁盘io状态、网络包发送状态和分页状态。输出是彩色的和可读的。相比vmstat和iostat的输入,更加详细直观。使用时直接输入命令即可,当然也可以使用具体的参数。如下:dstat–cdlmnpsyiotop--LINUX进程实时监控工具iotop命令是专门显示硬盘IO的命令。界面风格类似于top命令,可以显示IO负载是由哪个进程产生的。它是用于监视磁盘I/O使用情况的顶级工具。它有一个类似于top的UI,包括PID、用户、I/O、进程等相关信息。可以通过非交互的方式使用:iotop–bodinterval查看各个进程的I/O,可以使用pidstat,pidstat–dinstatpidstat——监控系统资源pidstat主要用于监控所有或指定进程占用系统资源,如CPU、内存、设备IO、任务切换、线程等使用方法:pidstat-dintervalpidstat也可以用来统计CPU占用信息:pidstat-uinterval统计内存信息:pidstat-rintervaltoptop命令汇总区显示系统性能信息的五个方面:负载:时间、登录用户数、系统负载平均值;进程:运行、睡眠、停止、僵尸;cpu:用户态、核心态、NICE、空闲、等待IO、中断等;内存:总计、已用、空闲(系统角度)、缓冲区、高速缓存;Swap分区:总量、已用、空闲任务区默认显示:进程ID、有效用户、进程优先级、NICE值、进程使用的虚拟内存、物理内存和共享内存、进程状态、CPU使用率、内存使用率、累计CPU时间,进程命令行信息。htophtop是Linux的交互式进程查看器,文本模式应用程序(在控制台或X终端中),需要ncurses。htop允许用户交互操作,支持颜色主题,可以水平或垂直滚动??进程列表,支持鼠标操作。与top相比,htop有以下优点:可以水平或垂直滚动??进程列表,查看所有进程和完整的命令行。在启动时,它比top快。杀进程时不需要输入进程号。htop支持鼠标操作。mpstatmpstat是MultiprocessorStatistics的缩写,是一个实时系统监控工具。它报告有关CPU的一些统计信息,这些信息存储在/proc/stat文件中。在多CP??U系统中,不仅可以查看所有CPU的平均状态信息,还可以查看特定CPU的信息。常用用法:mpstat–PALLintervaltimesnetstatnetstat用于显示IP、TCP、UDP和ICMP协议相关的统计数据,一般用于查看本机各端口的网络连接状态。常用用法:netstat–npl#可以查看你要打开的端口是否已经打开。netstat–rn#打印路由表信息。netstat–in#提供系统的接口信息,打印每个接口的MTU、输入包数、输入错误数、输出包数、输出错误数、冲突数、当前输出队列长度。ps--显示当前进程的状态。ps参数太多了。具体用法参考manps常用方法:psaux#hsserverps–ef|grep#hundsun查杀某个程序的方法:psaux|grepmysqld|grep–vgrep|awk'{print$2}'xargskill-9杀死僵尸进程:ps–eal|awk'{if($2==“Z”){print$4}}'|xargskill-9strace跟踪程序执行过程系统中产生的系统调用和接收信号有助于分析程序或命令执行过程中遇到的异常情况。例如:查看mysqld在linux上加载了哪个配置文件,可以运行如下命令:strace–estat64mysqld–print–defaults>/dev/nulluptime可以打印系统总运行时间和系统平均负载,uptime命令最后输出的三个数字的含义分别是1分钟、5分钟、15分钟内系统的平均负载。lsoflsof(listopenfiles)是一个列出当前系统打开文件的工具。您可以通过lsof工具查看此列表,以对系统进行检测和故障排除。常见用法:查看文件系统阻塞lsof/boot查看端口号被哪个进程占用lsof-i:3306查看用户打开了哪些文件lsof–uusername查看打开了哪些进程Filelsof–p4838查看远程打开的网络链接lsof–i@192.168.34.128perfperf是Linux内核内置的系统性能优化工具。优势在于与LinuxKernel的紧密结合。可优先应用于Kernel新增功能查看热点功能和cashemiss率,从而帮助开发者优化程序性能。perf、Oprofile等性能调优工具的基本原理是对被监控对象进行采样。最简单的情况是根据tick中断进行采样,即在tick中断内触发采样点,在采样点判断程序的当前上下文。如果一个程序90%的时间花在函数foo()上,那么90%的采样点应该落在函数foo()的上下文中。运气是不可预测的,但我觉得只要采样频率足够高,采样时间足够长,那么以上推论还是比较靠谱的。因此,通过tick触发采样,我们可以了解程序中哪些地方消耗的时间最多,从而可以重点分析。结合以上常用的性能测试命令,再联系文章开头的性能分析工具的图,就可以初步了解性能分析过程中的哪一方面的性能使用了哪一方面的工具(命令)。常用的性能测试工具在第二部分精通性能分析命令工具,介绍几种性能测试工具。在介绍它们之前,先简单了解一下几个性能测试工具:性能诊断工具,由内核社区维护和开发。Perf不仅可以用于应用程序的性能统计分析,还可以用于内核代码的性能统计和分析。eBPFtools:使用bcc的性能跟踪工具,eBPFmap可以广泛用于使用自定义eBPF程序的内核调优,也可以读取用户级异步代码。重要的是这个外部数据可以在用户空间中管理。这种k-v格式的地图数据体是通过在用户空间调用bpf系统调用进行创建、添加、删除等操作来管理的。perf-tools:基于perf_events(perf)和ftrace的Linux性能分析和调优工具集。Perf-Tools依赖库少,使用方便。支持Linux3.2及以上内核版本。bcc(BPFCompilerCollection):一个使用eBPF的perf性能分析工具。用于创建高效内核跟踪和操作程序的工具包,包括几个有用的工具和示例。利用ExtendedBPF(BerkeleyPacketFilter),正式名称为eBPF,这是Linux3.15中首次添加的新功能。多用途需要Linux4.1或更高版本BCC。ktap:一个新的linux脚本动态性能跟踪工具。允许用户跟踪Linux内核动态。ktap被设计为可互操作的,允许用户调整操作洞察力、故障排除和扩展内核和应用程序。它类似于Linux和SolarisDTraceSystemTap。FlameGraphs:是一种使用perf、systemtap、ktap可视化的图形软件,可以快速准确地识别最频繁的代码路径,可以使用github.com/brendangregg/flamegraph上的开源代码按程序生成。Linux可观察性工具|Linux性能观察工具首先要学习的基本工具有:uptime、top(htop)、mpstat、isstat、vmstat、free、ping、nicstat、dstat。高级命令如下:sar、netstat、pidstat、strace、tcpdump、blktrace、iotop、slabtop、sysctl、/proc。Linux基准测试工具|Linux性能评估工具是一款性能评估工具。您可以使用相应的工具对不同的模块进行性能测试。如果您想了解更多信息,可以参考下面的附件。Linux调优工具|Linuxperformancetuningtool是一款性能调优工具,主要来自于linux内核的源代码层。如果您想了解更多信息,可以参考下面的附件。Linux可观察性sar|linux性能观察工具sar(SystemActivityReporter系统活动报告)是LINUX上最全面的系统性能分析工具之一,可以从多方面报告系统活动,包括:文件读写、系统调用使用情况、磁盘I/O、CPU效率、内存使用、进程活动和IPC相关活动。sar的正则使用:sar[options][-A][-ofile]t[n]其中:t为采样间隔,n为采样个数,默认值为1;-ofile表示将命令结果以二进制格式保存在一个文件中,其中file为文件名。选项是命令行选项