最近のサーバーの移動後、私たちは、明確な理由なく、1つのサーバーがネットワークから切断され、数秒または数分で再接続される奇妙な問題を解決しようとしています。/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)
PS:これはRHEL 6.5を実行するVMware VMです。
答え1
ソケット(またはパイプまたは他の非同期ソース)からデータを読み取るときにデータがすぐに利用できない場合はどうなるかを選択できます。一部のデータが到着するまで読み取りを待つか(ブロックモード)、エラーですぐに返すことができます(非ブロックモード)。
2番目の場合に返されるエラーはですEAGAIN
。
したがって、このEAGAIN
エラーは実際には何も知らせません。それはただrecvmsg()
その時に受け入れることが何もないことを意味します。