【银河麒麟高级服务器操作系统实例】金融行业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、最大的群岛国家 四、总结 前言 在前面的博文中ÿ…...

大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...