- 先看这篇https://wiki.jenkins.io/display/JENKINS/Remoting+issue
初步了解Jenkins Master和Slave通信原理,此时需要查看日志,master日志默认位于/var/lib/jenkins/log/slaves/xxxNode/
节点异常日志位于节点的工作目录;是Ping thread 检测到延迟过高导致Jenkins从节点掉线吗?这样的话,很可能是二者直接通信问题。 - 对于两节点间通信问题原因就比较多了;当然初步的套路是有的,
netstat -s
看看相应网卡有没有丢包,还可以通过安装相应软件工具: dropwatch,可以看到是在哪一层丢包;关于丢包这里有两篇文章可供参考:https://prefetch.net/blog/index.php/2011/07/11/using-netstat-and-dropwatch-to-observe-packet-loss-on-linux-servers/
https://serverfault.com/questions/561107/how-to-find-out-the-reasons-why-the-network-interface-is-dropping-packets - 再看这篇 https://scriptcrunch.com/solved-jenkins-intermittent-slave-went-offline-build/; 这篇文章认为是操作系统的scatter/gather IO 引发的丢包,需要关闭网卡驱动的scatter gather IO功能,经我测试无效(
sudo ethtool -K eth0 sg off
)。在ubuntu社区中有人也提供了这种解决办法:https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1317811, 这整篇讨论建议精读。 - 如果你敲入命令
dmsg | grep rocket
输出了类似这样的xen_netfront: xennet: skb rides the rocket: 19 slots
skb乘火箭飞走了??为啥是19呢? 这里有位大侠使用内核调试工具,我是看不太懂:http://www.brendangregg.com/blog/2014-09-11/perf-kernel-line-tracing.html 文章解释为是xen虚拟网卡驱动的TSO(tcp-segmentation-offload )bug,得关闭它sudo ethtool -K eth0 tso off
,什么是TSO,首先要明白一点,硬件能直接做的事情就交给硬件做,硬件一定比软件快;绿盟科技这篇文章解说了下:http://blog.nsfocus.net/network-packets-analysis-nic-offload/ 我引用一部分:
TSO 从名字来看很直观,就是把tcp分段的过程转移到网卡中进行。当网卡支持TSO机制时,可以直接把不超过滑动窗口大小的payload下传给协议栈,即使数据长度大于MSS,也不会在TCP层进行分段,同样也不会进行IP分片,而是直接传送给网卡驱动,由网卡驱动进行tcp分段操作,并执行checksum计算和包头、帧头的生成工作。
最终解释为xen虚拟网卡驱动使用skb_linearize处理复合页上的packets的bug,在Linux 内核3.13.0-46.75修复了。所以你升级内核就行了,不会升级内核?卸载旧的自动发新的。
整个追踪这个问题学到了不少知识,我得好好理理.
最近又遇到一个问题:Apache HttpClient 4.5.2中三个Timeout为10000s,而恰好程序等待了10000s = 2h 46min 40s
对于Linux Server网络问题诊断的补充
部分参考于:https://blog.51cto.com/11819159/2126061
数据包经过的所有地方都可能丢包,这个涉及的组件很多。从用户经过运营商到负载均衡器到服务主机。当然,出了问题大多时候是自己服务器的问题。从CPU,驱动程序,TCP/IP协议栈,内核限制,进程资源。
-
检查dev 和网卡设备层,是否有error和drop
cat /proc/net/dev
/proc/net/dev
The dev pseudo-file contains network device status information. This gives the number of received and sent packets, the number of errors and collisions and other basic statistics. These are used by the ifconfig(8) program to report device status.errors:由设备驱动程序检测到的发送或者接受错误的总数
drop:设备驱动程序丢弃包总数获取特定网卡和驱动的统计信息
sudo ethtool -S eth0
Queries the specified network device for NIC and driver-specific statistics.
每太弄明白这两个统计的区别,
但是我通过ethtool
可以看到无线网络 wlp9s0
有rx_dropped
不为0,但/proc/dev/stat
的drop
为0
还有ethtool
的rx_packets
和rx_bytes
小于stat的bytes
和packets
猜测,(基于无线网络不丢包是不可能的)ethtool
是统计的物理网卡本次开始工作的统计,而stat
是驱动层面从开机的统计。 -
观察tcp半连接队列和accept队列是否丢包
netstat -s | grep -i listen
645870725 times the listen queue of a socket overflowed
645990109 SYNs to LISTEN sockets ignored
查看具体数值
cat /proc/net/netstat | awk '/TcpExt/{print $20,$21}'