Ошибка обработчика ядра приложения во время пакета - PullRequest
0 голосов
/ 28 июня 2018

У меня вопрос по поводу сообщения об ошибке задачи, которое я получаю в App Engine при обработке большого количества задач.

Ошибка следующая:

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

И мой сервис настроен так:

<threadsafe>false</threadsafe>
<runtime>java8</runtime>

<system-properties>
    <property name="appengine.api.urlfetch.defaultDeadline" value="${urlfetch.deadline.override}"/>
    <property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/>
</system-properties>

<instance-class>F2</instance-class>
<automatic-scaling></automatic-scaling>

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

У вас есть какой-нибудь совет, как справиться с этой ситуацией? Установка высокого значения в min-pending-latency может иметь положительный эффект в этом вопросе?

Спасибо за помощь:)

1 Ответ

0 голосов
/ 28 июня 2018

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

Что нужно учитывать:

  • проверьте конфигурацию своей очереди, убедитесь, что она не является причиной узких мест при обработке задач
  • включить многопоточность (с <threadsafe>true</threadsafe> в вашей конфигурации), , если ваше приложение может допустить это (не всегда возможно). Или, если только этот конкретный обработчик задач / может быть сделан потокобезопасным, возможно, поместите его в отдельный сервис и сделайте его многопоточным. Это позволит одному экземпляру обрабатывать несколько задач одновременно, уменьшая количество необходимых экземпляров и, таким образом, уменьшая влияние времени запуска экземпляра
  • включить / увеличить число резервных / резидентных / незанятых экземпляров (используя элемент конфигурации масштабирования min-idle-instances) - эти экземпляры предназначены для обработки временных пиков запросов до тех пор, пока GAE не развернет новые динамические экземпляры для обрабатывать увеличение трафика (что занимает некоторое время, включая время запуска экземпляра), см. также Почему больше запросов направляется к новым (динамическим) экземплярам, ​​чем к резидентному экземпляру?
  • вовремя разбивайте задачи, чтобы избежать слишком резких пиков задач, используя TaskOptions.countdownMillis(long) / TaskOptions.etaMillis(long) или Используя DeferredTasks вместо рабочей службы , что уменьшает эффективное время, которое считается проведенным в очереди этими задачами, давая GAE шанс запустить достаточно экземпляров для их обработки
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...