gethostbyname在Mac OS X上冻结并使用100%CPU

时间:2010-11-30 19:03:06

标签: macos sockets unix gethostbyname

我有一个程序可以打开几个套接字来监听和发送。我发现了一个非常奇怪的情况,到目前为止只在Mac OS X上,gethostbyname完全冻结了程序。

首先,我使用线程。其次,只有在我一次运行两个我的测试程序副本时才会出现问题。

第一个实例创建4个发送和4个接收套接字,然后它们开始相互发送流量。在我用于消息传递的网络库中,在接收端口打开后调用gethostbyname()。我发现当我开始测试程序的第二个实例时,在打开3个接收器后,最后一个只是卡在那里。

我已将问题缩小到gethostbyname的调用,似乎永远不会返回。 (请记住,到目前为止,每次调用gethostbyname都能正常工作。)此外,当它达到这一点时,测试程序的CPU使用率突然跳升到100%,好像有无限的在gethostbyname中循环。另外我不能用Ctrl-C进程,我必须从另一个终端杀死它。

显然,这种行为是不可接受的,即使它只发生在启动8个发送器/接收器对的极端情况下。 (4个进程一次,4个进入另一个进程。)有没有人见过这个,我怎么能避免它?

顺便说一句,唯一测试的其他平台是Linux(Ubuntu 10.04),运行得很好。

1 个答案:

答案 0 :(得分:0)

听起来你可能被这个Oracle Java Bug蜇了。我的解决方法是将Mac的主机名添加到/ etc / hosts

sudo bash -c "echo 127.0.0.1 $HOSTNAME >> /etc/hosts"