理解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 second和kBytes per second可以联合使用,来表示系统每秒的平均传输大小。平均传输大小通常应该和所使用的磁盘子系统的条带大小相匹配。 - 每秒读写块(Blocks read/write per second)
在内核2.6中,它表示每秒读取和写入1024字节块的数目。更早的内核,块大小可能不一样,从512字节到4K字节不等。 - 每秒读写的千字节(Kilobytes per second read/write)
从块设备读和写的千字节,表示从块设备中读取和写入的实际大小。