利用 cpuinfo 做 Linux 负载均衡的实操指南
一、用 cpuinfo 摸清硬件拓扑
grep -c ^processor /proc/cpuinfogrep 'physical id' /proc/cpuinfo | sort -u | wc -lgrep 'cpu cores' /proc/cpuinfo | sort -u二、定位不均衡的热点
top -d 1 后按 1 展开所有逻辑 CPU,定位某个核长期偏高。mpstat -P ALL 1 10 查看各核的 %usr、%sys、%idle、%soft(软中断) 等,若某核 %soft 明显偏高,多半是中断集中所致。cat /proc/interrupts 观察各 IRQ 在各 CPU 上的计数增长,定位是哪些设备(如 eth0 的多队列)把中断打到了少数核上。软中断(如网络收包)集中在少数核,会造成“某核很忙、其他核空闲”的不均衡。三、把负载摊平的可操作手段
中断亲和与多队列网卡
cat /proc/interrupts | grep eth0cat /proc/irq/<IRQ>/smp_affinity(十六进制掩码,bit 位对应 CPU)echo 2 > /proc/irq/95/smp_affinity # 绑定到 CPU1echo 4 > /proc/irq/96/smp_affinity # 绑定到 CPU2进程/线程亲和与反亲和
taskset -pc <cpu-list> <pid>:查看或设置进程亲和taskset -c 0,1 command:启动进程并绑定到指定核心taskset -c 0,2,4,6 nginxtaskset -c 1,3,5,7 php-fpm应用层并行度与绑定
worker_processes auto; 或设为逻辑 CPU 数worker_cpu_affinity 0001 0010 0100 1000;(4 核示例,按位绑定到 CPU0~CPU3)调度域与内核参数(进阶)
四、验证与回退
mpstat -P ALL 1、top -d 1 与 cat /proc/interrupts 观察各核 %soft 与 IRQ 分布是否趋于均衡;对比前后 load average、P95/P99 延迟、吞吐 等指标。smp_affinity 恢复为 f(全部位为 1)即可取消亲和;taskset -pc 0-<N-1> <pid> 恢复为允许在所有核心运行。变更建议在维护窗口进行,并保留变更记录与回滚方案。