最近在生产环境的服务器上发现如下问题:
多进程服务的用户负载[us]可以均匀分配在各个CPU上运行,但软中断负载[si]只集中在CPU0上,导致CPU0的[si]段的负载达到70%,而其他几个核的si段负载为0%,为何会出现此现象呢?
首先,我们查看一下,是哪一个软中断占用的比较高(watch -d -n 1 'cat /proc/softirqs'):
从图中可以看出:NET_RX占用的中断比较高。
经查询:NET_RX是网卡操作相关的中断;
疑问:网卡读写为什么会集中绑定在一个CPU上呢?
解释:在没有irqbalance服务的情况下,网卡操作默认绑定在了CPU0上,导致所有的软中断都在CPU0上运行。
解决办法:安装irqbalance服务并启用,问题解决