负载排查和优化

news/2025/9/22 12:48:42/文章来源:https://www.cnblogs.com/tiantao36/p/19104952

负载排查和优化

 


Linux 网络优化与性能分析完全指南


1️⃣ 中断与软中断基础

1.1 中断(IRQ)概念

  • 定义:CPU 在执行任务时,外设或内核事件请求 CPU 立即响应。

  • 作用:及时处理外设请求和系统事件,保证系统响应及时、稳定。

1.2 硬中断(Hard IRQ)

  • 触发方式:硬件直接触发。

  • 作用

    • 快速响应外设,如网卡收包、磁盘 I/O、定时器。

    • 优先级高,必须短时间完成。

  • 查看

cat /proc/interrupts

1.3 软中断(Soft IRQ)

  • 触发方式:硬中断处理完后,由内核延迟执行。

  • 作用

    • 处理硬中断后的任务,如网络数据包、任务调度。

    • 分发到多核,提高 CPU 利用率。

  • 优化手段

    • RPS(Receive Packet Steering):软中断 CPU 分发。

    • RFS(Receive Flow Steering):按流绑定到 CPU。

  • 查看

cat /proc/softirqs

1.4 硬中断与软中断区别

项目硬中断软中断
触发方式 硬件直接触发 硬中断后内核延迟处理
执行上下文 CPU 当前上下文 ksoftirqd 内核线程
优先级
作用 立即响应设备 延迟处理任务,如网络收包
调整方法 IRQ 绑核 /proc/irq/*/smp_affinity_list RPS/RFS /sys/class/net/*/queues/rx-*

2️⃣ 网络优化基础

2.1 网卡 Offload

  • 作用:减轻 CPU 负载,网卡处理部分网络协议。

  • 常用参数

    • TSO: TCP 分段

    • GSO: 通用分段

    • GRO: 通用接收聚合

  • 查看默认状态

ethtool -k eth0
  • 开启

ethtool -K eth0 tso on gso on gro on

2.2 IRQ 绑核

  • 作用:将硬中断绑定到指定 CPU,提高多核性能。

  • 设置

echo 2-15 > /proc/irq/<IRQ>/smp_affinity_list

2.3 RPS / RFS(软中断分发)

  • 作用:将软中断分发到多核,提高网络吞吐量。

  • 配置文件

    • rps_cpus: CPU 掩码

    • rps_flow_cnt: RFS flow 数量

  • 查看默认值

cat /sys/class/net/eth0/queues/rx-*/rps_cpus
cat /sys/class/net/eth0/queues/rx-*/rps_flow_cnt

2.4 TCP/UDP Buffer

  • 作用:增大内核缓冲区,提升高并发性能。

  • 参数

net.core.rmem_max
net.core.wmem_max
net.ipv4.tcp_rmem
net.ipv4.tcp_wmem

3️⃣ 网络优化脚本(分查询与设置)

#!/bin/bash
NIC="eth0"
CPULIST="2-15"
RMEM_MAX=16777216
WMEM_MAX=16777216
TCP_RMEM="4096 87380 16777216"
TCP_WMEM="4096 87380 16777216"
RPS_CPUS="ffff"
RPS_FLOW_ENTRIES=32768echo "=== 网络优化: $NIC ==="# --- 查询默认值 ---
echo "[查询] Offload:"
ethtool -k $NIC | grep -E 'tcp-segmentation|generic-segmentation|generic-receive'echo "[查询] IRQ:"
for irq in $(grep "$NIC" /proc/interrupts | awk -F: '{print $1}' | tr -d ' '); doecho "$irq: $(cat /proc/irq/$irq/smp_affinity_list)"
doneecho "[查询] TCP/UDP buffer:"
sysctl net.core.rmem_max net.core.wmem_max net.ipv4.tcp_rmem net.ipv4.tcp_wmemecho "[查询] RPS/RFS:"
for q in /sys/class/net/$NIC/queues/rx-*; doecho "$q: RPS=$(cat $q/rps_cpus) FLOW=$(cat $q/rps_flow_cnt)"
done# --- 设置 ---
echo "[设置] Offload"
ethtool -K $NIC tso on gso on gro onecho "[设置] IRQ 绑核"
for irq in $(grep "$NIC" /proc/interrupts | awk -F: '{print $1}' | tr -d ' '); doCURRENT=$(cat /proc/irq/$irq/smp_affinity_list)[ "$CURRENT" != "$CPULIST" ] && echo $CPULIST > /proc/irq/$irq/smp_affinity_list
doneecho "[设置] TCP/UDP buffer"
CURRENT_RMEM=$(sysctl -n net.core.rmem_max)
CURRENT_WMEM=$(sysctl -n net.core.wmem_max)
if [ "$CURRENT_RMEM" -ne "$RMEM_MAX" ] || [ "$CURRENT_WMEM" -ne "$WMEM_MAX" ]; thensysctl -w net.core.rmem_max=$RMEM_MAXsysctl -w net.core.wmem_max=$WMEM_MAXsysctl -w net.ipv4.tcp_rmem="$TCP_RMEM"sysctl -w net.ipv4.tcp_wmem="$TCP_WMEM"
fiecho "[设置] RPS/RFS"
for q in /sys/class/net/$NIC/queues/rx-*; doCURRENT_RPS=$(cat $q/rps_cpus)CURRENT_FLOW=$(cat $q/rps_flow_cnt)if [ "$CURRENT_RPS" != "$RPS_CPUS" ] || [ "$CURRENT_FLOW" != "$RPS_FLOW_ENTRIES" ]; thenecho $RPS_CPUS > $q/rps_cpusecho $RPS_FLOW_ENTRIES > $q/rps_flow_cntfi
done

4️⃣ 性能分析(Perf 全套流程)

4.1 Step1: 基础统计

perf stat -a -d sleep 5
  • 输出指标

    • cycles: CPU 时钟周期

    • instructions: 执行指令数

    • cache-misses: 缓存未命中

    • context-switches: 上下文切换次数

    • page-faults: 页面错误次数

    • syscalls: 系统调用次数

  • 分析思路

    • page-faults 高 → 内存不足或 NUMA 远程访问

    • syscalls 高 → 系统调用瓶颈

    • context-switches 高但 syscall 正常 → 调度/锁瓶颈

    • CPI 高(cycles/instructions)但 syscall/ctx/faults 正常 → CPU stall

4.2 Step2: 系统调用跟踪

perf trace -a
  • 找出 最耗时的系统调用

  • 分析 I/O、网络、文件操作瓶颈

4.3 Step3: 调度/锁分析

perf sched record -a -g sleep 10
perf sched latency
  • 查看 ksoftirqdkworker 等调度延迟

  • 分析 context-switch 高的原因

4.4 Step4: 热点分析

perf top -a
  • 实时查看 CPU 消耗最高的函数

  • 检查是否卡在:

    • schedule() / io_schedule()

    • 内核网络或 I/O 函数

    • 用户态 CPU 密集函数

4.5 Step5: 深入分析

perf record -a -g sleep 10
perf report
  • 获取调用栈,分析热点函数

  • 判断 NUMA 远程访问、宿主机 I/O 调度延迟等原因

4.6 Step6: 分支思路总结

现象分析方法可能原因
syscalls 高 perf trace -a I/O/网络/文件系统瓶颈
context-switch 高 perf sched record/latency 调度/锁争用
page-fault 高 /proc/softirqs + perf top 内存/NUMA 远程访问
CPI 高但 syscall/ctx/fault 正常 perf top -a CPU stall、cache miss、NUMA

5️⃣ 网络优化 + 性能诊断闭环流程图

+---------------------+
|     网络收包         |
|  (NIC Hard IRQ)     |
+---------+-----------+|v
+---------------------+
|  硬中断绑核 / RPS    |
|  irq_affinity / RPS  |
+---------+-----------+|v
+---------------------+
|   ksoftirqd / SoftIRQ |
|   (网络、调度任务)   |
+---------+-----------+|v
+---------------------+
|      TCP/UDP Buffer  |
|  rmem/wmem/tcp_*     |
+---------+-----------+|v
+---------------------+
|  用户态应用 / syscall |
| perf stat / perf top  |
+---------+-----------+|v
+---------------------+
| 调度 / 锁分析       |
| perf sched / latency |
+---------+-----------+|v
+---------------------+
| 深入热点分析        |
| perf record / report |
+---------------------+
  • 流程说明:

    1. NIC 收包 → 触发硬中断。

    2. IRQ 绑核 + RPS → 硬中断分发到 CPU,软中断 ksoftirqd 处理。

    3. 软中断处理 → 网络协议栈或调度任务执行。

    4. TCP/UDP Buffer → 提升高并发吞吐量。

    5. 用户态应用 → 使用 perf stat/top 分析 CPU 消耗。

    6. 调度/锁分析 → perf sched 评估 context switch。

    7. 深入分析热点 → perf record/report 找出瓶颈函数和 NUMA 影响。


6️⃣ 总结与优化闭环

  1. 打印默认值:Offload、IRQ、TCP/UDP buffer、RPS/RFS

  2. 执行优化设置

  3. 统计中断/软中断负载

  4. Perf 系列分析 CPU/系统瓶颈

  5. 按不同分支做针对性优化

    • 网络:RPS/RFS、队列、RSS

    • 调度:调整 CPU affinity、调度器参数

    • 内存:增加 buffer、优化 NUMA

    • I/O:优化磁盘调度器

  6. 对比优化前后指标


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/909327.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

挑战骑行距离新记录:46公里

挑战骑行距离新记录:46公里周末要去江浦一趟,之前都是坐地铁转公交,这次突发奇想,干脆骑车去,反正时间比较充裕,于是早上8点半左右从住处出发,到中午11点53分到达,全长46公里左右(中间还走错一段路),用时3小…

arc206 总结

arc206 总结 这次前面切得比较快,然而 D 题漏了情况卡到最后也没过。E 题也属于中等难度的题。 A 枚举题目中的 \(L\),一个连续段只能有一个 \(L\),对答案的贡献为其后面不等于 \(a_L\) 的个数。 复杂度 \(O(n)\)。…

科研必读|提升酿酒酵母表达蛋白产量的关键技术

科研必读|提升酿酒酵母表达蛋白产量的关键技术酿酒酵母作为真核蛋白表达的经典宿主,其具有蛋白折叠、分泌途径、翻译后修饰(如糖基化、二硫键结合等)的能力,是许多科研与工业蛋白生产的首选平台。但实践中常遇到表…

【RK3576】【Android14】如何在Android14下单独编译kernel-6.1? - 详解

【RK3576】【Android14】如何在Android14下单独编译kernel-6.1? - 详解2025-09-22 12:41 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: au…

完整教程:栈与队列的实现方式与应用解惑

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

完整教程:uniapp、devceo华为鸿蒙运行模拟器报错:未开启Hyper-V

完整教程:uniapp、devceo华为鸿蒙运行模拟器报错:未开启Hyper-Vpre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "…

深入解析:08_多层感知机

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

9.8C++作业 - 实践

9.8C++作业 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Co…

(一)React面试(虚拟DOM/类组件) - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

浏览器访问页面卡顿刷新页面方法

浏览器访问页面卡顿刷新页面方法浏览器访问页面卡顿刷新页面方法 同一个网址在一个浏览器中开了多个tab页窗口,会出现卡顿等转圈圈的现象 扩展浏览器缓存空间通过修改启动参数增加缓存容量: "C:\Program Files …

完整教程:散斑深度相机原理

完整教程:散斑深度相机原理pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco",…

k8s Understanding Kubernetes Security Components

Understanding Kubernetes Security Components In Kubernetes, security is implemented through several components that work together to control access and permissions. Lets explore ServiceAccounts, Roles,…

如何用 Dify 无代码工作流实现 AI 自动化抓取与分析 LinkedIn 招聘数据

如何用 Dify 无代码工作流实现 AI 自动化抓取与分析 LinkedIn 招聘数据在本指南中,您将学习到以下内容:Dify 是什么? 为什么要将它与一体化搜索插件整合? 将 Dify 与 Bright Data 插件集成的优势 创建 Dify 搜索工…

2025/9/22

2025/9/22学习统一建模语言 学习数据结构,链表

WSL+共享文件夹搭建zephyr工作环境

之前使用window是编译,但是发现编译真的太慢了,所以还是尝试安装ubuntu来开发: 我这里有一个搭建好的,可以直接wsl安装,但是不支持完整的SDK工具,只支持esp32和arm sdk版本是 0.17.4,只安装了(arm,esp32, es…

如果 Spring Cloud Feign 配置了 OkHttp3 非阻塞 IO(NIO),那么还需要reactor 模型来提高性能吗

目录先明确核心区别:OkHttp3与Reactor模型的定位为什么可能还需要Reactor模型?何时需要引入Reactor?何时可以不引入Reactor?总结 如果 Spring Cloud Feign 配置了 OkHttp3 非阻塞 IO(NIO),那么还需要reactor 模…

数据结构-单链表基础2

0.基本结构和函数 前置内容,可以访问数据结构-单链表基础1点击查看代码 typedef int ElemType; typedef struct LNode {ElemType data;struct LNode *next; } LNode, *linkList; void CreateList_R(linkList *L, int …

LLM的MCP协议通讯方式详解:Stdio、SSE与流式HTTP的选择与实践 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Trellix自动化大规模修复开源漏洞,已修补超6万个项目

Trellix通过自动化工具加速修复Python的tarfile模块中存在15年的路径遍历漏洞(CVE-2007-4559),已成功修补61,895个开源项目,并与GitHub合作实现大规模批量拉取请求的自动化修复流程。Trellix自动化大规模修复开源漏…

AI 编程工具选型速览(2025-09 版) - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …