Ловим зависшие инстансы

  • Автор темы Автор темы Phoenix78
  • Дата начала Дата начала
@Phoenix78, подскажи, пожалуйста: заметил, что иногда происходит зависон всего шаблона/шаблонов в зенке. Например, бывают иногда, что пол часа может вообще не выполняться шаблон, т. е. ни один из 40 потоков не работает по факту. Инстансы открыты, но в них не совершается никаких действий, т. е. просто висит всё.
И самое интересное, что я вообще ничего не меняю, но через минут 20-40 всё обратно отвисает - и продолжает работать как ни в чём ни бывало.
Прикрепляю скрин. В логе 20 минут нет ни одной записи. Такого просто никак быть не должно, т. е. шаблон длится максимум минут 5. Запущен в 40 потоков. В любом случае в лог пишется в норме куча сообщений. А тут - зависон на 20 минут.

Просто подумал, что может у тебя тоже похожие глюки бывали, ну или может какие идеи есть?

Репорты я, конечно, шлю всегда разработчикам. Но вот пока не разобрались с этой проблемой.

Я думал, что это именно инстансы зависали. А, по ходу дела, они не настолько часто зависали и проблема в чём-то ещё.

Спасибо!
Если не включена трасировка проектов, то ее надо велючить. При непонятных зависонах анализировать ее. Только анализ трасеров дал мне информацию, о происходящем внутри шаблонов.
 
  • Спасибо
Реакции: sociohacker
Если не включена трасировка проектов, то ее надо велючить. При непонятных зависонах анализировать ее. Только анализ трасеров дал мне информацию, о происходящем внутри шаблонов.

Никогда раньше не пользовался. Включил. Читаю справку по ней. Надеюсь, поможет.
Спасибо! :)
 
@Phoenix78

Сделал, как вы говорили - трассировка показала, что на одном и том же действии периодически происходит ДИКАЯ задержка:
12-02-2020 12:01:05.3559|In |f31ceba3-0cea-440b-a0ef-5f5fed30b9eb|
12-02-2020 12:19:24.6456|Good|f31ceba3-0cea-440b-a0ef-5f5fed30b9eb|1099293
12-02-2020 12:19:24.6866|Info|---Project Executed---|

и в другом файле трассировки похожее:
12-02-2020 12:02:51.0762|In |f31ceba3-0cea-440b-a0ef-5f5fed30b9eb|
12-02-2020 12:19:25.4844|Good|f31ceba3-0cea-440b-a0ef-5f5fed30b9eb|994412
12-02-2020 12:19:25.5254|Info|---Project Executed---|

Действие - сохранение профиля (см. скрин).

Короче, шаблон тупо замирает на ~20 минут на этом действии (не всегда, но раз 5-10 в сутки так происходит). Все потоки висят в это время, т. е. 20 мин ничего не работает по факту (хотя показывает 40 потоков активных).
Также замечал, что в такие моменты нагрузка на проц падает с 80-90 до 10%. Получается, что сервак 20 минут отдыхает, ожидая окончания этого действия.
Как думаете, это проблемы с железом? На сервере SSD накопитель стоит, неужели он сбоит? Конфигурация сервака:
2 x Intel Xeon E5 2630v4, 256 DDR4 RAM, 500 GB SSD
ОС: Windows Server 2016 Standard Edition (64 Bit)

Я пишу это всё в саппорт, конечно, но ваше мнение очень интересует :)

P. S.: мне неловко вас задалбывать, если честно. Если вас устроит, то можем как-то оформить это в формате платной консультации и дообщаться уже в мессенжерах, например. Я просто очень редко что-то на форумах спрашиваю и реально не знаю границ, где заканчивается "чисто человеческий совет" и начинается "работа по разбору чужих проблем" (и, соответственно, любой труд должен быть оплачен).
 

Вложения

  • problematic action.jpg
    problematic action.jpg
    120,2 KB · Просмотры: 340
  • Спасибо
Реакции: Phoenix78
с профилями вообще беда. они то слетают, то при сохранении шаблон виснет. ну тут ничего не сделаешь , только разработчиков долбать. Вы правильно делаете что шлете им рапорты, авось и починят. Я не проводил аналогий, но что то подсказывает что проблемы с сохранением профиля и падения инстанса, могут быть взаимосвязаны. Так как при сохранении профиля идет обращение к данным инстанса, со всеми вытекающими. Я у себя сейчас для рабочих шаблонов ввел режим поддержания регистрации на ресурсах. сохраняю профиль сразу после захода в аккаунт, но не чаще 1 раза в сутки. а до этого были такие же проблемы как и у вас. куча "работающих" шаблонов, а статистика на месте стоит. для нагуливания профилей конечно так не пойдет, там я перед сохранением профиля считываю имя вкладки с замером времени и если нет задержек , то сохраняю. сохраняю не стандартным кубиком, а методом который тут на форуме нашел, с проверкой размера профиля.
 
  • Спасибо
Реакции: sociohacker
с профилями вообще беда. они то слетают, то при сохранении шаблон виснет. ну тут ничего не сделаешь , только разработчиков долбать. Вы правильно делаете что шлете им рапорты, авось и починят. Я не проводил аналогий, но что то подсказывает что проблемы с сохранением профиля и падения инстанса, могут быть взаимосвязаны. Так как при сохранении профиля идет обращение к данным инстанса, со всеми вытекающими. Я у себя сейчас для рабочих шаблонов ввел режим поддержания регистрации на ресурсах. сохраняю профиль сразу после захода в аккаунт, но не чаще 1 раза в сутки. а до этого были такие же проблемы как и у вас. куча "работающих" шаблонов, а статистика на месте стоит. для нагуливания профилей конечно так не пойдет, там я перед сохранением профиля считываю имя вкладки с замером времени и если нет задержек , то сохраняю. сохраняю не стандартным кубиком, а методом который тут на форуме нашел, с проверкой размера профиля.

Значит, не 100%, что причина в железе, а может всё-таки в ЗП.

Да, тему про профили видел, вот эта вроде: https://zennolab.com/discussion/threads/peresoxranenie-profilej.73520/
Значит, буду прикручивать тот способ, что ещё делать.

Спасибо в который раз!
 
Приветствую) Спасибо за полезный сниппет.
Вопрос - что такое LoadWait ? Что он должен включать?

UPD:
C#:
Развернуть Свернуть Копировать
public static Tab LoadWait(this Tab tab, DateTime start, int TimeOut){
            DateTime now = DateTime.Now;
            if(TimeOut >= 360000) return false; else return true;
        }

Видимо, он как-то так должен выглядеть. Возможно я не прав
 
Последнее редактирование:
Приветствую) Спасибо за полезный сниппет.
Вопрос - что такое LoadWait ? Что он должен включать?

UPD:
C#:
Развернуть Свернуть Копировать
public static Tab LoadWait(this Tab tab, DateTime start, int TimeOut){
            DateTime now = DateTime.Now;
            if(TimeOut >= 360000) return false; else return true;
        }

Видимо, он как-то так должен выглядеть. Возможно я не прав
LoadWait ..... а где это такое ? я не увидел в своем тексте такого. и поиск по страницам ничего такого не выдал...
 
LoadWait ..... а где это такое ? я не увидел в своем тексте такого. и поиск по страницам ничего такого не выдал...
на скриншоте у вас в самом низу кода есть этот кусочек)
а в кубике C# она вызывается tab.NavigateWithCheck(url, DateTime.Now ,NavigateTimeout);
скрин сразу после этой фразы
 
на скриншоте у вас в самом низу кода есть этот кусочек)

скрин сразу после этой фразы
ааа, увидел... tab.LoadWait... ну да это простенькая функция ожидания загрузки страницы. там в цикле ожидается статус окончания загрузки или окончания времени загрузки.
 
ааа, увидел... tab.LoadWait... ну да это простенькая функция ожидания загрузки страницы. там в цикле ожидается статус окончания загрузки или окончания времени загрузки.
А чем она отличается от instance.ActiveTab.WaitDownloading? Сорри за офтоп.
 
Последнее редактирование:
А чем она отличается от instance.ActiveTab.WaitDownloading? Сорри за офтоп.
WaitDownloading невозможно прервать. лично у меня на паре сайтов загрузка переходила в бесконечный процесс. поэтому решил сделать свой контроль загрузки.
вообще вариантов контроля прогрузки сайта очень много. на форуме не раз подымали этот вопрос и обсуждали плюсы и минусы разных методов.
 
  • Спасибо
Реакции: one
C#:
Развернуть Свернуть Копировать
public static bool LoadWait(this Tab tab, int TimeOut){
            DateTime now = DateTime.Now;
            if(TimeOut >= 360000) return false; else return true;
           
        }
В итоге, так сделал у себя
я очень извиняюсь ,но у меня зависает инстанс при обрыве интернета,необходимо вырубить инстанс ,если этот код мне подходит,то как мне его применить ,куда вставить кубик С#,нужно ли добавить переменные ?
 
@Phoenix78, а как ты потом зависшие инстансы убиваешь? Я вот завернул методы зенки в асинхронные функции, как выше писал. По тайм ауту вылетает ошибка. Поток закрывается, но инстанс так же продолжает висеть в процессах и не мерено жрать ресурсы

Подробнее можно, как вы асинхронным методом закрываете поток?

Вот здесь тему создал по этому делу https://zennolab.com/discussion/threads/preryvanie-potoka-po-tajmautu-iz-koda-c.84095
 
У меня проблема, вроде все работает, несколько раз подряд читал тему, скажи правильно я понял, этот код надо вставить один раз, при старте шаблона, и на этом все? Из темы я понял что при переходе на новый кубик начинается новый отсчет?
C#:
Развернуть Свернуть Копировать
// засекаем время
DateTime now = DateTime.Now;
// выполняем рисковую команду с браузером
instance.ActiveTab.FindElementByXPath("",0);
// считаем сколько времени выполнялась команда
TimeSpan Delta_Time = DateTime.Now-now;
int Time_Difference                    =     Delta_Time.Milliseconds;
Time_Difference = Time_Difference +     Delta_Time.Seconds*1000;
Time_Difference = Time_Difference +     Delta_Time.Minutes*60*1000;
Time_Difference = Time_Difference +     Delta_Time.Hours*60*60*1000;
Time_Difference = Time_Difference +     Delta_Time.Days*24*60*60*1000;
// анализируем время
if ( Time_Difference > 60000 ) throw new Exception("Обнаружено замедление выполнения команды в инстансе, таймер = " + Time_Difference.ToString() );
// проверка вкладки на пустоту
if ( instance.ActiveTab.IsVoid || instance.ActiveTab.IsNull )     throw new Exception("Обнаружена пустая вкладка");
// выход по внешнему требованию
if(((ZennoLab.InterfacesLibrary.ProjectModel.Collections.IContextExt)project.Context).IsInterrupted) throw new Exception("Внешнее прерывание");
if(Global.Variables.IsProjectMaker && !Global.Variables.IsDebugMode)  throw new Exception("Внешнее прерывание");
 
У меня проблема, вроде все работает, несколько раз подряд читал тему, скажи правильно я понял, этот код надо вставить один раз, при старте шаблона, и на этом все? Из темы я понял что при переходе на новый кубик начинается новый отсчет?
Если применять этот код, то постоянно. в каждом месте обращения к браузеру. в кубике c# это очень не удобно делать. в старт посте я приводил пример как сделать в общем коде. вот выделил моменты которые делают основную работу, а то что не выделено, это как раз проверки на время выполнения.

77306
 
  • Спасибо
Реакции: Roman48 и djaga

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)