【银河麒麟高级服务器操作系统实例】金融行业TCP连接数猛增场景的系统优化
了解更多银河麒麟操作系统全新产品,请点击访问
麒麟软件产品专区:https://product.kylinos.cn
开发者专区:https://developer.kylinos.cn
文档中心:https://documentkylinos.cn
服务器环境以及配置
| 物理机 | |
| 外网/私有网络/无网络 | 私有网络 |
| 处理器: | HUAWEI Kunpeng 920 5220 |
| 内存: | 512 GiB |
| 整机类型/架构: | Huawei S920S00 |
| BIOS版本: | Huawei Corp. 1.79 08/21/2021 |
| 具体操作系统版本 | 银河麒麟高级服务器操作系统 Kylin Linux Advanced Server V10 (Tercel) V10 (Tercel) |
| 内核版本 | 4.19.90-23.8.v2101.ky10.aarch64 |
现象描述
重点系统投产,TCP的连接数猛增,现在已经到15000个网络连接,需要评估下操作系统的瓶颈,如何优化可保证业务不会出行例如somaxconn,backlog等问题。
环境分析
nic0和nic1配置mode 4组成bond0。

nic网卡的驱动为mlx5_core,网卡的ring buffer为1024。


从sosreport可见,当时的tcp连接,查看./proc/net/sockstat文件提供了关于Linux系统中套接字使用情况的统计信息。
sockets: used 14462:表示系统当前正在使用的套接字总数为14462个。
TCP: inuse 9030 orphan 0 tw 106 alloc 14155 mem 363:
inuse 9030:表示当前有9030个TCP套接字处于使用状态。
orphan 0:孤立的TCP套接字数量为0。孤立套接字是那些没有应用程序引用但仍在TCP协议栈中的套接字。
tw 106:表示处于TIME_WAIT状态的TCP套接字数量为106。TIME_WAIT是TCP连接正常关闭后的一个临时状态。
alloc 14155:表示已分配的TCP套接字总数为14155个,包括所有状态的套接字。
mem 363:表示TCP套接字使用的内存量(以页为单位),这里为363页。

相关建议
1、增加最大文件描述符数:每个TCP连接都需要一个文件描述符。可以通过增加系统允许的最大文件描述符数来确保有足够的资源处理大量的连接。
修改 /etc/security/limits.conf 文件,增加 nofile 的限制,例如:
| * soft nofile 131072 * hard nofile 131072 |
2、内核参数优化建议
| 内核参数 | 解释 | 建议 |
| fs.aio-max-nr | 这个参数定义了系统能够分配的最大异步 I/O 操作数。这是一个系统范围的限制,意味着所有进程的异步 I/O 操作总数不能超过这个值。如果异步 I/O 请求(aio)的数量达到这个上限,进一步的 aio 请求可能会失败,或者变为同步操作。 /proc/sys/fs/aio-max-nr 的默认值可能因内核版本和发行版而异,但通常是 65536。这个默认值对于大多数系统来说是足够的,但对于高负荷的服务器或者大量使用异步 I/O 的应用程序,可能需要增加这个值。 | 如果应用程序大量依赖异步 I/O,性能瓶颈或者 aio-nr 接近 aio-max-nr 的情况,可以尝试增加 aio-max-nr 的值。一个常见的做法是将其设置为 1048576(这是默认值的大约16倍)或者更高,具体取决于系统和应用需求。 如果无法确认,建议设置为 1048576 |
| net.core.somaxconn | net.core.somaxconn 是一个 Linux 内核参数,它控制了 socket 监听队列的最大长度。这个参数对于网络服务器尤其重要,因为它影响了服务器能够接受的等待接受的TCP连接请求的数量。 当一个应用程序调用 listen() 函数时,它需要指定一个参数来决定能够排队等待接受的尚未建立连接的客户端数量。net.core.somaxconn 定义了这个队列的最大长度限制。如果应用程序尝试设置比 net.core.somaxconn 更大的值,实际的队列长度将被限制在 net.core.somaxconn 的值。 | 对于需要处理大量并发连接的服务器,增加 net.core.somaxconn 的值可以提高服务器的接受新连接的能力。例如,对于高并发的 Web 服务器,可能需要将其设置到更高的值,如 1024 或更高。 增加监听队列长度可能会增加系统对资源的消耗(尤其是内存),因此在进行调整时需要根据服务器的实际负载和资源情况做出合理的配置。 某些应用程序可能有自己的设置或限制,也需要检查并确保应用程序能够充分利用更大的监听队列。 |
| net.ipv4.tcp_max_syn_backlog | 指定了系统用于保存半连接状态(SYN_RECEIVED)的SYN请求队列的最大长度。这个队列存储的是已经接收到SYN包,但还未完成三次握手的连接请求。 当系统开启SYN Cookies功能时(通过/proc/sys/net/ipv4/tcp_syncookies参数控制),系统能够在SYN队列满时仍然接受新的连接请求,因为SYN Cookies机制不依赖于维护状态信息。它通过一种特殊的方式计算序列号来避免使用SYN队列。因此,当SYN Cookies开启时,tcp_max_syn_backlog的设置对系统的行为影响较小。 | 可以保持原来的2048或者调大为4096。 |
| net.ipv4.ip_local_port_range | 此内核参数用于定义本地端口范围。该参数指定了在本地发起的网络连接所使用的可用 端口范围。 TCP/IP 协议使用端口来标识不同的网络应用程序或服务。在客户端发起与服务器的连接时,客户端会随机选择一个未被占用的本地端口来发送数据。这个本地端口是临时的,仅在连接的生命周期内使用,并在连接关闭后释放。 net.ipv4.ip_local_port_range 参数定义了可供系统使用的本地端口范围的起始端口和结束端口。它的默认值通常是从 32768 到 60999。 | 建议值为 30000 65500。在如在高并发的网络应用中,如果可用的本地端口数目较少,可能会导致端口耗尽和端口竞争, 从而影响应用程序的性能。通过扩大可用的本地端口范围,减少端口耗尽的可能性,并提高应用程序的并发性能。 |
| net.ipv4.tcp_tw_reuse | 此内核参数用于控制 TIME-WAIT 状态的 TCP 连接是否可以被复用。在 TCP 连接正常关闭后,套接字会进入 TIME_WAIT 状态,通常持续 2 倍的 MSL(Maximum Segment Lifetime,最大报文段生存时间)。这个状态确保了在网络上迷失的最后数据包能被正确处理,防止旧连接的数据干扰新连接。 设置 net.ipv4.tcp_tw_reuse 参数为 1(启用)可以使系统允许在 TIME-WAIT 状态的连接上进行地址重用。这意味着,当一个新的连接尝试使用一个已经处于 TIME-WAIT 状态的地址和端口组合时,内核可以复用该地址和端口,从而允许新连接立即建立,而不必等待 TIME-WAIT 状态的连接完全释放。 设置 net.ipv4.tcp_tw_reuse 参数为 0(禁用,通常默认值)则表示不允许地址重用,新连接必须等待 TIME-WAIT 状态的连接彻底释放之后才能使用相同的地址和端口组合。 | 建议值为 1。启用 net.ipv4.tcp_tw_reuse 可以在例如面对大量短暂连接的情况时 提高系统性能。 |
| net.ipv4.tcp_max_tw_buckets | 表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数值,TIME_WAIT套接字将立刻被清除并打印警告信息。对于Apache、Nginx等服务器来说可以将其调低一点,如改为5000~30000,不同业务的服务器也可以给大一点,比如LVS、Squid。 此项参数可以控制TIME_WAIT套接字的最大数量,避免Squid服务器被大量的TIME_WAIT套接字拖死。 如果系统有大量的 TIME_WAIT 状态连接,并且你观察到日志中出现警告说 "time wait bucket table overflow",这表明当前的 tcp_max_tw_buckets 值过小。这时可以考虑增加该值。 | 建议设置为32768 或更高。 |
修改/etc/sysctl.conf文件,而后执行sysctl -p
| fs.aio-max-nr=1048576 net.core.somaxconn=1024 net.ipv4.ip_local_port_range=30000 65500 # net.ipv4.tcp_tw_reuse默认为1 # net.ipv4.tcp_max_tw_buckets=32768,当前环境已经是262144,可能用户已调整过 |
3、建议升级最新的SP1内核,以消除已知问题,使环境更加稳定。
4、网卡调整
| ethtool -G nic0 tx 4096 rx 4096 |
相关文章:
【银河麒麟高级服务器操作系统实例】金融行业TCP连接数猛增场景的系统优化
了解更多银河麒麟操作系统全新产品,请点击访问 麒麟软件产品专区:https://product.kylinos.cn 开发者专区:https://developer.kylinos.cn 文档中心:https://documentkylinos.cn 服务器环境以及配置 物理机/虚拟机/云/容器 物理…...
详解Java的类文件结构(.class文件的结构)
this_class 指向常量池中索引为 2 的 CONSTANT_Class_info。super_class 指向常量池中索引为 3 的 CONSTANT_Class_info。由于没有接口,所以 interfaces 的信息为空。 对应 class 文件中的位置如下图所示。 06、字段表 一个类中定义的字段会被存储在字段表&#x…...
爆肝整理14天!AI工具宝藏合集
随着AI技术的飞速发展,各类AI工具如雨后春笋般涌现。经过对上百款AI工具的深入探索与测试,我精心挑选出了一些功能强大的AI神器,这些工具将极大地降低自媒体创作的门槛。 🚀无论是撰写文案、剪辑视频、设计图文,还是处…...
高效库存管理:金蝶云星空与管易云的盘亏单对接方案
高效库存管理:金蝶云星空与管易云的盘亏单对接方案 金蝶云星空与管易云的盘亏单对接方案 在企业日常运营中,库存管理是至关重要的一环。为了实现高效、准确的库存盘点和数据同步,我们采用了轻易云数据集成平台,将金蝶云星空的数据…...
小鹏汽车股价分析:看涨信号已出现,技术指标显示还有40%的上涨空间
猛兽财经核心观点: (1)小鹏汽车的股价过去几天有所回落。 (2)随着需求的上升,该公司的业务发展的还算不错。 (3)猛兽财经对小鹏汽车股价的技术分析:多头已经将目标指向15…...
c语言指针详解2
c语言指针详解2 1.数组名理解 数组名其实是地址,是数组首元素的地址(详解1有提及) 我们可以根据打印来确认 我们发现数组名和数组⾸元素的地址打印出的结果⼀模⼀样,数组名就是数组⾸元素(第⼀个元素)的地址。 但是上述结论有…...
Chrome DevTools 二: Performance 性能面板
Chrome DevTools 第二篇 Performance 主要介绍performance在我们日常开发中所起到的作用,以及如何利用performance 面板进行性能分析和相关优化建议。 性能面板 Performance 记录和分析页面运行中的所有活动,是解决前端性能问题的重要工具。 1. 控制栏…...
渠道推广如何识别与防止虚假流量?
在当今竞争激烈的游戏市场中,渠道推广作为游戏开发商拓展用户基础、提升市场渗透率的关键手段,其重要性不言而喻。然而,随着市场的发展,渠道作弊问题日益严重,虚假流量、刷假量、拉人风险和违规代充等行为频繁出现&…...
Keil C51 9.61__官网“最新版“下载、安装及相关提示( 保姆级教程, 安装过程详解, 附安装包 )
前言 Keil 5常用的分两个版本,C51 和 MDK。C51用于编译8051内核的单片机程序,譬如AT89C51、STC89C51、STC98C52等。MDK用于编译STM32、GD32等ARM32位内核单片机程序。 Keil C51是由Keil Software Company开发的,专门用于8051微控制器的…...
二进制搭建 Kubernetes v1.20
k8s集群master01etcd集群节点1192.168.190.80 kube-apiserver kube-controller-manager kube-scheduler etcdk8s集群node01etcd集群节点2192.168.190.60kubelet kube-proxy docker etcdk8s集群node02etcd集群节点3192.168.190.70etcd VIP192.168.190.100 k8…...
我希望,你把篮球和鸡联系起来想一想。。。
“我希望,你把篮球和鸡联系起来想一想。” “篮球和鸡?” “我有一个好点子…” 目录 创建页面页面准备实现基础样式实现鸡的跑马灯 篮球弹跳实现篮球击出检查是否击中鸡并计算得分实现看一眼就爆炸效果 总结技术点完整代码 创建页面 页面准备 首先开始万恶的第一…...
STM32 ADC介绍
文章目录 STM32 ADC介绍一、ADC的基本概念二、STM32 ADC的主要特点高分辨率:多通道输入:多种工作模式:内置温度传感器和参考电压: 三、ADC的工作原理采样阶段:转换阶段:数据存储: 四、ADC的配置…...
JavaWeb合集12-Redis
十二、Redis 1、Redis 入门 Redis是一个基于内存的key-valule 结构数据库。 特点:基于内存存储,读写性能高 场景:适合存储热点数据(热点商品、资讯、新闻) Redis安装包分为Windows版和Linux版: Windows版 下载地址: https://gith…...
【C++】在Windows中使用Boost库——实现TCP、UDP通信
目录 一、编译Boost库 二、TCP服务端 三、TCP客户端 四、UDP连接 一、编译Boost库 1. 先去官网下载Boost库源码 2. 点击下载最新的版本 下载Windows环境的压缩包,然后解压 3. 在解压后的目录路径下找到“bootstrap.bat” 打开控制台,在“bootstrap.…...
怎么提取pdf的某一页?批量提取pdf的某一页的简单方法
怎么提取pdf的某一页?在日常工作与学习中,我们经常会遇到各式各样的PDF文件,它们以其良好的兼容性和稳定性,成为了信息传输和存储的首选格式。然而,在浩瀚的文档海洋中,有时某个PDF文件中的某一页内容尤为重…...
Github优质项目推荐(第八期)
文章目录 Github优质项目推荐 - 第八期一、【manim】,66.5k stars - 创建数学动画的 Python 框架二、【siyuan】,19.5k stars - 个人知识管理软件三、 【GetQzonehistory】,1.3k stars - 获取QQ空间发布的历史说说四、【SecLists】࿰…...
快读快写模板
原理 众所周知,在c中,用putchar和getchar输入输出字符的速度是很快的,因此,我们可以考虑把数字转化为字符,按位输出;把字符读入后转化为数字的每一位。 该快读快写可以实现对所有整数类型的输入。 templ…...
make_blobs函数
make_blobs 是 scikit-learn 库中用于生成聚类(或分类)数据集的函数。它通常用于生成多个高斯分布的簇状数据,以便进行分类或聚类算法的测试和验证。make_blobs 非常灵活,可以控制簇的数量、样本数量、每个簇的标准差、中心点等参…...
特斯拉Optimus:展望智能生活新篇章
近日,特斯拉举办了 "WE ROBOT" 发布会,发布会上描绘的未来社会愿景,让无数人为之向往。在这场吸引全球无数媒体的直播中,特斯拉 Optimus 人形机器人一出场就吸引了所有观众的关注。从多家媒体现场拍摄的视频可以看出来&…...
基于Leaflet和SpringBoot的全球国家综合检索WebGIS可视化
目录 前言 一、Java后台程序设计 1、业务层设计 2、控制层设计 二、WebGIS可视化实现 1、侧边栏展示 2、空间边界信息展示 三、标注成果展示 1、面积最大的国家 2、国土面积最小的国家 3、海拔最低的国家 4、最大的群岛国家 四、总结 前言 在前面的博文中ÿ…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...
ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...
【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...
