Jenkin slave 老掉线?--skb rides the rocket: 19 slots

  1. 先看这篇https://wiki.jenkins.io/display/JENKINS/Remoting+issue
    初步了解Jenkins Master和Slave通信原理,此时需要查看日志,master日志默认位于/var/lib/jenkins/log/slaves/xxxNode/ 节点异常日志位于节点的工作目录;是Ping thread 检测到延迟过高导致Jenkins从节点掉线吗?这样的话,很可能是二者直接通信问题。
  2. 对于两节点间通信问题原因就比较多了;当然初步的套路是有的,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
  3. 再看这篇 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, 这整篇讨论建议精读
  4. 如果你敲入命令 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/statdrop为0
    还有ethtoolrx_packetsrx_bytes小于stat的bytespackets
    猜测,(基于无线网络不丢包是不可能的)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}'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值