首先明确一下CPU使用率和loadavg这两个概念:
CPU使用率
指当前CPU正在执行指令的繁忙程度,越高表面CPU正在执行很多指令即有进程一直在cpu上运行着
Loadavg
指的是CPU负载程度,表明的是CPU当前正在运行的任务以及等待运行的任务统计,是一种趋势的体现;更详细一点来说是R和D状态的进程数量统计
分析此问题的起因是前一段时间购买的开发板,使用最新的SDK跑起来后,几乎没有什么任务在运行,CPU 100% idle,但是loadavg一直在1以上(cpu是双核A7),对比之前使用过的单核MIPS架构路由器来说,显得非常不正常。
在分析开始之前,先要介绍几个工具:
top:查看进程状态以及CPU占用和loadavg参数
ps -aux: 查看进程cpu占用和运行状态
vmstat:查看cpu户空间和内核空间占用情况及系统中断和上下文切换状态
pidstat:查看具体某个进程对cpu占用和上下文切换状态
iostat:查看系统IO负载状态
首先看一下系统状态:
root@wireless-tag:/# vmstat -w 1
procs -----------------------memory---------------------- ---swap-- -----io---- -system-- --------cpu--------
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 75660 3948 11740 0 0 0 0 57 108 2 6 91 0 0
0 0 0 75664 3948 11740 0 0 0 0 58 51 0 0 100 0 0
0 0 0 75664 3948 11740 0 0 0 0 43 49 0 0 100 0 0
0 0 0 75664 3948 11740 0 0 0 0 45 56 0 0 100 0 0
0 0 0 75664 3948 11740 0 0 0 0 46 53 0 0 100 0 0
0 0 0 75664 3948 11740 0 0 0 0 46 57 0 0 100 0 0
0 0 0 75664 3948 11740 0 0 0 0 43 52 0 0 100 0 0
0 0 0 75664 3948 11740 0 0 0 0 42 49 0 0 100 0 0
cpu 100% idle: 说明几乎没有进程在使用cpu,中断以及上下文切换也很低
r及b队列数量为0
root@wireless-tag:/# iostat
Linux 4.9.84 (wireless-tag) 01/01/70 _armv7l_ (2 CPU)avg-cpu: %user %nice %system %iowait %steal %idle
0.57 0.00 1.73 0.02 0.00 97.68Device tps kB_read/s kB_wrtn/s