2010-11-30 4 views
0

몇 개의 소켓을 열어 수신 및 전송하는 프로그램이 있습니다. gethostbyname이 프로그램을 완전히 정지시킨 Mac OS X에서만 아주 이상한 상태를 발견했습니다.gethostbyname은 동결되어 Mac OS X에서 100 % CPU를 사용합니다.

우선, 스레드를 사용하여 이 아닌입니다. 둘째로, 두 개의 테스트 프로그램 복사본을 동시에 두 번 실행하면 문제가 발생합니다.

첫 번째 인스턴스는 4 개의 송신 소켓과 4 개의 수신 소켓을 생성 한 다음 서로 트래픽을 보내기 시작합니다. 메시징에 사용중인 네트워크 라이브러리에서 수신 포트가 열린 직후 gethostbyname()이 호출됩니다. 필자는 테스트 프로그램의 두 번째 인스턴스를 시작했을 때 3 개의 리시버를 열고 나서 마지막 테스트가 시작되었다는 것을 알았습니다.

gethostbyname으로 전화를 걸어 문제를 좁혔습니다. 은 결코을 반환하지 않습니다. (이 시점까지는 gethostbyname을 호출 할 때마다 정상적으로 작동 함을 명심하십시오.) 또한이 시점에 도달하면 갑자기 gethostbyname에 무한 루프가있는 것처럼 테스트 프로그램의 CPU 사용량이 100 %로 점프합니다. 또한 프로세스를 Ctrl-C 할 수 없기 때문에 다른 터미널에서 프로세스를 종료해야합니다.

분명히이 동작은 8 개의 발신자/수신자 쌍을 시작하는 극단적 인 경우에만 발생한다고해도 받아 들일 수 없습니다. (한 번에 4 번, 다른 4 번.) 전에 이걸 본 사람이 있습니까? 어떻게 피할 수 있습니까?

다른 플랫폼으로 테스트 한 유일한 방법은 Linux (Ubuntu 10.04)입니다.이 플랫폼은 잘 실행됩니다.

+1

이 문제는 모든 Mac에서 발생합니까? 후자의 경우, 아마도 Mac에 네트워킹 구성 문제가 있습니다. –

+0

난 단지 하나의 맥에서 테스트했습니다. 제안 주셔서 감사합니다, 나는 다른 시도합니다. – Steve

+0

코드를 볼 수 있습니까? 다른 날에는 무한정으로 읽히지 만 (실제로는 다른 곳에서는 무한 루프였습니다) 버그가있었습니다. CPU가 100 %로 점프하면 무한 논 블로킹 루프가있는 것처럼 들립니다. – AlastairG

답변

0

당신이이 Oracle Java Bug에 찔렸을 수도 있습니다. 제 해결 방법은 내 Mac의 호스트 이름을/etc/hosts에 추가하는 것이 었습니다.

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