Зависает система электронного документооборота TESSA

Зависает система электронного документооборота TESSA

Tessa logoДобрый день! Уважаемые читатели и гости одного из крупнейших IT блогов рунета Pyatilistnik.org. В прошлый раз мы с вами разобрали назначение технологии VLAN. Сегодня мы с вами разберем ситуацию, при которой зависает сервер с системой электронного документооборота TESSA. В России она очень часто используется для оптимизации бизнес процессов в средних и крупных компаниях. Уверен, что это исключительный случай из-за бага, но вы как администратор, должны знать порядок действий, как из него выходить, в своей зоне ответственности.

Описание проблемы

Есть виртуальная машина с Windows Server 2016 на которой крутится TESSA 3.2. В какой-то момент сервис перестает отвечать, но виртуальная машина не зависает. Зайдя на сервер и открыв диспетчер задач, я обнаружил, что в системе есть огромное количество процессов Chronos.exe и порожденных от него фоновых процессов conhost.exe.

chronos.exe

conhost.exe

У меня настроена система мониторинга Zabbix, где посмотрев, график я увидел, что явно есть протекание памяти в Tessa, это видно из графика, в какой-то момент память начинает падать, потом перезагрузка сервера и все повторяется со временем.

Tessa утечка памяти

Если открыть логи Windows, то можно обнаружить вот такие события:

Событие Application Error ID 1000: Faulting application name: Chronos.exe, version: 3.2.0.0, time stamp: 0xc08eb4d4
Faulting module name: KERNELBASE.dll, version: 10.0.14393.2273, time stamp: 0x5ae408f8
Exception code: 0xe0434352
Fault offset: 0x0000000000033c58
Faulting process id: 0xc674
Faulting application start time: 0x01d5327e46102347
Faulting application path: C:\tessa\Chronos\Chronos.exe
Faulting module path: C:\Windows\System32\KERNELBASE.dll
Report Id: 60f90a23-477f-48e6-af00-877382798849
Faulting package full name:
Faulting package-relative application ID:

Событие Application Error ID 1000 Exception code: 0xe0434352

Событие Application Error ID 1000: Faulting application name: Chronos.exe, version: 3.2.0.0, time stamp: 0xc08eb4d4
Faulting module name: clr.dll, version: 4.7.3062.0, time stamp: 0x5ab9567c
Exception code: 0xc00000fd
Fault offset: 0x0000000000003167
Faulting process id: 0x76fc
Faulting application start time: 0x01d5327e22506232
Faulting application path: C:\tessa\Chronos\Chronos.exe
Faulting module path: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll
Report Id: f212247e-4ee3-4540-872e-7189ebd4b8eb
Faulting package full name:
Faulting package-relative application ID:

Событие Application Error ID 1000 Exception code: 0xc00000fd

Событие Application Error ID 1000: Faulting application name: Chronos.exe, version: 3.2.0.0, time stamp: 0xc08eb4d4
Faulting module name: clr.dll, version: 4.7.3062.0, time stamp: 0x5ab9567c
Exception code: 0xc0000005
Fault offset: 0x00000000000e5315
Faulting process id: 0xc428
Faulting application start time: 0x01d5327e106e6d0a
Faulting application path: C:\tessa\Chronos\Chronos.exe
Faulting module path: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll
Report Id: fca6579a-d9e7-4760-ab09-42571b207497
Faulting package full name:
Faulting package-relative application ID:

Событие Application Error ID 1000 Exception code: 0xc0000005

.NET Runtime код события 1026: Application: Chronos.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.OutOfMemoryException
at System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1[[System.Threading.Tasks.VoidTaskResult, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].AwaitUnsafeOnCompleted[[System.Runtime.CompilerServices.TaskAwaiter, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[Chronos.Platform.Processes.CommandLineProcessHost+<OnChildStartedInternal>d__22, Chronos.Platform, Version=3.2.0.0, Culture=neutral, PublicKeyToken=null]](System.Runtime.CompilerServices.TaskAwaiter ByRef, <OnChildStartedInternal>d__22 ByRef)
at Chronos.Platform.Processes.CommandLineProcessHost+<OnChildStartedInternal>d__22.MoveNext()
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task)
at Chronos.Platform.Processes.CommandLineProcessHost+<StartAsync>d__20.MoveNext()

Exception Info: System.AggregateException
at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean)
at System.Threading.Tasks.Task.Wait(Int32, System.Threading.CancellationToken)
at Chronos.Program.RunConsoleApplication(System.String[])
at Chronos.Program.Main(System.String[])

.NET Runtime код события 1026: Application: Chronos.exe

.NET Runtime код события 1026: Application: Chronos.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.OutOfMemoryException
at Chronos.Platform.Processes.CommandLineProcessHost+<StartAsync>d__20.MoveNext()
at System.Runtime.CompilerServices.AsyncTaskMethodBuilder.Start[[Chronos.Platform.Processes.CommandLineProcessHost+<StartAsync>d__20, Chronos.Platform, Version=3.2.0.0, Culture=neutral, PublicKeyToken=null]](<StartAsync>d__20 ByRef)
at Chronos.Platform.Processes.CommandLineProcessHost.StartAsync(System.String[])
at Chronos.Program.RunConsoleApplication(System.String[])
at Chronos.Program.Main(System.String[])

.NET Runtime код события 1026: Application: Chronos.exe

Что такое Chronos?

Chronos.exe - это сервис необходимый для Tessa и е компонентов. Он нужен для расчета замещений, почтовых рассылок и уведомлений (https://mytessa.ru/docs/InstallationGuide/InstallationGuide.html#InstallChronos).

Как решить проблему с недоступностью Tessa

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

Get-Process Chronos | Where {$_.starttime -lt $((Get-Date).AddMinutes(-10))} | select name, id, starttime | Stop-Process -Force

Далее я для удобства свой скрипт PowerShell конвертирую в EXE, дабы не менять политику безопасности ExecutionPolicy.

Далее нам необходимо создать в библиотеке планировщика заданий новую задачу.

Создание задачи в планировщике Windows

Задаем имя нашей задачи. Выставляем, что запускаться она будет от имени "СИСТЕМА", так де поставьте галку "Выполнить с наивысшими правами".

Настройка задачи в планировщике Windows

Переходим на вкладку "Тригеры", где создаем новый. Выставляем тип "Ежедневно", ставим галку "Повторять задачу каждые 10 минут" в течении "бесконечно"

Настройка тригера в планировщике Windows

Идем на вкладку действия и создаем новое. Через обзор указываем путь до вашего EXE и сохраняем настройки.

настройка действия в планировщике Windows

Теперь до выполнения тригера я открываю консоль PowerShell и выполняю команду:

Get-Process chronos

В итоге получаю все текущие процессы Chronos.exe и через 10 минут повторяю команды, где вижу, что PID разные у процессов Chronos.exe, что говорит, о том, что скрипт успешно отработал.

Перезапуск процесса Chrono.exe

Теперь если посмотреть новый график после внедрения скрипта, видно, что память не утекает. Так же попутно мне еще пришлось на сервере решить ошибку 10016.

Исправление протекания ОЗУ в Tessa

На этом у меня все, с вами был Иван Семин автор и создатель IT портала Pyatilistnik.org.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *