1、uptime 

查看系统平均负载的方法,它表明了系统中有多少要运行的任务(进程)

2、dmesg | tail

如果系统中存在系统消息,则这条命令会显示了最近的 10 条。从这些消息中找一下有没有Errors,这些Error或许可以帮你定位系统性能问题。

3、vmstat 1

vmstat的运行参数为1,每秒打印一次,统计最近一秒钟的情况,不过请忽略第一行,第一行统计的不是前一秒的情况,是统计的OS启动以来的平均值,对于我们排查问题而言,没啥帮助。

需要重点查看的列

  • r:正在运行或等待运行的进程总数。相比 uptime 中的平均负载数据,这个 r 的值不包含 I/O,可以更好的体现 CPU 的饱和情况。如果这个值大于 CPU 的核数,就表示过于饱和了。
  • free:使用 KB 单位统计的空闲内存。如果你发现这里是一长串数字,说明你还有很多内存可用 :) 后面我们会介绍 free -m 命令,可以更好的解释空闲内存的情况。
  • si,so:Swap换入换出的量。如果这些值非0,说明你内存不够用喽。
  • us,sy,id,wa,st:这些是CPU分解值,是针对所有CPU的一个平均值,并非针对某个核心的。us是user time,sy是system time(kernel),id是idle,wa是wait I/O,st是stolen time(虚拟机才需要关注st)

把用户态时间和内核态时间相加,可以得知CPU是否繁忙。一个恒定水平的wa值表示I/O方面有性能瓶颈。如果wa很高,idle就会很高,因为CPU一直在等待I/O获取数据,没有办法继续运算。

系统时间system time对于I/O处理是必要的。一个高的系统时间平均值,比如超过20%,可以进一步探查,也许内核处理I/O的效率很低。

4、mpstat -P ALL 1

打印每个 CPU 核心的时间花费情况,可以用来检查是否有不均衡的情况。一个高使用率的 CPU,可能是某个单线程应用导致的。

5、pidstat 1

pidstat 有点像 top 针对特定进程的统计视图,与 top 不同的是,pidstat 会滚动打印,而不是清除屏幕。这对于观察一段时间内的模式很有用,也可以把你看到的东西(复制-粘贴)记录到你的调查记录中。

6、iostat -xz 1

这是了解块状设备(磁盘)的一个很好的工具,包括应用的工作负载和由此产生的性能指标。

  • r/s, w/s, rkB/s, wkB/s:这些是设备的每秒读次数、写次数、读KB和写KB。使用这些来描述工作负载。一个性能问题可能仅仅是由于过分的负载。
  • await:I/O的平均时间,以毫秒计。这是应用的I/O请求所耗费的时间,它包括排队的时间和被服务的时间。大于预期的平均时间可能是设备饱和的指标,或设备问题。
  • avgqu-sz: 发给设备的平均请求数。大于1的值可能是饱和的证据(尽管设备通常可以并行处理请求,特别是在多个后端磁盘前的虚拟设备)。
  • %util:设备利用率。这实际上是一个繁忙的百分比,显示设备每秒钟进行工作的时间。大于60%的值通常会导致性能不佳(应该在等待中看到),尽管这取决于设备的情况。接近100%的值通常表示饱和。

如果存储设备是一个逻辑磁盘设备,面向许多后端磁盘,那么100%的利用率可能只是意味着一些I/O在100%的时间内被处理,然而,后端磁盘可能远远没有饱和,可能能够处理更多的工作。

7、free -m

  • buffers:用于块设备 I/O 的缓冲区缓存
  • cached:用于文件系统的页面缓存

通常,我们需要检查这些值是否接近 0 了,如果快到 0 了可能会导致更高的硬盘 I/O(使用 iostat 做进一步确认)以及更差的性能。

8、sar -n DEV 1

使用这个工具来检查网络接口的吞吐量:rxkB/s和txkB/s,作为衡量工作量的标准,当然,也要检查是否触发了一些限制。

9、sar -n TCP,ETCP 1

这是对一些关键的TCP指标的摘要式视图。这些指标包括:

  • active/s:每秒本地发起的TCP连接的数量(例如,通过connect())
  • passive/s:每秒远程启动的TCP连接的数量(例如,通过accept())
  • retrans/s:每秒的TCP重传次数

10、top