当心avahi-daemon

我们的系统时不时报

java.net.ConnectException: Connection timed out
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
        at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
        at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
        at java.net.Socket.connect(Socket.java:529)
        at java.net.Socket.connect(Socket.java:478)
        at java.net.Socket.<init>(Socket.java:375)
        at java.net.Socket.<init>(Socket.java:189)

这样的错误日志。被连接的server 系统负载不是很高,资源也足够,一时找不到原因。分析日志出现的时间:

$ grep “router socket IO Exception” router.log |awk ‘{print $2}’|sort -u
10:15:05,155
10:15:13,467
12:15:06,129
12:15:13,419
13:15:06,012
13:15:06,148
13:15:07,168
13:15:08,812
13:15:11,781
13:15:14,154
13:15:14,510
15:15:05,306
15:15:05,639
16:15:06,709
16:15:07,083
16:15:07,447
16:15:07,850
16:15:07,915
16:15:08,888
16:15:10,359
16:15:12,553
16:15:14,246
17:15:08,219
17:15:08,239
17:15:09,055
17:15:12,094
18:15:06,008
18:15:08,460
18:15:10,428
18:15:12,057
18:15:12,692
19:15:11,374
19:15:12,061
19:15:12,089
19:15:13,746
21:15:08,496
21:15:11,356
21:15:12,393
21:15:13,462
21:15:14,495

都出现在神秘的15分钟,应该是定时jobs在跑导致的。检查crontab以及jboss的jobs任务,也找不到。最后只能tcpdump在14-16分抓包分析。得知 server 启用了avahi-daemon服务,每隔一个小时发送一个MDNS的广播包,会造成 server 无回应20秒左右。

avahi-daemon 是什么? 来自 http://packages.debian.org/zh-cn/wheezy/avahi-daemon 的解释: Avahi 是一个完全基于 LGPL 框架下的多播 DNS 服务搜寻工具。它能让程序发布或者 发现在本地网络中的服务或者主机,而无需特殊配置。例如,您可以连入一个网络,然后 立刻发现可用于打印的打印机,可查看的文件或者可聊天的朋友。本软件包包含 Avahi 守护进程,它将在网络中展示您的机器,并允许其他应用程序发 布和分析 mDNS/DNS-SD 记录.

服务器上最好把 avahi-daemon 关闭掉。

If you enjoyed this post, make sure you subscribe to my RSS feed!

Leave a Reply

Your email address will not be published. Required fields are marked *