【银河麒麟高级服务器操作系统实例】金融行业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、最大的群岛国家 四、总结 前言 在前面的博文中ÿ…...
【Linux】/usr/share目录
在Linux和类Unix操作系统中,/usr/share 目录是一个用于存放共享数据文件的目录。这个目录遵循Filesystem Hierarchy Standard (FHS),它定义了Linux系统中文件和目录的组织结构。/usr 代表 “user”,而 share 表示这些文件可以被系统上的多个用…...
Java中如何应用序列化 serialVersionUID 版本号呢?
文章目录 示例1:没有 serialVersionUID 的类输出结果:示例2:类修改后未定义 serialVersionUID可能出现的问题:示例3:显式定义 serialVersionUID总结最佳实践推荐阅读文章 为了更好地理解 serialVersionUID 的使用&…...
面部识别技术:AI 如何识别人脸
在科技飞速发展的今天,面部识别技术已经广泛应用于各个领域,从手机解锁到安防监控,从金融支付到门禁系统,面部识别技术正在改变着我们的生活方式。那么,AI 究竟是如何识别人脸的呢?让我们一起来揭开面部识别…...
全面解析文档对象模型(DOM)及其操作(DOM的概念与结构、操作DOM节点、描述DOM树的形成过程、用DOMParser解析字符串为DOM对象)
1. 引言 文档对象模型(DOM)是Web开发中的核心概念,它提供了一种结构化的方法来表示和操作HTML和XML文档。通过DOM,开发者可以动态地访问和更新文档的内容、结构和样式。本文将深入探讨DOM的概念与结构、操作DOM节点的方法、DOM树…...
字符串使用方法:
字符串: -- 拼接字符串 SELECT CONCAT(糯米,啊啊啊撒,删掉); -- 字符长度 SELECT LENGTH(asssssssggg); -- 转大写 SELECT UPPER(asdf); -- 转小写 SELECT LOWER(ASDFG); -- 去除左边空格 SELECT LTRIM( aaaasdrf ); -- 去除右边空格 SELECT RTRIM( aaaasdff ); -- 去除两端…...
想让前后端交互更轻松?alovajs了解一下?
作为一个前端开发者,我最近发现了一个超赞的请求库 alovajs,它真的让我眼前一亮!说实话,我感觉自己找到了前端开发的新大陆。大家知道,在前端开发中,处理 Client-Server 交互一直是个老大难的问题ÿ…...
E/MicroMsg.SDK.WXMediaMessage:checkArgs fail,thumbData is invalid 图片资源太大导致分享失败
1、微信分享报: 2、这个问题是因为图片太大导致: WXWebpageObject webpage new WXWebpageObject();webpage.webpageUrl qrCodeUrl;//用 WXWebpageObject 对象初始化一个 WXMediaMessage 对象WXMediaMessage msg new WXMediaMessage(webpage);msg.tit…...
No.21 笔记 | WEB安全 - 任意文件绕过详解 part 3
(一)空格绕过 原理 Windows系统将文件名中的空格视为空,但程序检测代码无法自动删除空格,使攻击者可借此绕过黑名单限制。基于黑名单验证的代码分析 代码未对上传文件的文件名进行去空格处理,存在安全隐患。相关代码逻…...
咸鱼自动发货 免费无需授权
下载:(两个都可以下,自己选择) https://pan.quark.cn/s/1e3039e322ad https://pan.xunlei.com/s/VO9ww89ZNkEg_Fq1wRr-fk9ZA1?pwd8x9s# 不是闲管家 闲鱼自动发货(PC端) 暂不支持密,免费使…...
Netty核心组件
1.Channel Channel可以理解为是socket连接,在客户端与服务端连接的时候就会建立一个Channel,它负责基本的IO操作(binf()、connect()、rad()、write()等); 1.1 Channel的作用 通过Channel可获得当前网络连接的通道状态…...
改善网站建设/如何建网站不花钱
我有一长串用户输入,并希望将它们存储在一个对象中,而不是用HTML拼写出来.我想将这些值绑定到另一个存储用户/客户数据的对象.由于其简单性和功能性,优选使用ngModel.谁知道我怎么能做到这一点?以下示例(不工作).Component({template: NgModel Example{{ input.labe…...
公众号做图网站/西地那非片能延时多久每次吃多少
输入brew services stop mysql 即可解决问题.重启mysql 执行语句 mysql.server start 如果用mysql.server stop 或者用kill 都是不能终止mysqld这个进程的。即使终止了,过一会就又会出现。...
wordpress默认后台地址/营业推广方案怎么写
本文介绍如何通过etcd进行leader选举,从而实现服务高可用。 概述 Etcd 是什么? Etcd是一个分布式的,一致的key-value存储,主要用于共享配置和服务发现。Etcd是由CoreOS开发并维护,通过Raft一致性算法处理日志复制以…...
数据开放网站建设内容/seo培训多少钱
为什么说标签限制了我们?放下标签,品生活中的美好00 导读01 一直在“打标签”的我02 不应该被“标签”所定义03 如何放下标签?04 小结00 导读 大家有多久没仔细观察身边的人和事情了?除了工作需要外,我们有多久没有让自…...
2021最有潜力的新电商平台/惠州seo网站排名
原文地址:http://www.cnblogs.com/wujy/p/3317795.html 一:理论部分 依赖注入:这是 Ioc 模式的一种特殊情况,是一种基于改变对象的行为而不改变类的内部的接口编程技术。开发人员编写实现接口的类代码,并基于接口或者对…...