容器访问某个链接中断后面又正常,socket
现象:
通过自建k8s访问某个服务比如hbase,进行压测时发现刚开始正常,在一段时间后会出现几秒的断连,之后又会恢复。
排查过程:
1.首先查看哪段时间k8s的pod资源有没有打满,有没有出现pod重启的情况。---发现没有,排除pod资源满的情况
2.去本地ecs去访问这个服务,发现正常。---排除某个服务的问题
3.这里就基本定位是k8s了,进入pod定位
ss -tan | grep 'TIME-WAIT' | wc -l
发现连接数确实打满,打到2w7,并且没有释放
解决方案:
sysctl -w net.ipv4.tcp_tw_reuse=1
sysctl -w net.ipv4.tcp_fin_timeout=30
核心关键是下面这一条
net.ipv4.tcp_max_tw_buckets = 5000ecs可以通过这个看:
cat /proc/sys/net/ipv4/tcp_max_tw_buckets
加入到k8s的配置:
apiVersion: v1
kind: Pod
metadata:
name: tcp-recycle-demo
spec:
containers:
- name: demo-container
image: your-image
securityContext:
sysctls:
- name: net.ipv4.tcp_fin_timeout
value: "30" # TIME_WAIT 超时回收时间
- name: net.ipv4.tcp_max_tw_buckets
value: "5000" # 最大 TIME_WAIT 连接数
- name: net.ipv4.tcp_tw_reuse
value: "1" # 允许 TIME_WAIT 端口复用(加速回收)
