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

news2024/10/6 22:20:31

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.coloradmin.cn/o/1411989.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何在Excel中隐藏部分数字或文本?这里提供几个方法

假设你有一张关于员工的一般信息表,但有些是私人的,比如社会安全号码。现在你想隐藏这些社会安全号码的一部分,如下截图所示,你如何快速解决它? 使用单元格格式部分隐藏 若要在Excel中隐藏部分社会保障号码&#xff…

PCIE 4.0 Equalizaiton(LTSSM 均衡流程)

均衡 在Tx端有FFE(Feed Forward Equalizer,前馈均衡器);在Rx端有:CTLE(Continuous Time Linear Equalizer,连续时间线性均衡器)和DFE(Decision Feedback Equalizer&…

深入理解封装的设计思想

相对于OOP三大基本特性其他两个:继承和多态,封装其实我认识是最重要的概念。 对于封装初步在理解的时候就是private 一个variable 然后设置get和set方法,为什么要这样做,有个大概的想法,就是不让其他的对象直接获取数…

【图形学】贝塞尔曲线理论与实践

贝塞尔曲线(Bezier Curve)在计算机图形领域应用非常广泛,比如我们 CSS 动画、 Canvas 以及 Photoshop 等都可以看到贝塞尔曲线的身影。 贝塞尔曲线类型 贝塞尔曲线根据_控制点_的数量分为: 一阶贝塞尔曲线(2 个控制点…

首助编辑高手:掌控PDF,工作流程更顺畅!

在繁忙的工作中,我们时常需要处理各种PDF文档。这些文档可能来自客户、同事或自己创建。然而,直接编辑PDF往往不是一件容易的事,需要专业的工具来辅助。今天,我要为大家介绍一款强大的PDF编辑工具——首助编辑高手,它将…

夏季使用打包机需要注意些什么

夏季由于非常炎热的特点,很多设备的使用都需要非常关注它的使用安全,打包机也不例外,尤其是24小时生产的企业,对于设备的使用注意事项更应该多加注意,那么夏季使用打包机到底该注意些什么呢?艾讯认为至少应…

01 Redis的特性+下载安装启动

1.1 NoSQL NoSQL(“non-relational”, “Not Only SQL”),泛指非关系型的数据库。 键值存储数据库 : 就像 Map 一样的 key-value 对。如Redis文档数据库 : NoSQL 与关系型数据的结合,最像关系…

eNSP 实验 两台AR配置同网段

实验1:eNSP 两台AR配置同网段 目的:创建两台AR,配置IP互相ping通 拓扑结构: 首先创建一个AR3260 然后创建一个AR2220 然后同轴电缆连接一下 先配置AR2220。 1、切管理员:system-view 进入千兆位以太网 0/0/0 interf…

如何抓住短剧“狂飙”风口?腾讯微搭发布一站式短剧平台解决方案

“制作成本50万,充值流水一个亿。” “7天写完剧本,一周拍完一部剧。” 短剧热度不断提升,情节快节奏、单集时长短、竖屏呈现等特点更迎合现代社会快节奏下的碎片化观看需求。2023年以来,小程序短剧高速发展,数据显示…

electron-builder vue 打包后element-ui字体图标不显示问题

当使用electron打包完成的时候,启动项目发现使用的element-ui字体图标没显示都变成了小方块,并出现报错,请看下图: 解放方法: 在vue.config.js中设置 customFileProtocol字段:pluginOptions: {electronBui…

Vulnhub靶场MATRIX-BREAKOUT: 2 MORPHEUS

攻击机192.168.223.128 目标机192.168.223.140 主机发现nmap -sP 192.168.223.0/24 端口扫描nmap -p- 192.168.223.140 开启了 22,80,81三个端口 看一下web界面 是inguardians 写给jaybeale的信,说计算机被密码锁住了,至少…

【创建vue项目的两种方式】

Vue环境搭建 NodeJs安装包安装淘宝镜像 环境搭建webpack安装全局安装vue/cli查看模板创建项目1.webpack2. vue-cli NodeJs安装包 下载链接:官网链接 下载下来后,直接傻瓜式的安装即可。 通过在cmd控制台输入以下命令查看是否安装成功 node -v因为适配某…

云计算项目六:升级网站运行平台|部署缓存服务|数据迁移|部署集群

升级网站运行平台|部署缓存服务|数据迁移|部署集群 案例1:升级网站运行平台步骤一:清除当前配置步骤二:部署LNMP步骤三:测试配置 案例2:部署内存存储服务步骤一:部署redi…

Linux基础指令【下篇】

📙 作者简介 :RO-BERRY 📗 学习方向:致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 📒 日后方向 : 偏向于CPP开发以及大数据方向,欢迎各位关注,谢谢各位的支持 目录 1.时间指令----date1…

翻译: 使用 GPT-4 将您的 Streamlit 应用程序提升到一个新的水平一

帮助您更快地设计、调试和优化 Streamlit 应用的专业技巧 设计和扩展 Streamlit 应用程序可能是一项艰巨的任务!作为开发人员,我们经常面临一些挑战,例如设计良好的 UI、快速调试我们的应用程序以及快速制作它们。 如果有一个工具可以加快速…

【GitHub项目推荐--不错的Flutter项目】【转载】

01 可定制的图表库 FL Chart是一个高度可定制的 Flutter 图表库,支持折线图、条形图、饼图、散点图和雷达图 。 项目地址:https://github.com/imaNNeoFighT/fl_chart LineChart BarChart PieChart Sample1 Sample2 Sample3 …

linux 查看系统日记

一 关于 journalctl 简介: 在window想查看日记通常是通过事件查看器,在linux则可以通过journalctl -xe,journalctl是 Systemd 日志管理工具的一部分,用于检索和显示系统日志。 二 使用journalctl 查看日记: journalct…

关于axios给后端发送数据的问题

这里需要用的插件:qs.js,是前端给后端发送的数组,需要序列化所以要用到这个插件,这里就提取连接在这里,需要的自提,需要导如进来,别忘记了 链接:https://pan.baidu.com/s/1qyD8v9wfd…

JMeter:性能测试和压力测试工具详解

🍅 视频学习:文末有免费的配套视频可观看 🍅 关注公众号:互联网杂货铺,回复1 ,免费获取软件测试全套资料,资料在手,薪资嘎嘎涨 JMeter简介 JMeter时Apache下基于java的一款性能测试…

antdesignvue中使用VNode写法

1、使用场景 如图:消息提示框中,将数据中的数据单独一行显示 2、代码 let errorList res.result; //后端返回的数据例: ["1. 数据格式不正确","2. 数据已存在"]if(errorList&&errorList.length!0){this.$notif…