Выполнение рабочего процесса бесконечно зацикливается на таймере ожидания - PullRequest
0 голосов
/ 22 ноября 2018

У нас есть рабочий процесс, который выполняет задачу для проверки записи в БД, когда данные не найдены, он ждет минуту и ​​выполняет задачу.Ниже приведен отрывок из нашего рабочего процесса.

<intermediateCatchEvent id="BHTimer" name="Wait 1 Minute">
  <incoming>BHNotActive</incoming>
  <outgoing>IsTickOpen</outgoing>
  <timerEventDefinition>
    <timeDuration xsi:type="tFormalExpression">PT1M</timeDuration>
  </timerEventDefinition>
</intermediateCatchEvent>

Мы заметили, что эта задача продолжает выполняться бесконечно, даже когда добавляется запись в БД.Как ни странно, частота выполнения задачи изменяется от 1 минуты до ~ 200 мс, что приводит к накоплению миллионов записей в таблице ACT_HI_ACTINST.Ниже приведена таблица данных статистики одного из многих таких процессов в нашей системе.

Через несколько секунд событие было выполнено тысячи раз и продолжается вечно, создавая миллионы записей процесса для одного и того же задания в таблицах базы данных «ACT_HI_ACTINST» и «ACT_RU_EXECUTION».

Выполнение запроса ниже возвращает миллионы записей:
1. выберите * из ACT_HI_ACTINST, где PROC_INST_ID_ = 'f33c539a-dfe2-11e8-9d30-0050569941b2';2. выберите * в ACT_RU_EXECUTION, где PROC_INST_ID_ = 'f33c539a-dfe2-11e8-9d30-0050569941b2';

Ниже приведена статистика таблиц activiti, когда мы получили проблемы с производительностью.

Имя таблицы: Количество записей

ACT_RU_EXECUTION: 3435162 ACT_RU_TASK: 318122 ACT_RU_IDENTITYLINK: 251334 ACT_RU_VARIABLE: 265008


Имя таблицы: Количество записей 1019 *1019* ACT_HI_IDENTITYLINK: 2526867 ACT_HI_PROCINST: 54564894 ACT_HI_ACTINST: 28169298 ACT_HI_TASKINST: 4769590 ACT_HI_VARINST: 8711507 Некоторые из этих процессов стали сиротами (процессы не были завершены), когда процессы не были завершены (процессы не были завершены).Еще одна вещь, которую мы заметили, - это сообщение об исключении в таблице act_ru_job для таких процессов - сообщение «JobEntity [id = 2786e249-dff6-11e8-a9c8-005056990bf2] было обновлено другой транзакцией одновременно» из столбца сообщения об исключении. У нас есть задание очистки для удаления данных, связанных с завершенными процессами (процессы, которые end_time_ заполнены в таблице act_hi_procinst, но эти процессы не удаляются, поскольку они никогда не заканчивают бесконечный цикл). Мы проверили наш рабочий процесс и не видим параллельных путей выполнения, поэтому мы не уверены, почему может возникнуть эта ошибка.Стоит отметить, что это развертывается в кластерной среде из 2 узлов. Возможно, оба узла одновременно принимают процесс на выполнение. Наши вопросы: 1. Как activiti делает безопасный процесс выполнения кластера?есть ли какой-либо кластер-специфичный конфиг?2. Рабочие процессы, которые мы создали с помощью дизайнера, имеют недостатки?Пожалуйста, ознакомьтесь с приложенным фрагментом рабочего процесса, схемой и рекомендациями.Изображение диаграммы: https://i.stack.imgur.com/xMQWm.jpg. Если кому-то нужен полный XML-файл рабочего процесса, я также могу прикрепить его.Избегать из-за ограничения на количество слов. Рабочие процессы создаются с помощью BPMN Designer.Версия Activiti: 5.17.0, база данных: Oracle, веб-сервер: Tomcat Это вызывает серьезные проблемы с производительностью в нашей производственной среде, любая помощь в решении этой проблемы высоко ценится.

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