EN 联系我们加入我们
典型案例
您现在的位置:首页 > 典型案例
【案例分享】如何有效管理socket资源


如今,伴随着开源软件、分布式软件的广泛应用,网络在日常运维、管理以及运行中,起着至关重要的作用,尤其是对于mysql、redis、es等关系型数据库,nosql数据库和分布式数据库来说。

在日常使用时,包含socket连接在内的服务器的总体连接数,往往是衡量、监控主机性能以及操作系统调优时,重点观察的指标之一。‍



第1章  查找你的网络连接

1.png

通过上面的ss命令的输出,我们可以看到,目前服务器上运行着redis服务,端口是6379,进程是13434,并且没有其他连接到redis服务,因为收发队列基本没有数据。

1、建立连接

使用2台客户端来连接redis服务器

2.png

2、redis服务器监控

3.png

可以看到id 6和8是客户端连接,id 11是查询命令的连接。




第2章  排查连接进程


此时,redis服务器已经连接了2个客户端,接下来进一步去查看这两个连接的信息。

进入到redis服务器的proc下的redis进程目录的fd目录下,

4.png

注意看227329与114533,与之前的ss输出可以匹配上。


1、查看tcp连接信息

我们已经知道了客户端的连接socket是227329与114533,那可以到proc下的tcp目录里查看tcp连接的信息。

5.png

可以看到id为4,5的两条记录,与之前看到的tcp连接相符,通过转换至十进制,分别是10.10.1.65/10.10.1.64。

以id为5的记录举例,3F010A0A:18EB是本地的ip与端口,40010A0A:8000是远程的ip与端口。




第3章  关闭socket连接

1、关闭连接

通过如上步骤,已经找到了2个客户端的socket连接,那接下来可以针对性地关闭socket连接。

6.png

以10.10.1.65这条连接为例,进行关闭。

7.png

2、TCP监控

关闭后再次查看连接情况

8.png

3、客户端监控

8.png



第4章  TCP连接

1、3次连接

10.png

通过上图可以看到,TCP初始连接要经过3个步骤建立连接

a)   客户端告诉服务端,我要申请建立一条连接。

b)   客户端告诉服务端,我要开启一个socket连接。

c)   服务端确认回复客户端,申请已收到,并且我也要在你的服务器上开启一个socket连接。

d)   客户端回复服务端,确认。

e)   至此TCP连接建立完成。


2、4次挥手

11.png

通过上图可以看到,TCP断开连接有4个步骤

a)   关闭一方发起请求,告知被关闭一方,“我要关闭连接了”

b)   被动关闭一方回复“确认”

可以看到我们刚才的记录中,关闭了socket之后,立即进入了fin-wait-2状态。

c)   待数据发送完成后,被动一方会再次发送一条信息,告诉主动关闭一方,“我的数据已发送完成,可以关闭连接了。”

d)   默认是2ms时间,主动关闭一方会彻底关闭TCP连接。


3、如何提高系统并发量

a)   TCP连接就是在客户机、服务器上的一对socket。它们都在各自内核对象上记录了双方的ip对、端口对(也就是我们常说的四元组),通过这个记录在通信时找到对方。

b)   TCP连接发送方在发送网络包的时候,会把这份信息复制到IP Header上。网络包带着这份信物穿过互联网,到达目的服务器。目的服务器内核会按照 IP 包 header 中携带的信物(四元组)去匹配找到正确的socket(连接)。

c)   在这个过程里可以看到,客户端的端口只是这个四元组里的一元。哪怕两条连接用的是同一个端口号,但只要客户端ip不一样,或者是服务器不一样,都不影响内核正确寻找到对应的连接。 

d)   所以在客户端增加TCP最大并发能力有两个方法:

 ● 为客户端配置多个ip 

 ● 连接多个不同的server


如欲了解更多,请登录安图特官方网站:www.antute.com.cn

版权所有 安图特(北京)科技有限公司 备案号:京ICP备17074963号-1
技术支持:创世网络