如何优化高并发TCP链接中产生的大量的TIME_WAIT的状态(nginx)

背景

线上有一套高并发的系统经常出现访问超时、服务不可用的告警,访问链路如下:client-> nginx-> web server,所以第一时间排查了nginx服务器,这台服务器主要是做前端web和后端的反向代理。排查nginx日志时发现大量的报错
,负载均衡时无法分配请求的地址。

(99: Cannot assign requested address) while connecting to upstream  

排查问题时,发现系统存在几万多个time_wait状态连接

netstat -n | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"\t",state[key]}'

由于time_wait连接会占用本地端口,而本地默认的最大端口数是65535,所以导致了端口不够用的情况

time_wait什么是

在 TCP 连接的生命周期中,TIME_WAIT 是连接终止过程中的一个状态

TIME_WAIT 状态有两个主要目的:
1、确保最后一个 ACK 包的可靠传输
2、允许旧的重复数据包消失

如何优化

1、系统内核参数调优

vi /etc/sysctl.conf
...
# 减少 TIME_WAIT 持续时间
net.ipv4.tcp_fin_timeout = 30 
# 启用端口复用
net.ipv4.tcp_tw_reuse = 1 
# 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭
net.ipv4.tcp_tw_recycle = 1
其他优化:net.ipv4.ip_local_port_range = 1024 65535 增加可用端口范围,让系统拥有的更多的端口来建立链接,这里有个问题需要注意,对于这个设置系统就会从1025~65535这个范围内随机分配端口来用于连接,如果我们服务的使用端口比如8080刚好在这个范围之内,在升级服务期间,可能会出现8080端口被其他随机分配的链接给占用掉,这个原因也是文章开头提到的端口被占用的另一个原因
net.ipv4.ip_local_reserved_ports = 7005,8001-8100 针对上面的问题,我们可以设置这个参数来告诉系统给我们预留哪些端口,不可以用于自动分配。
...
#使内核参数生效
sysctl -p

2、nginx调整短链接为长链接

短连接是指SOCKET连接后发送后接收完数据后马上断开连接
长连接指建立SOCKET连接后不管是否使用都保持连接,但安全性较差

长连接比短连接从根本上减少了关闭连接的次数,减少了TIME_WAIT状态的产生数量,在高并发的系统中,这种方式的改动非常有效果,可以明显减少系统TIME_WAIT的数量

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

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

相关文章

DIYGW可视化开发工具:微信小程序与多端应用开发的利器

一、引言 随着移动互联网的飞速发展,微信小程序以其轻便、易用和跨平台的特点受到了广泛关注。然而,微信小程序的开发相较于传统的H5网页开发,在UI搭建和交互设计上存在一定的挑战。为了应对这些挑战,开发者们一直在寻找更加高效…

微服务——参数校验

微服务校验常用的方式有: 1、数据库约束:在数据库中设置数据的相关约束,如字段长度、类型等,来确保数据的正确性。 2、 后端校验:在后端进行数据的校验,如参数校验、业务校验等,来确保数据的合…

量产导入 | DFT教程系列

DFT的目的是干啥的? https://www.eecourse.com/article/518 目标 完成这个课程后,我希望能够拥有什么能力? 1、学会插入scan chain2、学会将设计文件导出到ATPG和P&R工具3、学会DFT Compiler工具的使用前置知识 最后你拥有以下的技能,没有的话去补补,边学边查也都…

私域引流宝PHP源码 以及搭建教程

私域引流宝PHP源码 以及搭建教程

直播录制怎么录?(3个方法)

在数字化快速发展的今天,直播已经成为了一种重要的传播方式,无论是商业活动、教育培训,还是娱乐休闲,直播都展现出了其独特的价值。然而,直播的即时性也意味着一旦错过,就很难再次体验。这时,直…

TS特殊类型之unknown

unknown类型 首先说明一下,本人是前端小学生级别的菜鸡,吐槽的话请口下留情,在评论区指出错误或者补充不足,我会很喜欢,互喷不会进步,相互指点才会。。。。谢谢大家啦 📌unknown 类型也是顶部类…

第20篇 Intel FPGA Monitor Program的使用<三>

Q:如何用Intel FPGA Monitor Program创建汇编语言工程呢? A:我们用一个Nios II汇编语言简易应用程序来发掘Intel Monitor FPGA Program软件的一些功能特性,并介绍创建工程的基本步骤。该程序可以实现找到存储在存储器中的32位整…

怎么改图片尺寸更方便?在线图片改大小的使用方法

图片怎么快速改尺寸呢?在网上传图或者做其他用途时,经常会对图片的尺寸有要求,当拍摄或者制作的图片太大或者太小时,都会导致图片的无法正常使用,那么就需要按照规定将图片改大小之后才能正常使用。 在遇到图片修改大…

Epicor BAQ - BAQ设计与调用

目录 一、BAQ设计常用功能1.跨公司查询2.修改作者3.添加筛选条件4.使用BAQ参数5.子查询 二、在客制化中调用BAQ取数三、在BPM中调用BAQ取数四、结束 一、BAQ设计常用功能 1.跨公司查询 在BAQ的General页面勾选Cross-company后,BAQ可以跨公司查询数据。 2.修改作…

Cloudflare 错误 1006、1007、1008 解决方案 | 如何修复

根据不完全统计,使用 Cloudflare 的网站比例已经接近 20%。因此,在日常工作中,比如进行网页抓取时,您可能经常会遇到一些因 Cloudflare 而产生的困难。例如,遇到 Cloudflare 错误 1006、1007 和 1008,这些错…

AForge.NET介绍

AForge.NET是一个功能强大的开源计算机视觉库,它主要提供了以下功能: 图像处理(AForge.Imaging): 提供了一系列预定义的图像滤波器,包括模糊、锐化、边缘检测等。 支持色彩空间转换和像素操作,…

水电表抄表解决方案

1.简述:水电表抄表方案的必要性 水电表抄表是物业管理服务中不可或缺的一环,它涉及到费用计算、资源优化配置及其环保节能监管等各个方面。传统的手工抄表方法不但耗时费力,且容易出差错,因而,现代化抄表方案是十分重…

Strict-Transport-Security(HSTS) X-Frame-Options X-XSS-Protection

一、Strict-Transport-Security(HSTS) 1、HSTS介绍 HTTP Strict-Transport-Security(通常简称为 HSTS)响应标头用来通知浏览器应该只通过 HTTPS 访问该站点,并且以后使用 HTTP 访问该站点的所有尝试都应自动重定向到 …

Java——重载

一、重载(Overload) 1、重载是什么 方法重载(Method Overloading)是Java中实现多态的一种方式。它允许在同一个类中定义多个同名的方法,只要这些方法的参数列表不同。这些不同的参数列表可以通过不同的参数类型、参数…

Web前端项目源码:深入解析与未来探索

Web前端项目源码:深入解析与未来探索 Web前端项目源码,如同隐藏在数字世界中的宝藏,蕴含着丰富的技术与智慧。它是构建现代网页应用的核心,也是实现用户交互和界面呈现的关键所在。本文将从四个方面、五个方面、六个方面和七个方…

构建全面框架 | 简化基因组+线粒体遗传进化联合分析

近日,凌恩生物客户河北农业大学、浙江大学及英国格林威治大学的研究团队合作,在《Insect Science》杂志上发表了题为“A comprehensive framework for the delimitation of species within the Bemisia tabaci cryptic complex, a global pest-species g…

Jira系统基本介绍

0 Preface/Foreword 1 使用人群 使用者包括以下: 企业管理层项目经理测试人员开发人员其他人员 2 Issue相关 2.1 缺陷类型 缺陷类型包括: 代码错误:常见的开发引起的错误设计缺陷:前期代码的框架搭建、界面设计等导致的缺陷…

GStreamer安装——iOS

安装iOS开发 支持从iOS6开始的所有版本 先决条件 iOS开发需要下载Xcode和iOSSDK。Xcode 可以在App Store或 这里 iOSSDK,如果它还没有包含在您的Xcode版本中, 可以从下载选项卡下的Xcode首选项菜单下载。 最低要求iOS版本为6.0。的最低要求版本 Xcode…

VUE做官方网站,兼容PC端和移动端的中英文切换显示,国际化库使用步骤详细教程

在使用Vue.js开发官方网站时,实现中英文的国际化显示,可以采用以下步骤和策略: 选择国际化库:Vue.js社区提供了多个国际化库,最常用的是vue-i18n。它是一个国际化插件,专为Vue.js应用程序设计。 安装vue-i…

字节流和字符流的区别

字节流和字符流的区别 字节流 **数据单位:**Byte为单位进行数据传输和处理。 **应用场景:**适用于所有类型的文件,包括视频、视频、音频等二进制文件,以及文本文件。 比如InputStrem和子类(FileInputStream&#x…