背景
线上有一台机器突然有cpu idle报警。登录机器发现,使用top命令查看发现进程cpu占用率比较高。同时发现system状态占比达到20%+。
使用mpstat -P ALL 1 查看每个cpu消耗情况
看上图,发现有几个cpu的软中断占比很高,分布不均衡。
使用这个命令:watch -n1 -d cat /proc/interrupts 可以看到主要是哪些中断数比较多。
发现中断号:67-78 这几个比较多。同时发现他们分布的cpu确实不均衡,和mpstat观察的效果一致。那么需要我们手动设置中断在不同的cpu运行,均衡负载。下面是设置以后的效果
sar -I XALL 1 | grep -v 0.00 也可以查看具体是哪些中断比较多
dstat命令可以查看每秒中断数和进程切换数
资料
lscpu命令可以看到机器的具体的cpu配置。
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 12
On-line CPU(s) list: 0-11
Thread(s) per core: 1
Core(s) per socket: 6
Socket(s): 2
CPU(s)就是逻辑的cpu数 = Socket(s) * Core(s) per socket * Thread(s) per core
Socket(s) 表示主板上面的槽位个数,等于芯片数
Core(s) per socket 表示每个芯片上面的cpu 核数
Thread(s) per core 表示每个核同时运行的线程数,> 1就是表示开启了超线程。
参考这篇文章