searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

http server大量close wait异常场景分析

2023-08-28 07:46:45
89
0

在linux环境中,有一个叫句柄的东西,每一个进程都有自己最大句柄数,当超过最大值的时候,程序会报错:Too many open files。所以我们在部署环境的时候需要设置自己的最大值,防止该值过小导致环境问题影响程序运行。句柄的最大值可以通过命令:ulimit -n来查询,该命令是系统的全局配置环境,进程的最大句柄查询如下:

通过获取进程的进程id进行查询。

http服务是基于tcp的7层协议,其中tcp的三次握手和四次挥手相关知识大家自行学习,本章不进行赘述。http连接是基于发起端(client)和响应端(server),close_wait是tcp过程中的一个中间状态,该状态在client端和server端都会出现,其中client端的问题比较简单,大部分情况是server端处理时间过长,或者server端处理请求过多阻塞导致,解决方法可以采用如下:

  • 扩展server端机器,集群负载方式;
  • 程序代码优化;
  • http服务采用异步方式调用;

 

Server端出现大量close_wait问题是如下流程引起:

  • client发起请求到server端;
  • Server端同步处理请求,不会给client端进行报文回复;
  • Client收不到server报文回复,client端的超时时间到达发送关闭连接报文;
  • Server端收到client的关闭连接报文,由于server端还在处理程序,所以对该报文不处理,并且占用该连接;
  • Client关闭连接;
  • Server端程序处理完成,发送回复报文给client;
  • Client收到server的回复报文,但是client已经把该连接关闭掉了,导致client不认识该报文进而发送est的错误报文给server;
  • Server没收到正常的挥手报文导致tcp连接处于close_wait状态,然后需要等待系统的过期时间(150min)后把该tcp连接进行回收;
  • 大量请求后导致server端出现大量tcp连接(close_wait状态),占用大量句柄,慢慢导致程序变慢,最终程序卡死状态处理不了新请求。

以上就是http server端出现大量close_wait状态的流程,解决问题的途径就是进行代码优化,或者采用异步通信的方式。希望该文章能帮助大家。

0条评论
作者已关闭评论
云杨
2文章数
0粉丝数
云杨
2 文章 | 0 粉丝
云杨
2文章数
0粉丝数
云杨
2 文章 | 0 粉丝
原创

http server大量close wait异常场景分析

2023-08-28 07:46:45
89
0

在linux环境中,有一个叫句柄的东西,每一个进程都有自己最大句柄数,当超过最大值的时候,程序会报错:Too many open files。所以我们在部署环境的时候需要设置自己的最大值,防止该值过小导致环境问题影响程序运行。句柄的最大值可以通过命令:ulimit -n来查询,该命令是系统的全局配置环境,进程的最大句柄查询如下:

通过获取进程的进程id进行查询。

http服务是基于tcp的7层协议,其中tcp的三次握手和四次挥手相关知识大家自行学习,本章不进行赘述。http连接是基于发起端(client)和响应端(server),close_wait是tcp过程中的一个中间状态,该状态在client端和server端都会出现,其中client端的问题比较简单,大部分情况是server端处理时间过长,或者server端处理请求过多阻塞导致,解决方法可以采用如下:

  • 扩展server端机器,集群负载方式;
  • 程序代码优化;
  • http服务采用异步方式调用;

 

Server端出现大量close_wait问题是如下流程引起:

  • client发起请求到server端;
  • Server端同步处理请求,不会给client端进行报文回复;
  • Client收不到server报文回复,client端的超时时间到达发送关闭连接报文;
  • Server端收到client的关闭连接报文,由于server端还在处理程序,所以对该报文不处理,并且占用该连接;
  • Client关闭连接;
  • Server端程序处理完成,发送回复报文给client;
  • Client收到server的回复报文,但是client已经把该连接关闭掉了,导致client不认识该报文进而发送est的错误报文给server;
  • Server没收到正常的挥手报文导致tcp连接处于close_wait状态,然后需要等待系统的过期时间(150min)后把该tcp连接进行回收;
  • 大量请求后导致server端出现大量tcp连接(close_wait状态),占用大量句柄,慢慢导致程序变慢,最终程序卡死状态处理不了新请求。

以上就是http server端出现大量close_wait状态的流程,解决问题的途径就是进行代码优化,或者采用异步通信的方式。希望该文章能帮助大家。

文章来自个人专栏
SDN控制器
2 文章 | 2 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0