Масштабирование GAE, когда использование памяти превышает лимит - PullRequest
0 голосов
/ 13 октября 2018

Я использую GAE для тяжелых задач с высокими требованиями к памяти.И я получил следующую ошибку:

Exceeded soft memory limit of 512 MB with 561 MB 
after servicing 3 requests total. 
Consider setting a larger instance class in app.yaml.

Поскольку задачи стоят дорого, я предполагаю, что два приложения могут работать в одном экземпляре.Но это не работает для трех приложений:

While handling this request, 
the process that handled this request was found to be using 
too much memory and was terminated. 
This is likely to cause a new process to be used 
for the next request to your application. 
If you see this message frequently, 
you may have a memory leak in your application or may be 
using an instance with insufficient memory.
Consider setting a larger instance class in app.yaml.

Мои текущие настройки:

runtime: nodejs8
instance_class: B4
basic_scaling:
max_instances: 10
idle_timeout: 1m

Я также пробовал с этими настройками:

runtime: nodejs8
instance_class: F4
automatic_scaling:
  target_cpu_utilization: 0.5
  max_instances: 10

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

Как можно выполнить масштабирование, когда использование памяти превышает лимит?

1 Ответ

0 голосов
/ 13 октября 2018

Решения динамического планировщика экземпляров не основаны на использовании памяти экземпляра.Из Масштабирование динамических экземпляров :

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

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

Что не ясно, так это высокий уровень использования памяти из-за одного запроса илисвязанные с несколькими одновременными запросами - то есть запросы, попадающие в экземпляр одновременно (или слишком близко друг к другу, чтобы механизм освобождения памяти, если таковой имеется, не отставал).Но это может быть определено экспериментально.

Если множественные одновременные входящие запросы приводят к тому, что использование памяти экземпляра превышает пороговое значение, вы можете попытаться справиться с ним, управляя ручками target_throughput_utilization и / или max_concurrent_requests:

Целевое использование пропускной способности

Устанавливает порог пропускной способности для числа одновременных запросов, после которого будет запущено больше экземпляров для обработки трафика.

Максимальное количество одновременных запросов

Устанавливает максимальное количество одновременных запросов, которые экземпляр может принять до того, как планировщик запускает новый экземпляр.

Если предел памяти достигает даже безэкземпляр, обрабатывающий несколько запросов одновременно (или, если вы хотите иметь возможность обслуживать больше экземпляров одновременно - как правило, для снижения затрат), единственный способ решить его - использовать классы экземпляров с большим объемом памяти.Классы F4 и B4, которые вы пробовали, имеют 512M, попробуйте F4_1G / B4_1G, оба из которых имеют 1G.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...