최근 서버 이동 후, 우리는 한 서버가 뚜렷한 이유 없이 네트워크 연결을 끊었다가 몇 초 또는 몇 분 내에 다시 연결되는 이상한 문제를 해결하기 위해 노력하고 있습니다. /var/log/messages
dmesg
아니면 흔적이 없습니다 mcelogs
. 이 문제를 디버깅하는 동안 나는 발행했습니다.
strace ping google.com
그것은 돌아온다
= -1 EAGAIN (Resource temporarily unavailable)
이 메시지가 무엇을 의미하는지 설명할 수 있는 사람이 있나요? ping
google.com을 구문 분석하지만 마치 방화벽에서 ping 응답이 거부로 설정된 것처럼 아무런 응답도 표시되지 않습니다.
sendmsg(3, {msg_name(16)={sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr("74.125.131.113")}, msg_iov(1)=[{"\10\0005\321?i\0\3v\301lT\0\0\0\0\335\331\3\0\0\0\0\0\20\21\22\23\24\25\26\27"..., 64}], msg_controllen=0, msg_flags=0}, 0) = 64
recvmsg(3, 0x7fffd48b9cc0, 0) = -1 EAGAIN (Resource temporarily unavailable)
추신: 이것은 RHEL 6.5를 실행하는 VMware VM입니다.
답변1
소켓(또는 파이프 또는 기타 비동기 소스)에서 데이터를 읽을 때 데이터를 즉시 사용할 수 없는 경우 어떻게 될지 선택할 수 있습니다. 일부 데이터가 도착할 때까지 읽기를 기다리거나(차단 모드) 오류와 함께 즉시 반환되도록 할 수 있습니다(비차단 모드).
두 번째 경우에 반환된 오류는 입니다 EAGAIN
.
따라서 이 EAGAIN
오류는 실제로 아무 것도 알려주지 않습니다. 그것은 단지 recvmsg()
그 당시에 받아들일 것이 아무것도 없다는 것을 의미합니다.