参数说明
- /proc/stat提供系统的CPU和任务统计信息。
- user(us): 用户态CPU时间,不包括下面的nice时间,但包括了guest时间。
- nice(ni): 代表低优先级用户态CPU时间。
- system(sys): 内核态CPU时间。
- idle(id): 空闲时间,它不包括等待I/O的时间。
- iowait(wa): 代表等待I/O的CPU时间。
- irq(hi): 处理硬中断的CPU时间。
- softirq(si): 处理软中断的CPU时间。
- steal(st): 当系统运行在虚拟机中的时候,被其它虚拟机占用的CPU时间。
- guest(guest): 通过虚拟化运行其它操作系统的时间,即运行虚拟机的CPU时间。
- guest_nice(gnice): 以低优先级运行虚拟机的时间。
- CPU利用率:除了空闲时间外其它时间占总CPU时间的百分比。
排查思路
- 用户CPU和Nice CPU高,说明用户态进程占用了较多的CPU,所以应该着重排查进程的性能问题。
- 系统CPU高,说明内核态占用了较多的CPU,所以应该着重排查内核线程或者系统调用的性能问题。
- I/O等待CPU高,说明等待I/O的时间比较长,所以应该着重排查系统存储是不是出现了I/O问题。
- 软中断和硬中断高,说明软中断或硬中断的处理程序占用了较多的CPU,所以应该着重排查内核中的中断服务程序。
特殊场景:系统CPU使用率很高,但找不到高CPU应用
碰到这种问题,第一反应要考虑是短时应用导致的问题。
- 应用里直接调用了其它二进制程序,这些程序通常运行时间比较短,通过top等工具也不容易发现。
- 应用本身在不停的崩溃重启,而启动过程的资源初始化,很可能会占用相当多的CPU。
- 对于这类问题,可以使用pstree等工具找到他们的父进程,再从父进程所在应用入手,排查问题根源。
相关工具
- pstree: 树状形式显示所有进程之间的关系,常用来查找短时进程的父进程。