必须了解的Linux性能基础知识

前言作为一名测试人员,难免需要维护业务线的测试环境 。初时每当研发通知某某机器又挂了、某某机器太卡了,笔者完全两眼一抹黑,无从入手 。而当了解了 linux 基本性能,熟悉其基本指标时,遇到问题往往心里有底,甚至得心应手 。送人玫瑰,手有余香,特此整理,与君共享 。
性能指标CPU 使用率提起性能指标,最容易想到的是CPU使用率 。linux 作为一个多任务系统,将每个 CPU 的时间划分为很短的时间片,通过调度器轮流分配给各个任务使用,造成多任务同时运行的错觉 。而根据 CPU 上执行任务的不同,又可以细分为用户CPU、系统CPU、等待 I/O CPU、软中断CPU 和硬中断CPU 等 。

  • 用户CPU使用率(us + ni),包括用户态CPU使用率(user)和低优先级用户态CPU使用率(nice),表示 CPU 在用户状态运行的时间百分比 。用户CPU使用率高,说明有应用程序比较繁忙 。
  • 系统CPU使用率(sy),表示 CPU 在内核状态运行的时间百分比 。系统CPU使用率高,说明内核比较繁忙 。
  • 等待 I/O 使用率(wa),也称为 iowait,表示等待 I/O 的时间百分比 。iowait 高,说明系统与硬件设备的 I/O 交互时间比较长 。
  • 软中断(si)和硬中断(hi)的 CPU使用率,分别表示内核调用软中断处理程序、硬中断处理程序的时间百分比 。它们的使用率高,通常说明系统发生了大量的中断 。
CPU使用率如何计算CPU使用率描述了非空闲时间占总 CPU 时间的百分比 。用公式表示为:
 
必须了解的Linux性能基础知识

文章插图
 
可以通过以下命令查看各个 CPU 的数据:
$ cat /proc/stat | grep ^cpu# cpu us ni sys id wa hi si st guest gnicecpu42849699018 205001 4396958253 10689835442 115714471 51747 397324892 0 0 0cpu0 1448897830 9918 260556249 620723421 17589437 11620 80282872 0 0 0cpu1 1802849978 8539 182700339 444025341 2238152 1 5138950 0 0 0cpu2 1846754519 9857 177641895 405553744 1799005 0 4945465 0 0 0cpu3 1854741192 10151 175660372 399834166 1748613 0 4771745 0 0 0...这里输出的是一个表格,第一列为 CPU 的编号,如cpu0,而第一行没有 CPU 编号,表示所有 CPU 的累加 。其他列表示不同任务下 CPU 的时间,每一列的顺序可以通过man proc 命令查看 。通过这些数据就可以计算出当前机器的 CPU使用率 。然而,得到的 CPU 使用率是开机以来的平均CPU使用率,一般不具有参考价值 。性能工具一般会取间隔一段时间的两次差值,计算这段时间内的平均CPU使用率,即:
 
必须了解的Linux性能基础知识

文章插图
 
如何查看CPU使用率top和 ps 是常用的性能分析工具 。top 能够显示系统总体的CPU和内存使用情况,以及各进程的资源使用情况 。ps 显示各进程的资源使用情况 。例如,top 的输出格式为:
$ toptop - 21:23:36 up 283 days, 10:41,2 users,load average: 21.96, 14.46, 13.76Tasks: 2009 total,10 running, 1994 sleeping,0 stopped,5 zombieCpu(s): 32.5%us,7.6%sy,0.0%ni, 58.3%id,0.6%wa,0.0%hi,0.9%si,0.0%stMem:98979248k total, 95372168k used,3607080k free,1479704k buffersSwap:0k total,0k used,0k free, 59440700k cachedPID USERPRNIVIRTRESSHR S %CPU %MEMTIME+COMMAND13159 user200 9103m 6.0g13m S1686.4 156503:16 mongod31963 root200929m 882m672 R520.90:01.61 supervisord...其中,第三行 CPU 就是该机器的 CPU使用率,top 默认每 3 秒刷新一次 。默认情况下显示的是所有 CPU 的平均值,如果想了解每个 CPU 的使用情况,只需按下数字 1 即可 。例如:
【必须了解的Linux性能基础知识】Cpu0: 17.0%us, 10.2%sy,0.0%ni, 64.9%id,2.3%wa,0.0%hi,5.6%si,0.0%stCpu1: 12.1%us,5.5%sy,0.0%ni, 82.1%id,0.0%wa,0.0%hi,0.3%si,0.0%stCpu2: 24.5%us,4.0%sy,0.0%ni, 71.2%id,0.0%wa,0.0%hi,0.3%si,0.0%st...从上我们可以发现,top 并没有细分进程的用户态CPU 和内核态CPU,如果想了解每个进程的详细情况,可以使用 pidstat 工具 。例如:
$ pidstat 1 1Linux 3.2.0-23-generic (cs)06/24/2021_x86_64_(24 CPU)09:32:41 PMPID%usr %system%guest%CPUCPUCommand09:32:42 PM15220.880.880.001.7720beam.smp...分析一般来说,每种类型的 CPU使用率高,都有不同导致的条件,下面列出了这几种导致不同 CPU使用率高的情况以及着重排查点: