Redis/Codis性能瓶颈揭秘:网卡软中断的影响与优化

目录

现象回顾

问题剖析

现场分析

解决方案

总结与反思

1.调整中断亲和性(IRQ Affinity):

2.RPS(Receive Packet Steering)和 RFS(Receive Flow Steering):


近期,我们的一位客户在生产环境中遭遇了广告业务访问超时的问题,尤其是在晚间高峰时段,这严重影响了业务运行。尽管客户经过一整天的努力,仍未能定位问题的根本原因,因此向我们寻求协助。通过我们的共同努力和深入分析,我们最终锁定了性能瓶颈——网卡软中断。现在,让我们一同回顾这次解决性能挑战的全过程。

现象回顾

在晚高峰期间,广告业务相关接口大量超时,服务日志中频繁出现访问Codis超时的错误记录。服务访问Codis的超时时间设定为200毫秒,但在问题时段,这一时间限制被频频突破。

问题剖析

通过监控数据,发现出问题时Codis的QPS(每秒请求数)明显降低,而连接数却显著上升。连接数增加可能有两方面原因:一是访问Codis的时延增大,导致业务连接池中的连接不够用,需要新建连接;二是业务流量突增,导致访问Codis的量变大,连接数不足,同样需要新建连接。然而,从QPS的监控数据来看,并没有出现QPS增长的趋势,因此可以排除业务流量突增的原因。

进一步分析发现,问题主要集中在IP为192.168.16.77的服务器上。这台服务器上的Codis-server(Redis)响应时间明显增加,达到了十几到二十毫秒,并且该服务器的内存使用也有明显上升。猜测此次事故可能与该服务器或网络层面有关。

然而,在检查服务器和网络层面的监控后,并未发现明显异常。同时,查看了该服务器上的Codis日志和系统日志,也均未发现异常记录。由于Codis的slowlog已被冲掉,无法确定问题发生时是否存在慢查询。此外,虽然业务服务日志中记录的超时Key都不是大Key,但仍然不能排除大Key对性能的影响

现场分析

在第二天晚高峰时段,问题再次出现。我们立即登录到服务器上执行top命令,发现软中断分布极不均衡,个别CPU上的软中断占用率已高达80%以上。这导致与Codis发生CPU争抢,使得Codis CPU使用率打满,响应时间大幅增加。

解决方案

迅速执行了均衡网卡软中断的脚本,将软中断均匀分布到各个CPU上,执行后,业务响应时间迅速恢复正常。

总结与反思

1.正常情况下,客户Redis和Codis服务器都会执行均衡网卡软中断的脚本。但在此次事件中,客户生产环境遗漏了对该服务器的操作。同时,由于之前业务量较小,即使存在软中断问题,也未达到性能瓶颈。因此,这个问题在之前并未暴露出来。

2.为了避免类似问题的再次发生,客户在监控系统中增加了软中断相关指标,并设置了阈值告警通知。

3.总结影响Redis性能的关键因素,为后续性能问题分析提供思路:

4.网卡软中断:

软中断是Linux内核处理网络数据包的重要机制。与硬中断相比,其优先级较低,主要用于处理耗时的网络数据包接收和发送任务。在网络硬件接收到数据包后,会先通过硬件中断将数据放入队列,随后由软中断进行处理。

在Redis服务器上,若遇到高网络负载,某个CPU的软中断占用率过高可能会影响系统整体性能。因此,均衡网卡软中断的负载对系统性能至关重要。软中断允许Linux内核在非抢占式环境中处理异步事件,如网络数据包的收发。当网卡接收到数据包,它会通过软中断信号通知CPU进行处理,包括数据复制、网络统计信息更新等操作。若网络流量大或处理效率不高,软中断可能会大量占用CPU资源,导致使用率显著上升。

因此,合理地均衡网卡软中断的负载是非常重要的,以下是两种常用均衡网卡软中断的方法,客户这里是采用了irqbalance服务自动调整中断亲和性,并使用第二种方式进行软中断均衡优化:

1.调整中断亲和性(IRQ Affinity)

可以通过调整中断亲和性,将中断处理分配到多个CPU上。可以使用irqbalance服务自动调整中断亲和性,或者手动设置/proc/irq/<irq号 /smp_affinity文件来指定中断处理的CPU。

/proc/interrupts文件在Linux系统中提供了有关中断(IRQ)的详细信息。这个文件的内容通常包括以下信息:

  • 中断编号:每一行的开头是中断的编号(或名称),例如 0, 1, 2,或 LOC(本地中断),NMI(非屏蔽中断)等。

  • CPU列:接下来的几列显示每个CPU核处理该中断的次数。每个列对应一个CPU核,显示该核处理该中断的计数。这些计数器可以帮助你了解中断在不同CPU核之间的分布情况。

  • 中断类型:有时会有一个标识符来表示中断类型,比如 IR-IO-APIC 或 PCI-MSI,这表示中断的来源或类型。

  • 中断名称或设备:最后一列通常显示与中断相关的设备或驱动程序名称。这可以帮助你识别哪个设备或驱动程序正在使用该中断。

例如,以下是一个典型的 /proc/interrupts 文件的输出示例:

           CPU0       CPU1       CPU2       CPU3  0:         66          0          0          0   IO-APIC-edge      timer  1:          2          0          0          0   IO-APIC-edge      i8042  8:          1          0          0          0   IO-APIC-edge      rtc0  9:          0          0          0          0   IO-APIC-fasteoi   acpi 16:        123          0          0          0   IO-APIC-fasteoi   ehci_hcd:usb1 23:       4567          0          0          0   IO-APIC-fasteoi   eth0

此codis服务器16.77信息如下,网卡对应的中断号为86,87,88,89;采用irqbalance服务自动调整亲和性,分别使用CPU8,CPU10,CPU12,CPU14。

2.RPS(Receive Packet Steering)和 RFS(Receive Flow Steering)

RPS和RFS是Linux内核提供的机制,用于将网络数据包的处理分配到多个CPU上。可以在/proc/sys/net/core/rps_sock_flow_entries/sys/class/net//queues/rx-/rps_cpus以及/sys/class/net//queues/rx-/rps_flow_cnt中进行配置。

比如40核服务器设置如下:

echo ff,ffffffff > /sys/class/net/<interface>/queues/rx-<n>/rps_cpusecho 4096 > /sys/class/net/<interface>/queues/rx-<n>/rps_flow_cntecho 131072 > /proc/sys/net/core/rps_sock_flow_entries其中:rps_cpus是一个位掩码,表示允许使用的CPU核,ff,ffffffff则表示40核全部允许使用rps_flow_cnt表示当前网络设备rps队列的流表数,需要设置为2的整数次幂,建议设置为4096,数值越大,同时所能处理的rps流越多。131072为4096*接收队列的数量

****************************************************************************************************

点开看看就知道了:DBdoctor-数据库性能诊断

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

openwebui使用

文章目录 1、feature2、安装使用2.1 安装过程2.2 安装好后 1、feature 可以加载多个大模型 同时回复 模型问答: 使用vLLM框架部署模型&#xff0c;再使用Open WebUI直接进行模型问答 多模型支持: 多模型回复比对&#xff08;Qwen2-72B-Instruct, llama3-70b-8192, mixtral-8x7…

汽车资讯新引擎:Spring Boot技术领航

3系统分析 3.1可行性分析 通过对本汽车资讯网站实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本汽车资讯网站采用SSM框架&#xff0c;JAVA作为开发语言&#…

应用系统开发(12) Zync中实现数字相敏检波

在 Xilinx Zynq 系列(如 Zynq-7000 或 Zynq UltraScale+)中实现数字相敏检波(DSP,Digital Synchronous Detection)可以通过硬件(PL部分,FPGA逻辑)和软件(PS部分,ARM Cortex-A 处理器)的协同工作来实现。以下是一个详细的设计方法,包括基本原理和 Zynq 的实现步骤。…

《译文》2024年11月数维杯国际大学生数学建模挑战赛题目

# 赛题正式发布 2024年第十届数维杯国际大学生数学建模挑战赛顺利开赛&#xff0c;竞赛开始时间为北京时间2024年11月15日09:00至北京时间2024年11月19日09:00&#xff0c;共计4天&#xff0c;竞赛题目正式发布&#xff0c;快来一起围观&#xff0c;你认为今年的哪个题目更具有…

apk反编译修改教程系列-----apk应用反编译中AndroidManifest.xml详细代码释义解析 包含各种权限 代码含义【二】

💝💝💝💝在上期博文中解析了一个常规apk中 AndroidManifest.xml的权限以及代码。应粉丝需求。这次解析一个权限较高的apk。这款apk是一个家长管控的应用。需求的各种权限较高。而且通过管控端可以设置控制端的app隐藏与否。 通过博文了解💝💝💝💝 1💝💝…

【UGUI】背包的交互01(道具信息跟随鼠标+道具信息面板显示)

详细程序逻辑过程 初始化物品栏&#xff1a; 在 Awake 方法中&#xff0c;通过标签找到提示框和信息面板。 循环生成10个背包格子&#xff0c;并为每个格子设置图标和名称。 为每个格子添加 UInterMaager232 脚本&#xff0c;以便处理交互事件。 关闭提示框和信息面板&#…

Docker: ubuntu系统下Docker的安装

安装依赖 操作系统版本 Ubuntu Kinetic 22.10Ubuntu Jammy 24.04 (LTS)Ubuntu Jammy 22.04 (LTS)Ubuntu Focal 20.04 (LTS)Ubuntu Bionic 18.04 (LTS) CPU架构支持 ARMx86_64 查看我们的系统版本信息 uname -a通过该命令查得cpu架构是x86_64的&#xff1b; cat /etc/*re…

Nacos 配置中心变更利器:自定义标签灰度

作者&#xff1a;柳遵飞 配置中心被广泛使用 配置中心是 Nacos 的核心功能之一&#xff0c;接入配置中心&#xff0c;可以实现不重启线上应用的情况下动态改变程序的运行期行为&#xff0c;在整个软件生命周期中&#xff0c;可以极大降低了软件构建及部署的成本&#xff0c;提…

基于RK3568J多网口电力可信物联网关解决方案

前言 随着工业物联网的普及和功能越来越强大&#xff0c;边缘计算网关应运而生。 边缘计算有效降低了云端服务器的负载、大大降低了带宽的占用&#xff0c;同时也为本地化的区域自治提供了便利条件。 边缘计算网关&#xff0c;完美地发挥了“边”与“端” 结合优势&#xff0c…

无人机飞手入门指南

无人机飞手入门指南旨在为初学者提供一份全面的学习路径和实践建议&#xff0c;帮助新手快速掌握无人机飞行技能并了解相关法规知识。以下是一份详细的入门指南&#xff1a; 一、了解无人机基础知识 1. 无人机构造&#xff1a;了解无人机的组成部分&#xff0c;如机身、螺旋桨…

网络传输:网卡、IP、网关、子网掩码、MAC、ARP、路由器、NAT、交换机

目录 网卡IP网络地址主机地址子网子网掩码网关默认网关 MACARPARP抓包分析 路由器NATNAPT 交换机 网卡 网卡(Network Interface Card&#xff0c;简称NIC)&#xff0c;也称网络适配器。 OSI模型&#xff1a; 1、网卡工作在OSI模型的最后两层&#xff0c;物理层和数据链路层。物…

多账号登录管理器(淘宝、京东、拼多多等)

目录 下载安装与运行 解决什么问题 功能说明 目前支持的平台 功能演示 登录后能保持多久 下载安装与运行 下载、安装与运行 语雀 解决什么问题 多个账号的快捷登录与切换 功能说明 支持多个电商平台支持多个账号的登录保持支持快捷切换支持导入导出支持批量删除支持…

你可以通过以下步骤找到并打开 **Visual Studio 开发者命令提示符**:

你可以通过以下步骤找到并打开 Visual Studio 开发者命令提示符&#xff1a; 1. 通过开始菜单查找 打开 开始菜单&#xff08;点击屏幕左下角的 Windows 图标&#xff09;。在搜索框中输入 Developer Command Prompt。你应该看到以下几种选项&#xff08;具体取决于你的 Visu…

版本控制【Git Bash】【Gitee】

目录 一、什么是版本控制&#xff1f; 二、版本控制的种类&#xff1a; 1、本地版本控制 2、集中版本控制 3、分布式版本控制 三、下载Git Bash 四、Git Bash 配置 五、Git Bash使用 1、切换目录&#xff1a;cd 2.查看当前文件路径&#xff1a;pwd 3.列出当前目录下文件…

大数据-226 离线数仓 - Flume 优化配置 自定义拦截器 拦截原理 拦截器实现 Java

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; Java篇开始了&#xff01; 目前开始更新 MyBatis&#xff0c;一起深入浅出&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff0…

【3D Slicer】的小白入门使用指南九

定量医学影像临床研究与实践 任务 定量成像教程 定量成像是从医学影像中提取定量测量的过程。 本教程基于两个定量成像的例子构建: - 形态学:缓慢生长肿瘤中的小体积变化 - 功能:鳞状细胞癌中的代谢活动 第1部分:使用变化跟踪模块测量脑膜瘤的小体积变化第2部分:使用PET标…

Visual Studio 圈复杂度评估

VisualStudio自带的有工具 之后就可以看到分析结果

计算机毕业设计 | SpringBoot+vue城镇保障性住房管理 公租房系统(附源码+论文)

1&#xff0c;绪论 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理城镇保障性住房管理系统的相关信…

Cherno OpenGL(28 ~ 33)

批量渲染-介绍 在这里我们将在一个drawcall打包多个几何体。即 batch geometry。 我们在这里将聚焦于2d渲染&#xff0c;我们如何渲染一堆2d的quads或者说rectangles呢&#xff1f; 一种情况是比如一个2d游戏有很多个tile组成&#xff0c;要去渲染这些tile&#xff1b;另一种…

物联网——UNIX时间戳、BKP备份寄存器、RTC时钟

RTC时钟 Unix时间戳 UTC/GMT 时间戳转换 时间戳转换 BKP简介 RTC框图 RTC基本结构 硬件供电电路 RTC操作注意事项 接线图&#xff08;读写备份寄存器和实时时钟&#xff09;