CPU 状态:

image.png

这里显示了不同模式下的所占CPU时间的百分比。这些不同的CPU时间表示:

  • us, user: 运行(未调整优先级的) 用户进程的CPU时间
  • sy,system: 运行内核进程的CPU时间
  • ni,niced:运行已调整优先级的用户进程的CPU时间
  • id,idle:空闲CPU时间
  • wa,IO wait: 用于等待IO完成的CPU时间
  • hi:处理硬件中断的CPU时间
  • si: 处理软件中断的CPU时间
  • st:这个虚拟机被hypervisor偷去的CPU时间(译注:如果当前处于一个hypervisor下的vm,实际上hypervisor也是要消耗一部分CPU处理时间的)。

us占比高

1、SQL索引没有利用好,用到全表扫描或者全索引扫描

us使用率高案例:http://keithlan.github.io/2018/07/25/sys_high_cpu_mysql/ tcmalloc 来替换 malloc , 用以获得更好的并发,tcmalloc 在小内存分配管理上更加优秀 简单的SQL模型意味着更高的QPS,SQL越简单越好,复杂的业务逻辑可以放在程序端处理

sy占比高

1、sql出现系统调用,在有timestamp的场景下,如果MySQL的time_zone=system,会调用linux的时区函数,从而内核态的cpu使用率高

ni占比高

wa占比高

1、说明IO等待比较严重,这可能由于磁盘大量作随机访问造成,
2、可能磁盘出现瓶颈。

hi占比高

si占比高

st占比高

查看某个进程下的线程

  1. top -H -p 1748