ライブサーバークラスターの読み込み時間と応答コードを監視するために使用するシェルスクリプトがあります。 5分ごとに合計250回の反復が実行され、10台のサーバーと6つのサイトに分散されます。 -wフラグを指定してcurlを使用し、関連情報を返します。この情報は、シェルスクリプトによって解析されます。
curl -svw 'monitor_load_times %{time_total} %{http_code}' -b 'server=$server' -m 15 -o /dev/null $url 2>&1
この情報は、さまざまな応答を表示できるグラフ化スクリプトによって解析されます。ただし、curlは時々「000」の応答コードを返します。これが発生すると、多くの反復に分散されているにもかかわらず、一度に複数回発生するようです。
私が解決しようとしているのは、これが結果を歪めているクライアント側の問題であるか、それとも実際にサーバー全体の問題がクラスタ全体に影響していることを示しているかどうかです。 000は接続が切断されたことを意味しますか?その応答コードを持つカール反復に対応するデータベースエントリは、time_total値として「0.000」を返します。 curlがコード000を返すのを見つけた検索結果はすべて、サポートされていないHTTPSに関連していますが、テストURLはすべてHTTPです。
(500エラーの急上昇は、昨夜のサーバーに影響を与えた完全に無関係な問題です。)
応答000は、cURLが何らかの理由で実行に失敗したことを示しています。このような場合、想定を行うのではなく、cURL終了コードをテストする必要があります。終了コードとその意味の完全なリストについては、 curlマンページ の「終了コード」セクションを参照してください。
$ curl -w "%{http_code}\n" http://example.invalid/ ; echo "Exit code: $?"
000
curl: (6) Could not resolve Host: example.invalid
Exit code: 6
(ILIVによる回答)
$ curl -w "%{http_code}\n" http://localhost:81/ ; echo "Exit code: $?"
000
curl: (7) Failed to connect to localhost port 81: Connection refused
Exit code: 7
$ curl -w "%{http_code}\n" -m 5 http://10.255.255.1/ ; echo "Exit code: $?"
000
curl: (28) Connection timed out after 5001 milliseconds
Exit code: 28
(Arunによる回答)
偽のサーバーを起動します。
$ nc -l -p 65535 & <<EOF
> HTTP/1.1 000 Fake Status Code
> Content-Length: 0
> Connection: close
>
> EOF
クライアントのリクエスト:
$ curl -w "%{http_code}\n" http://localhost:65535/ ; echo "Exit code: $?"
000
Exit code: 0
なぜこれが現実の世界で起こるのかはわかりませんが、ちょっと。 cURLが有効なステータスコードをまったく取得しない場合、200と見なされます。
000は、curlがDNS名を解決できなかったことを意味します。
$ curl -I -w "%{http_code}" https://zxcvsitename.com curl: (6) Could not resolve Host: zxcvsitename.com; Unknown error 000
このコードはほとんどすぐに返されることに注意してください。
Curl 000はタイムアウトを意味します。-タイムアウトは、ファイアウォールがリクエストの送信をブロックした結果である可能性があります。 -タイムアウトは、接続の切断の結果である可能性があります。 -タイムアウトは、DNS名の解決に失敗した結果である可能性もあります。
私はcurlで広範囲に働き、すべての応答コードに細心の注意を払います-000はその1つです。私の場合、上記の3つの条件のいずれかが満たされたときに000応答コードを受け取りました。
実際、私は(私が話すように)現在実行しているカールスクリプトで2000以上のURIをテストしています。スクリプトの例(ipsとドメイン名を非表示):
Response code from <currentip> to http://<domain_name>/category/gifts/category1/category2/12142/ = 200
Response code from <currentip> to http://<domain_name>/category/gifts/category1/category2/12143/ = 000
Response code from <currentip> to http://<domain_name>/category/gifts/category1/category2/12144/ = 000
Response code from <currentip> to http://<domain_name>/category/gifts/category1/category2/12145/ = 200
上記に気付いた場合、domain_nameはすべてのURLで同じです。一部のURLは000をスローしますが、他のURLは200をスローします。これは、DNSの問題ではないことを明確に示しています。
戻って個々のURLにヒットして000をスローすると、通常は200になります。この場合、000の理由は接続の問題です。