【复盘】生产环境页面请求超时,端口连接数超过9千导致系统不可用

问题复现

最近使用 websocket 技术开发了一个反向代理客户端,要求实现如下功能

  • 客户端安装代理客户端,禁止开放端口,由服务端开放端口
  • 客户端主动连接服务端,并保持心跳连接,当心跳中断或者断连时,重新与服务端建立连接
  • 当客户端连接到服务端后,服务端随时发送请求给客户端

开发和测试环境都没有发生问题,当在客户那边使用时,客户开启了140个客户端连接,由于心跳检测和重连逻辑写的有问题,重连后不会关闭之前的连接,保留旧连接。导致与服务端的连接越来越多,最后连接激增到9千导致其他的 tcp 请求进入不到 tomcat。

由于 SpringBoot 2.2.25.RELEASE tomcat 默认的最大连接数为 8192,从而造成阻塞,导致页面请求超时。

tomcat 默认最大连接数

在这里插入图片描述

端口连接数

[root@curry platform]# netstat -na | grep 12345 | wc -l
9007

解决办法

1、修改产生问题的代码

2、修改服务端配置文件,将 max-connections 最大连接数设置成1万,暂时解决问题

server:
  servlet:
    context-path: /
  tomcat:
    max-connections: 10000

3、使用 jetty 替换默认 tomcat, 强烈推荐

修改 pom 文件,排除调 tomcat 容器

 implementation("org.springframework.boot:spring-boot-starter-web") {
        exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat'
    }
    implementation 'org.springframework.boot:spring-boot-starter-jetty:2.3.1.RELEASE'
    implementation ("org.springframework.boot:spring-boot-starter-websocket:2.3.0.RELEASE") {
        exclude module: "spring-boot-starter-tomcat"
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值