2016-08-19 4 views
1

Я испытываю снижение производительности при развертывании моего приложения в GAE. Например, запрос GET, который занимает около 190 мс на локальном хосте, занимает 2000 мс при развертывании в GAE. enter image description hereGAE Производительность с запросами Datastore

Как видно из отчета Traces, сам запрос занимает всего 30 мс, но время, проведенное в сети, велико. Не было одновременных запросов, и мой экземпляр - это тип F1. Я пробовал это несколько раз, и 2000 мс, похоже, является средним временем для этого запроса. Любые идеи, на что я должен смотреть?

+1

в общем случае не следует сравнивать производительность на локальном сервере с тем, что на GAE-GAE производительность зависит от класса экземпляра и обычно ниже, чем даже умеренно мощные ноутбуки в эти дни. Плюсы задержки локальной сети обычно невелики по сравнению с GAE –

+0

Работает ли ваш экземпляр при выполнении этого вызова? В журналах появится сообщение с надписью «Этот запрос вызвал запуск нового экземпляра ...». –

+0

Да, экземпляр работает –

ответ

1

Трассировка не будет записывать «время в сети», как я думаю, вы думаете. Он начинается, когда запрос достигает вашего сервера и заканчивается, когда ваш сервер завершает его обработку. Задержка сети между клиентом и сервером не записывается.

Поскольку первый RPC составляет около 1,9 секунды в запросе, он показывает, что все время тратится на ваше приложение. Не ожидайте ввода IO в хранилище данных или memcache, но только ваш сервер работает на локальном компьютере. Моя первая мысль была такой же, как у Андрея в комментариях: она выглядит как след от первого запроса к экземпляру, где он может потратить много времени на инициализацию вашего сервера. Пожалуйста, повторите проверку, чтобы убедиться, что это не так.

После этого мой следующий шаг будет заключаться в том, чтобы сузить точно, какая часть кода занимает так много времени. Вы можете сделать это с протоколированием в разных точках вашего кода обработки запроса. Вы также можете использовать некоторые подсказки, используя Stackdriver Debugger, который является очень гладким инструментом.

+0

Большое спасибо за разъяснение, что для меня! Я дважды проверял, экземпляр запущен и никакой другой экземпляр не был запущен. Это видно из поля журнала запросов: load_request = 0. Если это было 1, то да, нужно было запустить экземпляр. Я вернусь после дополнительной отладки. –