理解Linux性能指标

  • 理解Linux性能指标
    • 处理器指标
    • 内存指标
    • 网络接口指标
    • 块设备指标
      在我们学习各类调优参数和性能分析工具之前,我们先理解各个衡量指标和它们在系统性能中所表示的含义。因为Linux是开源操作系统,所以它有很多性能测试工具。你最终选择的工具,是根据你的偏好和具体需求来决定的。尽管有很多工具可用,但是它们所衡量的指标是一样的,所以理解了指标,你可以使用任何工具。因此,我们只说最重要的指标,有很多很细的值可能在具体的分析中很有用,但是它们不在本文讨论范围。

处理器指标

处理器指标如下:

  • CPU利用率(CPU utilization) 这个可能是最直接的指标,它全面展示了每个处理器的利用率。在IBM System x架构中,如果CPU利用率持续高于80%,就可能遇到了处理器瓶颈。
  • 用户时间(User time) 表示CPU在用户进程上的时间百分比,包括nice时间。用户时间值高是一个较好的状态,在这种情况下,系统在处理真正的任务。
  • 系统时间(System time) 表示CPU花在内核操作上的时间百分比,包括IRQ和softirq时间。持续的高系统时间可以指出网络和驱动栈的瓶颈。CPU花在内核上的时间越少越好。
  • 等待(Waiting) CPU花在等待I/O操作上的时间总和。类似blocked值,系统不应该把大量时间花在等待I/O操作上;否则,你应该调查I/O子系统的性能。
  • 空闲时间(Idle time) 表示系统处于空闲等待任务的时间比。
  • Nice时间(Nice time) 表示CPU花在re-nicing进程,改变进程执行顺序和优先级上的时间。
  • 平均负载(Load average) 平均负载不是百分比,是下面的和的滚动平均值:

    • 在队列中等待被处理的进程数
    • 等待非中断任务完成的进程数

是TASK_RUNNING和TASK_UNINTERRUPTIBLE的和的平均值。如果进程请求CPU时间被阻塞(表示CPU没有时间处理它们),平均负载就会升高。另一方面,如果每个进程直接就能获得CPU时间并且没有CPU周期丢失,负载就会降下来。

  • 可运行进程(Runable processes) 表示已经准备好要执行的进程。这个值不应该持续超过CPU个数的10倍,否则就是出现了CPU瓶颈。
  • 阻塞的(Blocked) 在等待I/O操作完成的时候,进程不能执行。阻塞进程可以指出你的I/O瓶颈。
  • 上下文切换(Context switch) 系统上有大量的切换在线程间发生,在有大量中断和上下文切换发生时,表示驱动或应用程序出现了问题。一般来说,上下文切换不是好现象,因为CPU缓存需要刷新,但是有些上下文切换是必要的。
  • 中断(Interrupts) 中断值包含硬中断和软中断。硬中断对系统性能有更大的影响。高中断值指示了软件瓶颈,无论是内核还是驱动程序层面的。记住中断值包含CPU时钟引起的中断。

    内存指标

    如下是内存度量值:
  • 空闲内存(Free memory) 和其它操作系统相比,不应该过分担心Linux内存的问题。在“虚拟内存管理”一节中已经说过,Linux把大部分没用到的内存作为文件系统缓存,所以计算空闲内存的时候还得加上已用内存中的缓冲(buffer)和缓存(cache)大小。
  • Swap利用率(Swap usage)这个数值表明已经使用的swap的空间。如“虚拟内存管理”一节中所说的那样,swap使用率只是表明Linux的内存管理有多么高效。Swap In/Out才是识别内存瓶颈的手段,长时间每秒200到300以上的swap in/out次数表明可能出现内存瓶颈。
  • 缓冲和缓存(Buffer and cache) cache被用作文件系统缓存和块设备缓存。
  • Slabs 描述内核的内存使用量。注意,内核页不能page out到磁盘。
  • 活动和非活动内存 提供关于系统中活动的内存信息。非活动内存是可能由kswapd守护进程交换到磁盘的候选。参考“页帧回收”。

网络指标

以下是网络指标:

  • 接收和发送的包(Packets received and sent) 这个指标告诉你指定网络接口的接收和发送网络包的数量。
  • 接收和发送的字节(Bytes received and sent) 这个值是指定网卡的发送和接收的字节数。
  • 每秒碰撞(collisions per second) 这个值提供了各个网络接口所连接网络的所发生的冲突数量。持续的冲突可能是由于网络基础设施导致的,而不是服务器。在大多数正确配置的网络中,碰撞很少发送,除非网络是由集线器组成的。
  • 丢包 这是被内核丢弃的包的数量,可能是防火墙配置导致的,也可能是由于缺少网络缓冲。
  • 过载(Overruns)  过载表示网络接口用光缓冲空间的次数。这个指标应该和丢包联合起来使用,来判断瓶颈是由网络缓冲还是网络队列长度导致的。
  • 错误(Errors) 被标识为故障的帧数目。这通常是由于网络不匹配或者部分网线损坏导致的。在铜基千兆中,部分损坏网线可能导致显著的网络性能问题。

块设备指标

以下是块设备的相关指标:

  • IO等待(Iowait) CPU花在等待I/O操作发生上的时间。该值长时间飙高预示着可能出现了I/O瓶颈。
  • 平均队列长度(Average queue length) 未完成的I/O请求数量。通常,2到3的磁盘队列是很理想的;太高可能表示出现了I/O瓶颈。
  • 平均等待(Average wait) 一个IO请求被服务的平均等待时间,以毫秒计算。等待时间由真实的I/O操作时间和I/O队列的等待时间组成。
  • 每秒传输(Transfers per second) 表示每秒有多少个I/O操作被执行(读和写)。transfers per secondkBytes per second可以联合使用,来表示系统每秒的平均传输大小。平均传输大小通常应该和所使用的磁盘子系统的条带大小相匹配。
  • 每秒读写块(Blocks read/write per second) 在内核2.6中,它表示每秒读取和写入1024字节块的数目。更早的内核,块大小可能不一样,从512字节到4K字节不等。
  • 每秒读写的千字节(Kilobytes per second read/write) 从块设备读和写的千字节,表示从块设备中读取和写入的实际大小。

原文: https://lihz1990.gitbooks.io/transoflptg/content/01.理解Linux操作系统/1.6.理解Linux性能指标.html