Рейтинг:0

Периодическая ошибка 500, вызванная psycopg2.OperationalError: не удалось перевести имя хоста

флаг de
Zev

20% запросов к нашему серверному приложению Django (развернутому на AWS с использованием ECS и Postgres RDS) выдают 500 ошибок. Глядя на журналы ECS, показаны различные связанные ошибки:

psycopg2.OperationalError: не удалось перевести имя хоста «abc.efg.us-east-1.rds.amazonaws.com» на адрес
OSError: [Errno 16] Устройство или ресурс занят
<встроенная функция getaddrinfo>) завершилась с ошибкой OSError.

Мы используем gunicorn и gevent для обслуживания нашего приложения:

gunicorn -t 1000 -k gevent -w 4 -b 0.0.0.0:8000 backend.wsgi

Patrick Mevzek avatar
флаг cn
Вы не говорите, какие именно серверы имен вы используете для разрешения имен. Во многих случаях ситуация значительно улучшится, если вы установите на тот же компьютер локальный кэширующий преобразователь, такой простой, как «несвязанный», чтобы иметь большую стабильность и производительность при разрешении DNS-запросов, особенно если они много раз повторяют одни и те же имена. ..
Zev avatar
флаг de
Zev
Мы используем Route53 для маршрутизации трафика в дистрибутив CloudFront, поэтому это awsdns. Они должны быть почти одинаковыми, поэтому кэширующий преобразователь имеет смысл.
Patrick Mevzek avatar
флаг cn
Я конкретно говорю о **рекурсивном** сервере имен, установленном как можно ближе (в идеале в том же поле), что и приложения, выполняющие вызовы DNS. По опыту, это улучшает ситуацию. Где и какие авторитетные серверы имен не имеют значения (пока вы не сможете доказать, что проблема действительно между рекурсивным и авторитетным, а не между приложением и рекурсивным)
Zev avatar
флаг de
Zev
Я предполагаю, что ответом на ваш первоначальный вопрос будет AmazonProvidedDNS. Спасибо за предложение. Мне нужно больше покопаться в этой области и лучше понять ее, прежде чем что-либо изменять, но мне нравится звучание предложенного вами решения.
Рейтинг:0
флаг de
Zev

getaddrinfo это функция gevent, подробно описанная здесь: https://www.gevent.org/dns.html

В этих документах упоминается, что gevent предлагает 4 преобразователя. преобразователь по умолчанию «Родное разрешение имени хоста на основе потока» упоминает, что «были некоторые сообщения о длительных задержках, низкой производительности или даже зависаниях, особенно в долгоживущих программах, которые делают много-много DNS-запросов». И рекомендует переключать резолверы, если это произойдет с вами.

Мы изменили способ подачи нашего приложения на резольвер ares и не смогли воспроизвести проблему с тех пор:

GEVENT_RESOLVER=ares gunicorn -t 1000 -k gevent -w 4 -b 0.0.0.0:8000 backend.wsgi

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.