ESB调数据湖元数据库接口失败问题分析报告

这篇报告详细分析了ESB调用数据湖元数据库接口时遇到的SocketTimeout异常,发现原因是Linux内核的net.ipv4.tcp_tw_recycle参数导致的TCP握手失败。通过关闭该参数,问题得到解决。建议在特定环境下谨慎使用net.ipv4.tcp_tw_recycle。
摘要由CSDN通过智能技术生成

背景

2019年8月12日~8月13日,ESB调数据湖接口接连失败两次,ESB端报SocketTimeout异常,每次持续时间大约30分钟~1小时:

java.net.SocketTimeoutException: connect timed out

        at java.net.PlainSocketImpl.socketConnect(Native Method)

        at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)

………………………………………………………………………………

问题分析

从Esb那边的日志分析,是esb到数据湖元数据库的F5有超时,这个F5后面挂着数据湖元数据库的两台服务器。

1、与网络组同事查看F5日志,由于未在其上部署探针,因此查看不到当时的网络数据。

2、在数据湖元数据库两台服务器上进行抓包

tcpdump -i ens192 IP1 -w /tmp/ens192-sas.cap

分析发现TCP数据流存在建链失败情况,F5向数据湖元数据库节点IP1发起SYN包,然而IP1未进行ACK,F5重试两次后超时,最终TCP握手失败。这里要说明的是,并非F5的所有请求都会建链失败,有一部分请求是正常的。

由此推测可能存在如下几种情况:

1、Kernel根据内核参数、NetFilter策略,丢弃了SYN包;

2、数据湖应用达到连接上限,丢弃SYN包;

问题定位

1、检查操作系统TCP统计信息,发现SYN包有被丢弃情况:

Shell> netstat -s|grep -i drop

3020 SYNs to LISTEN sockets dropped

2、查看iptables规则,观察策略正常

Shell> iptables -L -n -v

Chain INPUT (policy ACCEPT 328M packets, 104G bytes)    ——input(负责过滤入本机的数据包)

pkts bytes target prot opt in out source destination

0 0 ACCEPT udp -- virbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:53

0 0 ACCEPT tcp -- virbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:53

0 0 ACCEPT udp -- virbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:67

0 0 ACCEPT tcp -- virbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:67

 

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)     ——forward(负责转发流经但不进入本机的数据包)

pkts bytes target prot opt in out source destination

0 0 ACCEPT all -- * virbr0 0.0.0.0/0 192.168.122.0/24 ctstate RELATED,ESTABLISHED

0 0 ACCEPT all -- virbr0 * 192.168.122.0/24 0.0.0.0/0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值