Как устранить задержку ядра приложения Google? - PullRequest
0 голосов
/ 06 апреля 2020

Наш проект работает в стандартной среде Google App Engine с автоматическим масштабированием, настроенным, как указано ниже. В приложении включены запросы на разогрев, и мы используем службу конечных точек Google. Тем не менее, я столкнулся с проблемой задержки в другом сценарии ios. Среда: Java 8 , тип экземпляра: F4_1G Конфигурация для автоматического масштабирования: min-экземпляров: 2 max-одновременных запросов: 80 min-pending-latency: 6s max -nding-latency: 10 с

Я тестировал с JMeter с конфигурацией отправки 85 асинхронных запросов с периодом разгона 10 секунд . Из журналов приложений я могу заметить, что appengine занимает много времени для обработки запроса. Ниже приведены вопросы, которые у меня есть

1. Большинство запросов не выполняются из-за превышения времени. На рисунке 1 мы видим, что запрос занимает 88,2 секунды. Я знаю, что автоматическое масштабирование AppEngine имеет ограничение по времени ожидания 60 секунд. Но мы настроили автомасштабирование как минимум с 2 экземплярами, и для max-instance ограничений нет. Экземпляр AppEngine должен обрабатывать запрос, в противном случае AppEngine должен масштабироваться для обработки запроса. Почему этого не происходит? Image_1

При увеличении размера запрос занимает 43,6 секунды. На рисунке 2 мы видим, что запрос пришел в 20: 27: 01: 663 IST, а первая строка выполнения API начинается в 20: 27: 40: 407 IST. Что происходит между временем? Могу ли я получить журнал за этот период? Image_2 После масштабирования последующие запросы также обрабатываются очень долго. Например, запрос API обычно выполняется в течение 2 секунд. На рисунке 3 мы можем заметить, что API занимает 42,4 секунды без процесса загрузки-запроса, а затем запрос приходит в 20: 27: 01: 728 IST. Первая строка выполнения API начинается в 20: 27: 40: 708 IST. Что происходит между временем? Image_3

1 Ответ

0 голосов
/ 06 апреля 2020

Я думаю, что это связано со временем выполнения Java 8, которое занимает много времени для развертывания нового экземпляра, поскольку java является тяжелым временем выполнения.

Время развертывания превышает 60 с, и ваши автоматические запросы будут закончилась тайм-аутом.

Я думаю, что вы можете улучшить свою стратегию эскалации, например, попытаться запустить службу с большим количеством экземпляров и добавить эту опцию " target_throughput_utilization ", чтобы начать повышение новый экземпляр до попадания в 80 одновременных запросов

документация гласит, что: «Когда количество одновременных запросов достигает значения, равного max-concurrent-messages times-target-throughput-utilization, планировщик запускает новый экземпляр . '

min-instances: 4 
max-concurrent-requests: 80
target_throughput_utilization:0.75
min-pending-latency: 6s 
max-pending-latency: 10s

В моем примере новый экземпляр запустится, когда фактический экземпляр будет иметь (80 X 0,75) 60 одновременных запросов

...