windows和linux出现timewait过多的解决方法

news2024/11/13 15:11:54

一、timewait出现在客户端还是服务端以及什么情况下出现

我是做性能测试的。在压测过程中遇到了timewait过多的情况,下面来看一下timewait产生的原因及解决办法,我自己在服务器起了一个很简单的springboot应用来验证自己的猜想及解决办法。

说到产生原因就要提到断开连接的挥手过程了,挥手过程已经说明了,客户端和服务端都可以主动断开连接,谁主动断开连接,timewait状态就发生在哪一端。这个过程很好复现,你在本地打开一个浏览器然后访问你部署的应用,这个时候在命令行窗口netstat -a|find "目标ip" 就能看到和目标ip建立连接了,然后你把浏览器关闭,这个时候的状态就变成timewait了。

当时我在用jmeter做压测,由于tps过高,导致处于timewait状态的连接很多,然后一直报错。后面研究了下,jmeter有个默认的配置httpclient.reset_state_on_thread_group_iteration,它的值默认是true,表示每次请求都创建一个新的连接来请求,超过了系统可创建连接的限制。

这是httpclient.reset_state_on_thread_group_iteration=true,我用jmeter创建一个线程请求10次的效果,每一次都会创建一个连接。

这是httpclient.reset_state_on_thread_group_iteration=false,我用jmeter创建一个线程请求10次的效果,10次请求就创建了一个连接。

 接下来我们研究下一个长连接可以接收多少次请求,超过一定次数后连接由哪一方主动断开?

1、在jmeter设置单线程请求99次,这是请求99次后windows和linux端的状态

请求99次后,jmeter主动断开连接,timewait发生在windows端。

2、在jmeter设置单线程请求100次,这是请求100次后windows和linux端的状态

请求100次后,服务端主动断开连接,timewait发生在linux端。

3、在jmeter设置单线程请求101次,这是请求101次后windows和linux端的状态

 请求101次后,windows端和linux端都发生了timewait,这是为什么呢。这是因为在100次的时候达到了长连接的请求次数上限,linux端主动断了连接产生timewait,在第101次的时候,jmeter主动断了连接,windows端产生了timewait。

所以从上面可以看出,一个长连接的请求次数上限是100

4、再在jmeter设置单线程请求501次,看看windows和linux端的状态,验证我们上述的结论

 可以看到,服务端有5个timewait,刚好对应jmeter请求的500次,而windows端的timewait刚好对应jmeter的第501次。

5、我们再来看看一个有意思的问题,同一个连接有可能出现两端同时主动断开的情况,这种情况只会出现在100次请求的倍数场景下,比如200次,300次,但是也不一定保证每次两端都会出现同时主动断开的情况。下面是我请求1000次的情况。

可以看到,56267端口 对应的连接在windows和linux都出现了timewait

 二、服务端如何避免过多的timewait

1、网上的很多文章都说修改以下配置

net.ipv4.tcp_tw_reuse
net.ipv4.tcp_tw_recycle 
net.ipv4.tcp_fin_timeout 

net.ipv4.tcp_max_tw_buckets

经过我自己的实际压测,只有改net.ipv4.tcp_max_tw_buckets这个配置有用,这个配置可以限制你的处于timewait的连接能有多少个,而且不会对你的压测结果有影响,因为在我改之前和改之后压测,jmeter体现的tps几乎没有变化。当然你还可以改ip_local_port_range来缓解你的连接不够用的情况。

2、实在不行,那就做负载均衡来分担你的压力吧

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

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

相关文章

基于docker部署prometheus

1、prometheus架构 Prometheus Server: 收集指标和存储时间序列数据,并提供查询接口 ClientLibrary:客户端库 Push Gateway: 短期存储指标数据。主要用于临时性的任务 Exporters:采集已有的第三方服务监控指标并暴露 metrics Alertmanager:告警 Web UI :简单的…

VS插件CodeRush全新发布v22.2.4——改进对VS 17.5的支持

CodeRush是一个强大的Visual Studio .NET 插件,它利用整合技术,通过促进开发者和团队效率来提升开发者体验。CodeRush能帮助你以极高的效率创建和维护源代码。Consume-first 申明,强大的模板,智能的选择工具,智能代码分…

【C++升级之路】第九篇:vector

🌟hello,各位读者大大们你们好呀🌟 🍭🍭系列专栏:【C学习与应用】 ✒️✒️本篇内容:vector的基本概念、vector的使用(构造,迭代器,空间增长,增删…

小樽C++ 单章③ 一维数组

目录 一、一维数组认识与使用 1.4 数组的输入与输出 1.5 最大值与最小值的求解 二、一维数组的操作用法 2.1 数组的插入与删除 2.2 数组某个值的查找 2.3多个数组的合并 2.4多个数组的有序合并 三、一维数组的应用 3.1 斐波那契数列 3.2 淘淘摘苹果 3.3 翻纸牌游戏…

RTOS中互斥量的原理以及应用

互斥量的原理 RTOS中的互斥量是一种同步机制,用于保护共享资源,防止多个任务同时访问该资源,从而避免数据竞争和不一致性。 互斥量的原理是通过对共享资源进行加锁和解锁操作来实现的。 在RTOS中,互斥量通常是一个数据结构&…

为什么说要慎用BeanUtils,因为性能真的拉跨

1 背景之前在专栏中讲过“不推荐使用属性拷贝工具”,推荐直接定义转换类和方法使用 IDEA 插件自动填充 get / set 函数。不推荐的主要理由是:有些属性拷贝工具性能有点差有些属性拷贝工具有“BUG”使用属性拷贝工具容易存在一些隐患(后面例子…

九龙证券|磷酸亚铁锂是什么?磷酸亚铁锂的特点和性能介绍

磷酸亚铁锂是一种新式锂离子电池电极资料,化学式:LiFePO4,磷酸亚铁锂为近来新开发的锂离子电池电极资料,首要用于动力锂离子电池,作为正极活性物质运用,人们习气也称其为磷酸铁锂。 磷酸亚铁锂的特色和功能…

【计算机网络】随机访问介质访问控制中的ALOHA协议、CSMA协议、CSMA/CD协议和CSMA/CA协议

二、随机访问介质访问控制 信道上的所有用户可随机发送信息 1. 简单ALOHA协议 解决信息发送时的冲突问题。其特点是不监听信道,不按时间槽发送,随机重发。 思想:在超时后,等随机一段时间后再重传 2. 时隙ALOHA协议 时隙ALOH…

送给她最最浪漫的表白(Python代码实现)

目录I 最美的浪漫 II 昨日浪漫的表白III 关于“美”的哲思 IV Python代码实现 I 最美的浪漫 II 昨日浪漫的表白 她问:有一个问题,我只问一遍,为什么是我?我微微一笑答道:笞案很长,我要用一生来回答。我:图书馆旁边的星空真美&…

Linux面试总结

一.常用命令1.目录切换cd / 切换到根目录cd ../ 切换到上级目录cd ~ 切换到home目录2.查看目录ls 列出当前目录下所有的文件ls [路径]ls / 查看根目录 ls -l 相当于 ll 最常用的命令,用了表的方式列出当前目录的内容3.查看当前目录pwd-4.创建一组空文件touch5.显示文件内容cat6…

Maven打包操作

对于企业级项目,无论是进行本地测试,还是测试环境测试以及最终的项目上线,都会涉及项目的打包操作。对于每个环境下的项目打包,对应的项目所需要的配置资源都会有所区别,实现打包的方式有很多种,可以通过an…

【Linux】进程理解与学习(Ⅰ)

环境:centos7.6,腾讯云服务器Linux文章都放在了专栏:【Linux】欢迎支持订阅🌹相关文章推荐:【Linux】冯.诺依曼体系结构与操作系统进程概念什么是进程?进程是什么?我们打开任务管理器可以看到有…

Flex弹性布局一文通【最全Flex教学】

文章目录一.Flex布局1.1 传统布局和flex布局1.1.1 传统布局1.1.2 flex弹性布局1.2 flex初步体验1.3 布局原理二.常见Flex属性2.1 常见父项属性2.2 flex-direction主轴的方向2.3 justify-content设置主轴上的子元素排列方式2.4 设置子元素是否flex-wrap换行2.5 align-itmes设置侧…

数列的极限

数列的极限的定义: 当正多边形的边数越来越多时,正多边形的面积越来越接近于圆的面积。 这个过程就叫做极限。 数列的形式: 数列的每一个下标对应一个数列元素值。 认识数列 这就是4个数列的表现形式。 当数列的下标无限增长时&#xff0c…

记录--uni-app中安卓包检查更新、新版本下载、下载进度条显示功能实现

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 需求描述 如果想要做一个app的话,可以有很多种选择方案,uni-app是其中的一个性价比高一些(坑多一些)的方案。本文记录一下,uni-app打安卓包以后,需要检查…

【操作系统】如何避免预读失效和缓存污染的问题?

【操作系统】如何避免预读失效和缓存污染的问题? 文章目录【操作系统】如何避免预读失效和缓存污染的问题?Linux 和 MySQL 的缓存Linux 操作系统的缓存MySQL 的缓存传统 LRU 是如何管理内存数据的?预读失效,怎么办?什么…

bash if 判断及特殊字符

bash if 判断 1)字符串判断 str1 str2     当两个串有相同内容、长度时为真 str1 ! str2     当串str1和str2不等时为真 -n str1       当串的长度大于0时为真(串非空) -z str1       当串的长度为0时为真(空串) str1        当串str1为非…

华为OD机试题,用 Java 解【众数和中位数】问题

华为Od必看系列 华为OD机试 全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典使用说明 参加华为od机试,一定要注意不…

Spark DPP

Spark DPP分区剪裁动态分区剪裁DPP (Dynamic Partition Pruning,动态分区剪裁) : 过滤维度表后,能削减事实表的数据扫描量,提升关联计算的执行性能 分区剪裁 需求 :统计所有头部用户贡献的营业额,并按照营业额倒序排…

体验 Linux 音频驱动

目录 一、音频接口简介 1、音频编解码芯片 2、 WM8960 3、I2S总线接口 二、硬件原理图 三、音频驱动使能 三、使能内核的 WM8960 驱动 1、取消 ALSA 模拟 OSS API 2、使能 I.MX6ULL 的 WM8960 驱动 验证 四、alsa-lib 和 alsa-utils 移植 1、alsa-utils 移植 ①、开…