文章目录

出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望,因而整理了这篇文章。本文也可以作为检验基础知识的指标,另外文章囊括了一个系统的方方面面。若果没有健全的计算机系统知识linux系统好用吗,网路知识和操作系统知识,文档中的工具,是不可能完全把握的,另外对系统性能剖析和优化是一个常年的系列。

序言背景知识:具备背景知识是剖析性能问题时须要了解的。例如硬件cache;再例如操作系统内核。应用程序的行为细节常常是和那些东西相互牵连的,那些底层的东西会以意想不到的形式影响应用程序的性能,例如个别程序未能充分借助cache,进而造成性能下滑。例如何必要地调用过多的系统调用,导致频繁的内核/用户切换等。性能剖析工具

首先来看一张图:

一vmstat–虚拟显存统计1.1vmstat–虚拟显存统计vmstat(VirtualMeomoryStatistics,虚拟显存统计):是Linux中监控显存的常用工具,可对操作系统的虚拟显存、进程、CPU等的整体情况进行监视。vmstat的常规用法:

vmstatintervaltimes即每隔interval秒取样一次,共取样times次,假如省略times,则仍然采集数据,直至用户自动停止为止。

简单举个反例:

[root@matrix01 ~]# vmstat 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
30  0      0 17375844   1820 79094832    0    0     0    54    0    0 15  6 79  0  0
 6  0      0 17693352   1820 79095664    0    0     0  2309 90280 109807 13  6 80  0  0
 8  0      0 16006636   1820 79099904    0    0     0  2848 82054 105837 15  7 78  0  0

可以使用ctrl+c停止vmstat采集数据。

第一行显示了系统自启动以来的平均值,第二行开始显示现今正在发生的情况,接出来的行会显示每5秒间隔发生了哪些,每一列的含意在腰部,如下所示:显存不足的表现:freememory大幅降低,回收buffer和cache也无济于事,大量使用交换分区(swpd),页面交换(swap)频繁,读写c盘数目(io)增多,缺页中断(in)增多,上下文切换(cs)次数增多,等待IO的进程数(b)增多,大量CPU时间用于等待IO(wa)1.2iostat–用于报告中央处理器统计信息

iostat用于报告中央处理器(CPU)统计信息和整个系统、适配器、tty设备、磁盘和CD-ROM的输入/输出统计信息linux性能监控命令,默认显示了与vmstat相同的cpu使用信息,使用以下命令显示扩充的设备统计:

[root@matrix01 ~]# iostat -dx 5
Linux 3.10.0-957.27.2.el7.x86_64 (matrix01)     2022年12月16日  _x86_64_        (48 CPU)
Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     0.00    0.00    0.00     0.00     0.00     8.36     0.00    2.88    2.88    0.00   2.82   0.00
sdc               0.00     0.00    0.00   24.02     0.01   146.72    12.22     0.00    0.10    0.18    0.10   0.06   0.13
sdb               0.00     1.76    0.88  148.78    16.13  2393.49    32.20     0.04    0.28    0.49    0.28   0.05   0.69
dm-0              0.00     0.00    0.00    0.00     0.00     0.00     5.07     0.00    0.53    0.53    0.00   0.53   0.00
dm-1              0.00     0.00    0.00    0.07     0.00     0.30     8.67     0.00    0.35    0.42    0.35   0.34   0.00
dm-2              0.00     0.00    0.00    0.07     0.00     0.30     8.67     0.00    0.35    0.58    0.35   0.35   0.00
dm-4              0.00     0.00    0.00    0.07     0.00     0.30     8.68     0.00    0.37    0.96    0.37   0.35   0.00
dm-5              0.00     0.00    0.00    0.00     0.01     0.00     7.87     0.00   47.96   59.07   20.55  13.98   0.00
dm-6              0.00     0.00    0.00    0.31     0.00    52.67   339.55     0.01   25.02    5.00   25.06   0.32   0.01
dm-7              0.00     0.00    0.00    0.31     0.00    52.67   339.65     0.01   25.03    5.98   25.06   0.32   0.01
dm-9              0.00     0.00    0.00    0.31     0.00    52.65   339.93     0.26  853.85   10.15  854.86   0.40   0.01

第一行显示的是自系统启动以来的平均值,之后显示增量的平均值,每位设备一行。

常见linux的c盘IO指标的简写习惯:

rq 是 request,
r 是 read,
w 是 write,
qu 是 queue,
sz 是 size,
a 是verage,
tm 是 time,
svc 是 service。

1.3dstat–系统监控工具

dstat显示了cpu使用情况,c盘io情况,网路分包情况和换页情况,输出是彩色的,可读性较强,相对于vmstat

和iostat的输入愈发详尽且较为直观。在使用时,直接输入命令即可,其实也可以使用特定参数。

代码如下(示例):dstat–cdlmnpsy

1.4iotop–LINUX进程实时监控工具

iotop命令是专门显示硬碟IO的命令,界面风格类似top命令,可以显示IO负载具体是由那个进程形成的。是一个拿来监视c盘I/O使用状况的top类工具,具有与top相像的UI,其中包括PID、用户、I/O、进程等相关信息。

可以以非交互的形式使用

iotop –bod interval

查看每位进程的I/O,可以使用

pidstat,pidstat –d instat

1.5pidstat–监控系统资源情况

pidstat:主要用于监控全部或指定进程占用系统资源的情况,如CPU,显存、设备IO、任务切换、线程等。

使用方式:

pidstat –d interval

pidstat还可以用以统计CPU使用信息:

pidstat –u interval

统计显存信息

linux性能监控命令_linux性能监控_linux性能监控系统

pidstat –r interval

二top2.1top

top命令的汇总区域显示了五个方面的系统性能信息:

2.2htop

htop是Linux系统中的一个互动的进程查看器,一个文本模式的应用程序(在控制台或则X终端中),须要ncurses。

Htop可让用户交互式操作,支持颜色主题,可纵向或横向滚动浏览进程列表,并支持键盘操作。

2.3与top相比,htop有以下优点:可以纵向或则横向滚动浏览进程列表,便于见到所有的进程和完整的命令行。在启动上,比top更快。杀进程时不须要输入进程号。htop支持键盘操作。三mpstat和netstat3.1mpstat

mpstat是MultiprocessorStatistics的简写,是实时系统监控工具。其报告CPU的一些统计信息,这种信息储存在/proc/stat文件中。在多CPUs系统里,其不但能查看所有CPU的平均状况信息,但是才能查看特定CPU的信息。

常见用法:

mpstat –P ALL interval times

3.2netstat

netstat用于显示与IP、TCP、UDP和ICMP合同相关的统计数据,通常用于检验本机各端口的网路联接情况。

常见用法:

netstat –npl   # 可以查看你要打开的端口是否已经打开。
netstat –rn    # 打印路由表信息。
netstat –in    # 提供系统上的接口信息,打印每个接口的MTU,输入分组数,输入错误,输出分组数,输出错误,冲以及当前的输出队列的长度。

四ps、strace、uptime、lsof、perf4.1ps–显示当前进程的状态

linux性能监控_linux性能监控系统_linux性能监控命令

ps参数太多,具体使用方式可以参考manps

常用的技巧:

ps  aux       #hsserver
ps –ef |grep   #hundsun

杀掉某一程序的方式:

ps  aux | grep mysqld | grep –v grep | awk ‘{print $2 }’ xargs kill -9

杀掉僵尸进程:

ps –eal | awk ‘{if ($2 == “Z”){print $4}}’ | xargs kill -9

4.2strace

跟踪程序执行过程中形成的系统调用及接收到的讯号,帮助剖析程序或命令执行中遇见的异常情况。

举例:查看mysqld在linux上加载哪种配置文件,可以通过运行下边的命令:

strace –e stat64 mysqld –print –defaults > /dev/null

4.3uptime

才能复印系统总共运行了多长时间和系统的平均负载,uptime命令最后输出的三个数字的含意分别是1分钟,5分钟,15分钟内系统的平均负荷。

4.4lsof

lsof(listopenfiles)是一个列举当前系统打开文件的工具。通过lsof工具才能查看这个列表对系统检查及排错。

常见的用法:

意义命令

lsof/boot

查看文件系统阻塞

lsof-i:3306

查看端标语被那个进程占用

lsof–uusername

查看用户打开什么文件

lsof–p4838

查看进程打开什么文件

lsof–i@192.168.34.128

查看远程已打开的网路链接

4.5perf

perf是Linuxkernel自带的系统性能优化工具。

优势:在于与LinuxKernel的紧密结合,它可以最先应用到加入Kernel的newfeature,用于查看热点函数,查看cashemiss的百分比,因而帮助开发者来优化程序性能。

性能调优工具如perf,Oprofile等的基本原理都是对被检测对象进行取样,最简单的情形是依据tick中断进行取样,即在tick中断内触发取样点,在取样点里判定程序当时的上下文。

linux性能监控_linux性能监控系统_linux性能监控命令

如果一个程序90%的时间都耗费在函数foo()上,这么90%的取样点都应当落在函数foo()的上下文中。运气不可飘忽,但我想只要取样频度足够高,取样时间足够长,这么以上结论就比较可靠。因而,通过tick触发取样,我们便可以了解程序中什么地方最历时间,因而重点剖析。

五常用的性能测试工具

熟练并精通了第二部份的性能剖析命令工具,引入几个性能测试的工具,介绍之前先简单了解几个性能测试工具:

perf_events:一款随Linux内核代码一齐发布和维护的性能确诊工具,由内核社区维护和发展。Perf除了可以用于应用程序的性能统计剖析,也可以应用于内核代码的性能统计和剖析。eBPFtools:一款使用bcc进行的性能追踪的工具,eBPFmap可以使用订制的eBPF程序被广泛应用于内核调优方面,也可以读取用户级的异步代码。重要的是这个外部的数据可以在用户空间管理。这个k-v格式的map数据体是通过在用户空间调用bpf系统调用创建、添加、删除等操作管理的。perf-tools:一款基于perf_events(perf)和ftrace的Linux性能剖析调优工具集。Perf-Tools依赖库少,使用简单。支持Linux3.2及以上内核版本。bcc(BPFCompilerCollection)::一款使用eBPF的perf性能剖析工具。一个用于创建高效的内核跟踪和操作程序的工具包,包括几个有用的工具和示例。借助扩充的BPF(伯克利数据包过滤器),即将称为eBPF,一个新的功能,首先被添加到Linux3.15。多用途须要Linux4.1以上BCC。ktap:一种新型的linux脚本动态性能跟踪工具。容许用户跟踪Linux内核动态。ktap是设计给具有互操作性,容许用户调整操作的看法,排除故障和延长内核和应用程序。它类似于Linux和SolarisDTraceSystemTap。FlameGraphs:是一款使用perf,systemtap,ktap可视化的图形软件,容许最频繁的代码路径快速确切地辨识,可以是使用/brendangregg/flamegraph中的开发源代码的程序生成。六Linuxobservabilitytools|Linux性能观测工具和Linuxbenchmarkingtools|Linux性能测评工具6.1Linuxobservabilitytools|Linux性能观测工具

首先学习的BasicTool有如下:uptime、top(htop)、mpstat、isstat、vmstat、free、ping、nicstat、dstat。

中级的命令如下:sar、netstat、pidstat、strace、tcpdump、blktrace、iotop、slabtop、sysctl、/proc。

6.2Linuxbenchmarkingtools|Linux性能测评工具

是一款性能测评工具linux性能监控命令,对于不同模块的性能测试可以使用相应的工具,想要深入了解,可以参考最下文的附件文档。

6.3Linuxtuningtools|Linux性能调优工具

是一款性能调优工具,主要是从linux内核源码层进行的调优,想要深入了解,可以参考下文附件文档。

6.4Linuxobservabilitysar|linux性能观测工具

sar(SystemActivityReporter系统活动情况报告)是目前LINUX上最为全面的系统性能剖析工具之一linux入门,可以从多方面对系统的活动进行报告,包括:文件的读写情况、系统调用的使用情况、磁盘I/O、CPU效率、内存使用状况、进程活动及IPC有关的活动等方面。sar的常规使用方法:

sar  [options] [-A] [-o file]  t [n]

其中:t为取样间隔,n为取样次数,默认值是1;-ofile表示将命令结果以二补码格式储存在文件中,file是文件名。options为命令行选项

Author

这篇优质的内容由TA贡献而来

刘遄

《Linux就该这么学》书籍作者,RHCA认证架构师,教育学(计算机专业硕士)。

发表回复