6

У меня есть сценарий оболочки, который я использую для контроля времени загрузки и кодов ответов на моем живом кластере серверов. Он выполняет 250 итераций каждые 5 минут, распределенных по 10 серверам и 6 сайтам. Он использует curl с флагом -w для возврата соответствующей информации, которая затем анализируется моим сценарием оболочки:

curl -svw 'monitor_load_times %{time_total} %{http_code}' -b 'server=$server' -m 15 -o /dev/null $url 2>&1

Затем эта информация анализируется графическим скриптом, который может отображать несколько разных ответов. Тем не менее, curl будет иногда возвращать код ответа "000". Когда это происходит, кажется, что это происходит несколько раз одновременно, несмотря на то, что оно распределено по нескольким итерациям:

График кода ошибки

Я пытаюсь решить, является ли это проблемой на стороне клиента, которая искажает мои результаты, или если это фактически указывает на проблему на стороне сервера, затрагивающую весь мой кластер. 000 означает, что соединение было разорвано? Записи базы данных, соответствующие итерациям скручивания с этим кодом ответа, возвращают «0,000» для значения time_total. Все результаты поиска, которые я нашел для curl, возвращающего код 000, связаны с тем, что HTTPS не поддерживается, но все мои тестовые URL-адреса являются HTTP.

(Скачок 500 ошибок - совершенно не связанная с этим проблема, которая затронула мои серверы прошлой ночью.)

3 ответа3

11

Ответ 000 указывает на то, что cURL не удалось выполнить по какой-то причине. В таком случае вы должны проверить код выхода cURL, а не делать предположения. См. Раздел "Коды выхода" справочной страницы curl для получения полного списка кодов выхода и их значений.

Ошибка разрешения DNS (6)

$ curl -w "%{http_code}\n" http://example.invalid/ ; echo "Exit code: $?"
000
curl: (6) Could not resolve host: example.invalid
Exit code: 6

(Как ответил ILIV)

Отказ в соединении (7)

$ 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

Тайм-аут соединения (28)

$ 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

(Как ответил Арун)

Сервер фактически возвращает 000 по какой-то причине (0)

Запустите фальшивый сервер:

$ 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.

1

Я считаю, что 000 означает, что curl не удалось разрешить DNS-имя:

$ curl -I -w "%{http_code}" https://zxcvsitename.com curl: (6) Could not resolve host: zxcvsitename.com; Unknown error 000

Обратите внимание, что он возвращает этот код практически сразу.

1

Curl 000 означает тайм-аут:- тайм-аут может быть результатом брандмауэра, блокирующего ваш запрос от выхода. - Тайм-аут может быть результатом разрыва соединения. - Тайм-аут также может быть результатом невозможности разрешить имя DNS.

Я много работал с curl и уделяю пристальное внимание всем кодам ответов - 000 - один из них. В моих случаях я получил код ответа 000, когда было выполнено любое из трех указанных выше условий.

На самом деле я в настоящее время запускаю (как я говорю) скрипт curl, тестирующий 2000+ Uris. Пример из моего скрипта (скрытие 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

Если вы заметили выше, имя_домена одинаково для всех URL. В то время как некоторые URL бросают 000, другие бросают 200, что явно означает, что это не проблема DNS.

Если я возвращаюсь и нажимаю на отдельный URL, бросающий 000, я обычно получаю 200. В этом случае причиной 000 является проблема подключения.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .