0

0

Linux CPU核间负载不均_负载均衡调优

舞姬之光

舞姬之光

发布时间:2026-03-08 11:49:09

|

689人浏览过

|

来源于php中文网

原创

linux cpu核间负载不均本质是cfs调度器未能及时重分布任务,需结合mpstat、pidstat、numastat定位真实瓶颈,再调优sched_migration_cost_ns等参数及中断分布。

linux cpu核间负载不均_负载均衡调优

Linux 中 CPU 核间负载不均,本质是调度器未能及时将任务在空闲 CPU 上重新分布,常见于高并发、绑核(taskset/cpuset)、NUMA 架构或突发流量场景。调优核心不是“强行平均”,而是让 CFS 调度器更合理地感知负载、迁移任务、尊重拓扑。

检查真实负载分布与瓶颈根源

先确认是否真有问题,避免误判:

  • mpstat -P ALL 1 观察各核 %idle、%iowait、%irq,注意区分是计算密集型不均,还是软中断/硬中断集中(如网卡收包只压在 CPU0)
  • pidstat -t -p PID 1 查看关键进程线程绑定情况(看 TGID 和 TID 的 CPU 列),确认是否被显式绑核(sched_setaffinity)
  • 运行 numastatlscpu,识别 NUMA 节点拓扑——跨节点迁移代价高,调度器会主动避免,此时“不均”可能是合理行为

调整 CFS 负载均衡关键参数

内核 4.12+ 默认启用 Auto-Group Scheduling 和改进的 SD_ASYM_PACKING,但仍需按场景微调:

Veed AI Voice Generator
Veed AI Voice Generator

Veed推出的AI语音生成器

下载
  • /proc/sys/kernel/sched_migration_cost_ns:默认 500000(0.5ms),表示判断一个任务“轻量”的阈值。值过小会导致频繁迁移开销;过高则冷核长期闲置。高吞吐服务可适当提高(如 1000000)
  • /proc/sys/kernel/sched_latency_ns:调度周期,默认 6ms。若系统有大量短时任务,可略微缩短(如 4000000),加快负载重分布节奏
  • /proc/sys/kernel/sched_min_granularity_ns:最小调度粒度,默认 0.75ms。太小增加调度开销,太大导致小任务延迟;建议保持默认或略增(如 1000000)
  • 对 NUMA 系统,确保 /proc/sys/kernel/sched_domain/cpu*/domain*/flags 中包含 SD_BALANCE_EXECSD_BALANCE_FORK,但关闭 SD_BALANCE_NEWIDLE(避免空闲时盲目迁移)

优化中断与软中断分布

CPU 负载不均常由中断扎堆引起,和进程调度无关:

  • 查看 /proc/interrupts,确认网卡、NVMe、时钟中断是否集中在少数核。用 echo $MASK > /proc/irq/$IRQ/smp_affinity_list 手动分散(如双路 CPU 可轮询分配到不同节点)
  • 启用 RPS(Receive Packet Steering)和 RFS(Receive Flow Steering):在 /sys/class/net/ethX/queues/rx-*/rps_cpus 写入对应掩码,让软中断处理靠近应用线程所在 CPU
  • 对多队列网卡,确保开启 XPS(Transmit Packet Steering):echo $MASK > /sys/class/net/ethX/queues/tx-*/xps_cpus

谨慎使用绑核与 cpuset

手动绑核易破坏自动均衡,仅在明确收益场景使用:

  • 数据库(如 PostgreSQL)或低延迟服务,可将主线程 + WAL writer + bgwriter 绑定到同一 NUMA 节点内一组 CPU,同时隔离 IRQ 和其他干扰任务
  • cpuset 划分资源时,确保 cpuset.sched_load_balance=1(默认),否则子 cgroup 内部不均衡也无法跨组均衡
  • 避免混合绑核策略:比如用 taskset 绑进程,又用 IRQ affinity 分散中断——可能造成 cache thrashing 和伪共享

调优后用 perf sched record -a sleep 30 && perf sched latency 对比迁移次数、最大延迟变化。不复杂但容易忽略的是:先确认问题类型,再选工具,最后调参。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

435

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

601

2023.08.10

class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

809

2024.01.03

python中class的含义
python中class的含义

本专题整合了python中class的相关内容,阅读专题下面的文章了解更多详细内容。

28

2025.12.06

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

763

2023.08.10

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

763

2023.08.10

postgresql常用命令
postgresql常用命令

postgresql常用命令psql、createdb、dropdb、createuser、dropuser、l、c、dt、d table_name、du、i file_name、e和q等。本专题为大家提供postgresql相关的文章、下载、课程内容,供大家免费下载体验。

163

2023.10.10

常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1003

2023.11.02

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

23

2026.03.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 10.3万人学习

Git 教程
Git 教程

共21课时 | 4.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号