如今,伴随着开源软件、分布式软件的广泛应用,网络在日常运维、管理以及运行中,起着至关重要的作用,尤其是对于mysql、redis、es等关系型数据库,nosql数据库和分布式数据库来说。
在日常使用时,包含socket连接在内的服务器的总体连接数,往往是衡量、监控主机性能以及操作系统调优时,重点观察的指标之一。
第1章 查找你的网络连接
通过上面的ss命令的输出,我们可以看到,目前服务器上运行着redis服务,端口是6379,进程是13434,并且没有其他连接到redis服务,因为收发队列基本没有数据。
1、建立连接
使用2台客户端来连接redis服务器
2、redis服务器监控
可以看到id 6和8是客户端连接,id 11是查询命令的连接。
第2章 排查连接进程
此时,redis服务器已经连接了2个客户端,接下来进一步去查看这两个连接的信息。
进入到redis服务器的proc下的redis进程目录的fd目录下,
注意看227329与114533,与之前的ss输出可以匹配上。
1、查看tcp连接信息
我们已经知道了客户端的连接socket是227329与114533,那可以到proc下的tcp目录里查看tcp连接的信息。
可以看到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连接。
以10.10.1.65这条连接为例,进行关闭。
2、TCP监控
关闭后再次查看连接情况
3、客户端监控
第4章 TCP连接
1、3次连接
通过上图可以看到,TCP初始连接要经过3个步骤建立连接
a) 客户端告诉服务端,我要申请建立一条连接。
b) 客户端告诉服务端,我要开启一个socket连接。
c) 服务端确认回复客户端,申请已收到,并且我也要在你的服务器上开启一个socket连接。
d) 客户端回复服务端,确认。
e) 至此TCP连接建立完成。
2、4次挥手
通过上图可以看到,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