uwsgi выдает ошибку ввода-вывода, вызванную uwsgi_response_write_body_do разорванным каналом
Мое приложение - установка uwsgi+django. Я использую gevent для тестирования производительности и запускаю 1200 запросов одновременно. На этом этапе uwsgi выдаст ошибку ввода-вывода со следующим сообщением журнала:
uwsgi_response_write_body_do(): Broken pipe [core/writer.c line 260]
IOError: write error
Джанго 1.4.0
uwsgi: 1.9.13
питон: 2.6
Очередь прослушивания TCP: 1000
Какова причина этой ошибки сломанной трубы?
3 ответа
Это может произойти, когда NGINX запустил запрос к uWSGI, но uWSGI слишком долго не отвечал, тогда NGINX закрывает соединение с uWSGI. Когда uWSGI наконец завершает работу, он пытается вернуть свой ответ NGINX, но NGINX ранее закрыл соединение, поэтому тогда uWSGI выдает ошибку ввода-вывода.
Так что это может означать, что процесс uWSGI занимает слишком много времени.
Обновить:
Режим harakiri от uWSGI может быть полезен для автоматического завершения таких длительных процессов, если вы хотите: https://uwsgi-docs.readthedocs.io/en/latest/FAQ.html. Возможно, вы не захотите Сделайте это, потому что процесс может завершить какой-то длинный запрос или что-то необходимое.
Эта ошибка означает, что клиент закрыл соединение до того, как uWSGI/Django отправит ответ. Обычно это вызвано таймаутом в браузере или веб-сервере.
Чтобы это исправить, вам нужно убедиться, что ваши настройки верны. Посмотрите, что все части вашего приложения (включая адаптеры базы данных) являются дружественными к Gevent. Если это не так, вы не получите никакого преимущества с Gevent, и это может даже привести к снижению производительности.
В дополнение к этому вам необходимо убедиться, что ваш сервер баз данных способен управлять 1200 одновременными подключениями. Если нет, возможно, игнорируются попытки подключения.
Теперь я не рекомендую это без вашего рассмотрения вашей ситуации. Но вы можете включить uwsgi_ignore_client_abort в значение "on". Если этот параметр включен, nginx будет сохранять прерванное соединение открытым, пока не вернется uwsgi. Почему я не рекомендую это полностью, потому что это означает, что соединение nginx теперь будет связано до завершения запроса. Но на самом деле поток uwsgi не был прерван, поэтому, по моему мнению, преждевременный прерывание соединения nginx не принесет вам много пользы.