性能测试-分析CPU瓶颈

发布时间 2023-05-27 13:00:32作者: ttwx
top

键盘上敲1:显示CPU的核数,总共多少个CPU核

 

Cpu(s)
  • us:用户总的CPU占用率  高于80%就需要进行分析了
  • sy:系统总的CPU
  • ni:改变过优先级的进程占用CPU的百分比
  • id:空闲CPU百分比 (一般us+ni+id应该接近于100%)
  • wait:IO等待占用CPU的百分比
  • hi&si:处理中断消耗的时间。硬中断占用CPU的百分比;软中断占用CPU的百分比
  • wa:CPU等待的一个百分比

每个ID具体的CPU、内存、时间、命令的占用情况

 

 
vmstat 可以分析内存、磁盘IO、cpu
参数:
第一个参数:时间间隔,单位是秒
第二个参数:采样次数
vmstat 2 10
以下表示每隔2s采集一次状态,共采集10次

-a:memory下的buff和cache会变成inact和active

 

  • procs 使用内存IO的进程统计
    • r:获取了IO资源而等待cpu运行的进程数目,如果这个值持续较高,说明可能cpu资源不足
    • b:处于不可中断状态,cpu已经运行完,等待IO资源在阻塞队列中的进程数目,如果这个值长时间大于1,则需要关注一下
  • memory 内存大小相关统计,单位是k
    • swpd:交换区被用掉的大小,也就是被用掉的虚拟内存大小
    • free:空闲的内存大小,剩下的完全没有被分配的内存大小。这个值比较小不一定会有问题,会释放buff/cache。还需要看swpd,内存不够的时候会开始用swpd,如果swpd不为0或者还比较大,但是swap的si so长期为0,也不会影响性能
    • buff:被用作buffer缓冲区的大小,即将写入磁盘的缓冲区大小,比如write系统调用的时候,系统不会马上写入磁盘,会先缓冲到buffer中然后在合适的时候写入磁盘
    • cache:被用作cache文件系统缓存的大小,从磁盘中读取的缓存大小
    • inact:非活跃的内存大小,被标明可回收的内存。系统可以使用的内存大小为free+inact,如果这个和持续下降,需要考虑是不是有内存泄漏的情况
    • active:活跃的内存大小
  • swap 交换分区的使用情况
    • si:每秒从交换区写入内存的大小,单位是kB/s
    • so:每秒从内存中写入交换区的大小,单位是kB/s
如果这两个值长期大于0,性能会受影响,磁盘IO和CPU资源都会被消耗
  • io 块设备IO统计(磁盘属于块设备)
    • bi:每秒从块设备读入内存的大小(从磁盘读),单位是kB/s
    • bo:每秒从内存中写入块设备的大小(写磁盘),单位是kB/s
  • system 操作系统中断和上下文切换统计
    • in:操作的系统每秒触发的中断数目
    • cs:操作系统每秒上下文切换次数(用户态和系统态或者系统态到用户态的切换)
这两个值越大,会看到由内核消耗的cpu时间sy会越多
调用系统函数的时候,就要进行上下文切换,线程的切换,进程的上下文切换,所以要越小越好,如果太大了,需要考虑调低线程或者进程的数目
  • cpu cpu的相关统计
    • us:用户态代码执行占用的cpu时间
    • sy:系统态代码执行占用的cpu时间
    • id:cpu空闲时间,也就是执行系统idle的时间,cpu是不允许停机的
    • wa:耗费在等待IO上的时间
    • st:其他的等待时间
场景
  1. 场景1:swpd大小不断变化,si/so持续变化,说明内存在频繁进行交换,内存不足,磁盘IO和cpu都会被消
  2. 场景2:如果cpu的id较高,但是free非常低,再加上-a参数free+inact非常低,内存可能被耗尽了
  3. 场景3:wa较高,b也高,可能IO阻塞
  4. 场景4:如果r经常大于4,且id经常少于40,表示cpu负荷比较重
  5. 场景5:如果r大于cpu个数的4倍,可能cpu资源不足,或者cpu的速率低,导致多数进程在等待cpu,造成系统进程运行过慢
  6. 场景6:如果id持续为0且sy是us的两倍,则可能cpu资源不足
  7. 场景7:wa建议<25%,如果超过了之后可以用iostat再进行查看,可能磁盘系统的原因