k8s中netty服务器容器tcp连接数量优化

netty的http1服务器在运行一段时间后会无法提供服务,返回客户端socket hang up
使用apipost测试抓包显示三次握手后被reset,经查是连接数过多

ps:客户端使用了大量短连接,如果能改成长连接就会消耗更少的连接,但是客户端逻辑无法掌控,只能修改服务器。
另外能保证客户端完成四次挥手也可以避免,但同样客户端逻辑无法掌控。

修改net/core/somaxconn

登录容器,cat /proc/sys/net/core/somaxconn显示128,对于一个服务器来说,这个限制太小了,可以放大。
但是k8s把容器的参数分类了,大部分的参数都属于unsafe,不能直接修改。

第一步:修改kubelet启动参数

kubelet启动增加参数:kubelet --allowed-unsafe-sysctls ‘net.core.somaxconn’
kubelet可能是通过配置文件启动的,比如/etc/systemd/system/kubelet.service.d/10-kubeadm.conf
修改后重启kubelet:systemctl restart kubelet
确认是否生效:
在这里插入图片描述

第二步:修改netty的yaml

在Deployment中spec-template-spec-containers下增加securityContext:

 securityContext:
         sysctls:
            - name: net.core.somaxconn
              value: "1024"

启动pod后查看somaxconn:
在这里插入图片描述

根据连接状态优化

根据连接状态,如果是TIME_WAIT则修改TIME_WAIT等待时间((主动关闭的一方是TIME_WAIT,被动关闭一方是CLOSE_WAIT),如果是ESTABLISHED且大部分是闲置不用的连接则增加闲置关闭逻辑。
cat /proc/net/tcp查看到tcp连接数非常多,连接状态01表示已连接,0A表示监听中,6表示TIME_WAIT
在这里插入图片描述

tcp状态值说明:

TCP_ESTABLISHED:1   TCP_SYN_SENT:2    TCP_SYN_RECV:3      TCP_FIN_WAIT1:4
TCP_FIN_WAIT2:5     TCP_TIME_WAIT:6  TCP_CLOSE:7         TCP_CLOSE_WAIT:8
TCP_LAST_ACL:9      TCP_LISTEN:10  TCP_CLOSING:11

修改 TIME_WAIT 连接数量

需要修改关闭连接的等待时间,这也是k8s的unsafe参数

步骤一 修改kubelet配置,增加:

   --allowed-unsafe-sysctls net.core.somaxconn,net.ipv4.*

步骤二 修改deployment:

  securityContext:
    sysctls:
       - name: net.core.somaxconn                               
         value: "1024"
       - name: net.ipv4.tcp_fin_timeout
         value: "30"

增加TCP空闲关闭逻辑

HTTP/1.1应该由客户端关闭连接,尤其是在keep-live情况下。
但是客户端可能没有没有执行四次挥手就关闭了(没有发送FIN),这时服务端就一直认为是ESTABLISHED,需要增加空闲关闭逻辑,即一个链接上一段时间内没有收到报文也没有发送报文就关闭。

 public void initChannel(SocketChannel ch) {
        ChannelPipeline p = ch.pipeline();        
        //闲置10分钟关闭连接 
        p.addLast(new IdleStateHandler(0, 0, 600, TimeUnit.SECONDS));
        p.addLast(new IdleEventHandler());
        p.addLast...//正常报文处理
    }
    
    public static class IdleEventHandler extends ChannelDuplexHandler {
        @Override
        public void userEventTriggered(ChannelHandlerContext ctx, Object paramObject) throws Exception {
            if (paramObject instanceof IdleStateEvent) {
                IdleState state = ((IdleStateEvent) paramObject).state();
                if (state == IdleState.ALL_IDLE) {
                    //关闭连接
                    logger.info(ctx.channel().remoteAddress() + "idel to close!");
                    ctx.channel().close();
                }
            } else {
                super.userEventTriggered(ctx, paramObject);
            }
        }
    }

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

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

相关文章

第五篇【传奇开心果短博文系列】鸿蒙开发技术点案例示例:ArkUI 组件库常用布局方式

传奇开心果短博文系列 系列短博文目录鸿蒙开发技术点案例示例短博文系列 短博文目录一、前言二、ArkUI 中常用的布局方式介绍三、Flex 布局示例代码四、Grid 布局示例代码五、Stack 布局示例代码六、Panel 布局示例代码七、Tab 布局示例代码八、Drawer 布局示例代码九、Card 布…

Redis客户端之Redisson(二)Redisson分布式锁

一、原理: Redisson并没有通过setNx命令来实现加锁,而是基于 Redis 看⻔狗机制,自己实现了一套分布式锁逻辑。 1、加锁机制: 二、使用方法:

关于mysql默认禁用本地数据加载的情况处理(秒解决)

1.首先报错信息:ERROR 3948 (42000): Loading local data is disabled; this must be enabled on both the client and server sides 2.排查问题: 先检查local_infile的状态:使用sql指令 show global variables like local_infile; 这种情…

【软件测试】学习笔记-构建并执行 JMeter 脚本的正确姿势

有些团队在组建之初往往并没有配置性能测试人员,后来随着公司业务体量的上升,开始有了性能测试的需求,很多公司为了节约成本会在业务测试团队里选一些技术能力不错的同学进行性能测试,但这些同学也是摸着石头过河。他们会去网上寻…

【笔记】顺利通过EMC试验(1-15)-视频笔记

视频链接 【跟杨老师学习电磁兼容-顺利通过EMC(1~15)_哔哩哔哩_bilibili 【跟杨老师学习电磁兼容-顺利通过EMC试验(16~41)_哔哩哔哩_bilibili P2:电子设备的电磁兼容性要求  跟杨老师学习电磁兼容-顺利通过EM... …

探索HTMLx:强大的HTML工具

1. HTMLX htmx 是一个轻量级的 JavaScript 库,它允许你直接在 HTML 中使用现代浏览器的功能,而不需要编写 JavaScript 代码。通过 htmx,你可以使用 HTML 属性执行 AJAX 请求,使用 CSS 过渡动画,利用 WebSocket 和服务…

数据结构·单链表经典例题

1. 移除链表元素 OJ链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 本题是说给出一个链表的头节点head和一个整数val,如果发现节点中存的数据有val就删掉它,最后返回修改后的链表头节点地址 如果题目中没有明确…

用vue实现微信小程序的点餐首页-纯前端效果

一、效果图 图片来源于网络 二、代码 <template><view class"container"><view class"top"><image src"../../static/img/home.png" class"home"></image></view><view class"content&…

Lucene 源码分析——BKD-Tree

Lucene 源码分析——BKD-Tree - AIQ Bkd-Tree Bkd-Tree作为一种基于K-D-B-tree的索引结构&#xff0c;用来对多维度的点数据(multi-dimensional point data)集进行索引。Bkd-Tree跟K-D-B-tree的理论部分在本篇文章中不详细介绍&#xff0c;对应的两篇论文在附件中&#xff0c…

【lodash.js】非常好用高性能的 JavaScript 实用工具库,防抖,深克隆,排序等

前言&#xff1a;lodash是一款前端必须要知道的js库&#xff0c;它里面提供了许多常用的功能和实用的工具函数 基本上我参与的项目中都有lodash&#xff0c;只能说lodash太强大了&#xff0c;lodash.js 提供了超过 300 个实用的工具函数&#xff0c;涵盖了很多常见的编程任务 l…

3D点云数据的标定,从搭建环境到点云标定方法及过程,只要有一台Windows笔记本,让你学会点云标定

ptscloudpre: 点云标定准备&#xff1a; 说明&#xff1a; 如下介绍适用windows系统的电脑。apple笔记本同理&#xff0c;但是需要安装MAC版本的anaconda。网址&#xff1a;Free Download | Anaconda可下载对应MAC版本的Anaconda的安装包建议下载2022年或2021年的安装包安装。…

华硕ASUS K43SD笔记本安装win7X64(ventoy为入口以支撑一盘多系统);友善之臂mini2440开发板学习

记录 老爷机 白色 华硕 K43SD 笔记本 安装 win7X64 1. MBR样式常规安装win7X64Sp1 (华硕 K43SD 安装 win7X64 ) 老爷机 白色 华硕 K43SD 笔记本 安装 win7X64 (常规安装) 设置: 禁用UEFI 启用AHCI ventoy制作MBR(非UEFI)方式的启动U盘 U盘中放cn_windows_7_ultimate_wit…

无限学模式-“重塑科研学习路径:ChatGPT应用实战课,开启高效率、高创新的科研之旅!“

ChatGPT 在论文写作与编程方面也具备强大的能力。无论是进行代码生成、错误调试还是解决编程难题&#xff0c;ChatGPT都能为您提供实用且高质量的建议和指导&#xff0c;提高编程效率和准确性。此外&#xff0c;ChatGPT是一位出色的合作伙伴&#xff0c;可以为您提供论文写作的…

YOLOv8全网独家首发:Powerful-IoU更好、更快的收敛IoU | 2024年最新IoU

💡💡💡本文独家改进:Powerful-IoU更好、更快的收敛IoU,是一种结合了目标尺寸自适应惩罚因子和基于锚框质量的梯度调节函数的损失函数 💡💡💡MS COCO和PASCAL VOC数据集实现涨点 收录 YOLOv8原创自研 https://blog.csdn.net/m0_63774211/category_12511737.htm…

SkyWalking介绍与使用docker-compose部署服务

一、Skywalking概述 1、Skywalking介绍 Skywalking是分布式系统的应用程序性能监视工具,专为微服务,云原生架构和基于容器(Docker,K8S,Mesos)架构而设计,它是一款优秀的APM(Application Performance Management)工具,包括了分布式追踪,性能指标分析和服务依赖分析等…

腾讯云轻量应用服务器Docker如何一键搭建属于自己的幻兽帕鲁服务器?

幻兽帕鲁/Palworld是一款2024年Pocketpair开发的开放世界生存制作游戏&#xff0c;在帕鲁的世界&#xff0c;玩家可以选择与神奇的生物“帕鲁”一同享受悠闲的生活&#xff0c;也可以投身于与偷猎者进行生死搏斗的冒险。而帕鲁可以进行战斗、繁殖、协助玩家做农活&#xff0c;也…

【Image captioning】论文阅读七—Efficient Image Captioning for Edge Devices_AAAI2023

中文标题:面向边缘设备的高效图像描述(Efficient Image Captioning for Edge Devices) 文章目录 1. 引言2. 相关工作3. 方法3.1 Model Architecture(模型结构)3.2 Model Training (模型训练)3.3 Knowledge Distillation (知识蒸馏)4. 实验4.1 数据集和评价指标4.2 实施细…

【快影】怎么制作卡拉OK字幕

您好&#xff0c;您添加了字幕之后可以添加动画&#xff0c;选择卡拉OK&#xff0c;其中 卡拉OK1是支持修改颜色的&#xff0c;卡拉OK2只支持修改文字的底色。

Apache Shiro 安全框架

前言 Apache Shiro 是一个强大且容易使用的Java安全矿建&#xff0c;执行身份验证&#xff0c;授权&#xff0c;密码和会话管理。使用Shiro的易于理解的API您可以快速轻松的获得任何应用程序直到大的项目。 一丶什么是Shiro 1.Shiro是什么 Apache Shiro是一个强大且易于使用…

5.列表选择弹窗(BottomListPopup)

愿你出走半生,归来仍是少年&#xff01; 环境&#xff1a;.NET 7、MAUI 从底部弹出的列表选择弹窗。 1.布局 <?xml version"1.0" encoding"utf-8" ?> <toolkit:Popup xmlns"http://schemas.microsoft.com/dotnet/2021/maui"xmlns…
最新文章