CPU

top性能

通过 top 命令,来观测 CPU 的性能;
CPU 的使用有多个维度的指标,下面分别说明:

  1. us 用户态所占用的 CPU 百分比,即引用程序所耗费的 CPU;<br /> sy 内核态所占用的 CPU 百分比,需要配合 vmstat 命令,查看上下文切换是否频繁;<br /> ni 高优先级应用所占用的 CPU 百分比;<br /> wa 等待 I/O 设备所占用的 CPU 百分比,经常使用它来判断 I/O 问题,过高输入输出设备可能存在非常明显的瓶颈;<br /> hi 硬中断所占用的 CPU 百分比;<br /> si 软中断所占用的 CPU 百分比;<br /> st 在平常的服务器上这个值很少发生变动,因为它测量的是宿主机对虚拟机的影响,即虚拟机等待宿主机 CPU 的时间占比,这在一些超卖的云服务器上,经常发生;<br /> id 空闲 CPU 百分比。

一般地,我们比较关注空闲 CPU 的百分比,它可以从整体上体现 CPU 的利用情况。

uptime 负载

通过负载,评估 CPU 任务执行的排队情况;

vmstat

通过 vmstat,看 CPU 的繁忙程度

b 如果系统有负载问题,就可以看一下 b 列(Uninterruptible Sleep),它的意思是等待 I/O,可能是读盘或者写盘动作比较多;

si/so 显示了交换分区的一些使用情况,交换分区对性能的影响比较大,需要格外关注;

cs 每秒钟上下文切换(Context Switch)的数量,如果上下文切换过于频繁,就需要考虑是否是进程或者线程数开的过多。

内存

top内存

  • VIRT 这里是指虚拟内存,一般比较大,不用做过多关注;
  • RES 我们平常关注的是这一列的数值,它代表了进程实际占用的内存,平常在做监控时,主要监控的也是这个数值;
  • SHR 指的是共享内存,比如可以复用的一些 so 文件等。

一些程序的默认行为也会对性能有所影响,比如 JVM 的 -XX:+AlwaysPreTouch 参数。
默认情况下,JVM 虽然配置了 Xmx、Xms 等参数,指定堆的初始化大小和最大大小,但它的内存在真正用到时,才会分配;但如果加上 AlwaysPreTouch 这个参数,JVM 会在启动的时候,就把所有的内存预先分配。
这样,启动时虽然慢了些,但运行时的性能会增加。

I/O

iostat

  • %util:我们非常关注这个数值,通常情况下,这个数字超过 80%,就证明 I/O 的负荷已经非常严重了。
  • Device:表示是哪块硬盘,如果你有多块磁盘,则会显示多行。
  • avgqu-sz:平均请求队列的长度,这和十字路口排队的汽车也非常类似。显然,这个值越小越好。
  • awai:响应时间包含了队列时间和服务时间,它有一个经验值。通常情况下应该是小于 5ms 的,如果这个值超过了 10ms,则证明等待的时间过长了。
  • svctm:表示操作 I/O 的平均服务时间。你可以回忆一下第 01 课时的内容,在这里就是 AVG 的意思。svctm 和 await 是强相关的,如果它们比较接近,则表示 I/O 几乎没有等待,设备的性能很好;但如果 await 比 svctm 的值高出很多,则证明 I/O 的队列等待时间太长,进而系统上运行的应用程序将变慢。