Описание
У меня есть экземпляр AWS ec2 (ubuntu 16), который запускает приложение Python. В котором я называю некоторые API Facebook Account Kit, а также API Google Play Store. Все они работают отлично, пока я не перезагружу экземпляр за две недели до этого.
После перезагрузки запросы занимают более 5 минут, что совершенно неприемлемо. Мне нужно вручную установить время ожидания более 10 минут, чтобы запрос был завершен.
Проблема возникает только на одном из моих серверов, я работаю в той же среде на другом сервере, она отлично работает с временем отклика менее секунды.
Временно исправить
Чтобы временно устранить проблему, я использую прокси-сервер для завершения запроса.
- API-сервер (сервер с проблемой тайм-аута)
- прокси-сервер запускает скрипт Python и возвращает результат
- API-сервер (сервер с проблемой тайм-аута) возвращает ответ клиенту
Ситуация
- Я пытался использовать curl на сервере API, у него также время отклика меньше 1 секунды.
- Я пробовал в среде python, используя
requests
, и время отклика ужасное, выше 5 минут.
- Если я установлю заголовок
{'Connection' : 'keep-alive' }
, второй запрос будет нормальным.
- Я включил ведение журнала, и, похоже, запрос застрял при установлении соединения с пунктом назначения.
- Я пытался с API, который я написал, и время отклика также ужасно, выше 5 минут.
Текущий код
Запрос с медленным временем отклика.
url_get_access_token = "https://graph.accountkit.com/v1.3/access_token?grant_type=authorization_code&code=%s&access_token=AA|%s|%s"
url_get_access_token = url_get_access_token % (token, self.facebook_app_id, self.facebook_account_kit_scert)
response = requests.get(url_get_access_token)
body = response.json()
Прокси-сервер, о котором я упоминал выше, является еще одним экземпляром в той же подсети, но я звоню с DNS-сервера.
response = requests.get("https://proxyserver.com/somepath", params={})
Поскольку это влияет только на один из серверов, это будет проблемой DNS или конфигурацией AWS? Пожалуйста, помогите, спасибо.
Обновление
В результате синхронизированных завитков кажется, что вызов с iPv6 занимает намного больше времени.
$ time curl -4 -s https://graph.accountkit.com/v1.3
$ time curl -6 -s https://graph.accountkit.com/v1.3
1064 * ipv4 *
real 0m0.665s
user 0m0.068s
sys 0m0.020s
ipv6
real 2m7.180s
user 0m0.008s
sys 0m0.000s