Linux syscall recvmsg()会定期挂起

Linux syscall recvmsg()会定期挂起,linux,networking,centos,kernel,bind9,Linux,Networking,Centos,Kernel,Bind9,这也可能与BIND9 DNS服务器的问题有关。我发现有时服务器每秒的查询数突然变为0,然后 然后持续几秒钟,通常超过10秒。但是, 传入DNS查询请求的数量不会下降到每年500个以下 第二 我向bind9src添加了一些调试日志,然后再次运行,然后我注意到 线程将等待几秒钟,然后recvmsg()返回, 定期地挂起时,Recv-Q变满。 版本是BIND-9.9.6,但不幸的是当我切换到BIND时- 9.9.9-P4,问题仍然存在 然后我试着 另一个DNS服务器是用Golang编写的,我注意到这个

这也可能与BIND9 DNS服务器的问题有关。我发现有时服务器每秒的查询数突然变为0,然后 然后持续几秒钟,通常超过10秒。但是, 传入DNS查询请求的数量不会下降到每年500个以下 第二

我向bind9src添加了一些调试日志,然后再次运行,然后我注意到 线程将等待几秒钟,然后recvmsg()返回, 定期地挂起时,Recv-Q变满。 版本是BIND-9.9.6,但不幸的是当我切换到BIND时- 9.9.9-P4,问题仍然存在

然后我试着 另一个DNS服务器是用Golang编写的,我注意到这个问题从未出现过 来了。查询速率保持了应有的稳定

我认为服务器使用的Golang的ReadFromUDP()函数只是包装了系统调用recvfrom(),并且那里的recvfrom()也不会阻塞。但是ReadFromUDP()似乎一直在尝试recvfrom(),而BIND9正在使用epoll。当数据 读取成功后,ReadFromUDP()将返回。我不确定这两个案例之间是否有任何区别

我使用的是CentOs 6.4,内核版本是2.6.32-358-el6.x86_64

有没有人遇到过这样的情况 什么问题