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

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 705
Баллы
113
@Phoenix78, подскажи, пожалуйста: заметил, что иногда происходит зависон всего шаблона/шаблонов в зенке. Например, бывают иногда, что пол часа может вообще не выполняться шаблон, т. е. ни один из 40 потоков не работает по факту. Инстансы открыты, но в них не совершается никаких действий, т. е. просто висит всё.
И самое интересное, что я вообще ничего не меняю, но через минут 20-40 всё обратно отвисает - и продолжает работать как ни в чём ни бывало.
Прикрепляю скрин. В логе 20 минут нет ни одной записи. Такого просто никак быть не должно, т. е. шаблон длится максимум минут 5. Запущен в 40 потоков. В любом случае в лог пишется в норме куча сообщений. А тут - зависон на 20 минут.

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

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

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

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

sociohacker

Client
Регистрация
08.10.2018
Сообщения
89
Благодарностей
25
Баллы
18
Если не включена трасировка проектов, то ее надо велючить. При непонятных зависонах анализировать ее. Только анализ трасеров дал мне информацию, о происходящем внутри шаблонов.
Никогда раньше не пользовался. Включил. Читаю справку по ней. Надеюсь, поможет.
Спасибо! :-)
 

sociohacker

Client
Регистрация
08.10.2018
Сообщения
89
Благодарностей
25
Баллы
18
@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.: мне неловко вас задалбывать, если честно. Если вас устроит, то можем как-то оформить это в формате платной консультации и дообщаться уже в мессенжерах, например. Я просто очень редко что-то на форумах спрашиваю и реально не знаю границ, где заканчивается "чисто человеческий совет" и начинается "работа по разбору чужих проблем" (и, соответственно, любой труд должен быть оплачен).
 

Вложения

  • Спасибо
Реакции: Phoenix78

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 705
Баллы
113
с профилями вообще беда. они то слетают, то при сохранении шаблон виснет. ну тут ничего не сделаешь , только разработчиков долбать. Вы правильно делаете что шлете им рапорты, авось и починят. Я не проводил аналогий, но что то подсказывает что проблемы с сохранением профиля и падения инстанса, могут быть взаимосвязаны. Так как при сохранении профиля идет обращение к данным инстанса, со всеми вытекающими. Я у себя сейчас для рабочих шаблонов ввел режим поддержания регистрации на ресурсах. сохраняю профиль сразу после захода в аккаунт, но не чаще 1 раза в сутки. а до этого были такие же проблемы как и у вас. куча "работающих" шаблонов, а статистика на месте стоит. для нагуливания профилей конечно так не пойдет, там я перед сохранением профиля считываю имя вкладки с замером времени и если нет задержек , то сохраняю. сохраняю не стандартным кубиком, а методом который тут на форуме нашел, с проверкой размера профиля.
 
  • Спасибо
Реакции: sociohacker

sociohacker

Client
Регистрация
08.10.2018
Сообщения
89
Благодарностей
25
Баллы
18
с профилями вообще беда. они то слетают, то при сохранении шаблон виснет. ну тут ничего не сделаешь , только разработчиков долбать. Вы правильно делаете что шлете им рапорты, авось и починят. Я не проводил аналогий, но что то подсказывает что проблемы с сохранением профиля и падения инстанса, могут быть взаимосвязаны. Так как при сохранении профиля идет обращение к данным инстанса, со всеми вытекающими. Я у себя сейчас для рабочих шаблонов ввел режим поддержания регистрации на ресурсах. сохраняю профиль сразу после захода в аккаунт, но не чаще 1 раза в сутки. а до этого были такие же проблемы как и у вас. куча "работающих" шаблонов, а статистика на месте стоит. для нагуливания профилей конечно так не пойдет, там я перед сохранением профиля считываю имя вкладки с замером времени и если нет задержек , то сохраняю. сохраняю не стандартным кубиком, а методом который тут на форуме нашел, с проверкой размера профиля.
Значит, не 100%, что причина в железе, а может всё-таки в ЗП.

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

Спасибо в который раз!
 

artsmm

Client
Регистрация
03.10.2018
Сообщения
1 135
Благодарностей
196
Баллы
63
Приветствую) Спасибо за полезный сниппет.
Вопрос - что такое 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;
        }
Видимо, он как-то так должен выглядеть. Возможно я не прав
 
Последнее редактирование:

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 705
Баллы
113
Приветствую) Спасибо за полезный сниппет.
Вопрос - что такое 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 ..... а где это такое ? я не увидел в своем тексте такого. и поиск по страницам ничего такого не выдал...
 

artsmm

Client
Регистрация
03.10.2018
Сообщения
1 135
Благодарностей
196
Баллы
63
LoadWait ..... а где это такое ? я не увидел в своем тексте такого. и поиск по страницам ничего такого не выдал...
на скриншоте у вас в самом низу кода есть этот кусочек)
а в кубике C# она вызывается tab.NavigateWithCheck(url, DateTime.Now ,NavigateTimeout);
скрин сразу после этой фразы
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 705
Баллы
113
на скриншоте у вас в самом низу кода есть этот кусочек)

скрин сразу после этой фразы
ааа, увидел... tab.LoadWait... ну да это простенькая функция ожидания загрузки страницы. там в цикле ожидается статус окончания загрузки или окончания времени загрузки.
 

one

Client
Регистрация
22.09.2015
Сообщения
6 805
Благодарностей
1 266
Баллы
113
ааа, увидел... tab.LoadWait... ну да это простенькая функция ожидания загрузки страницы. там в цикле ожидается статус окончания загрузки или окончания времени загрузки.
А чем она отличается от instance.ActiveTab.WaitDownloading? Сорри за офтоп.
 
Последнее редактирование:

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 705
Баллы
113
А чем она отличается от instance.ActiveTab.WaitDownloading? Сорри за офтоп.
WaitDownloading невозможно прервать. лично у меня на паре сайтов загрузка переходила в бесконечный процесс. поэтому решил сделать свой контроль загрузки.
вообще вариантов контроля прогрузки сайта очень много. на форуме не раз подымали этот вопрос и обсуждали плюсы и минусы разных методов.
 
  • Спасибо
Реакции: one

artsmm

Client
Регистрация
03.10.2018
Сообщения
1 135
Благодарностей
196
Баллы
63

606

Client
Регистрация
07.03.2019
Сообщения
20
Благодарностей
3
Баллы
3
C#:
public static bool LoadWait(this Tab tab, int TimeOut){
            DateTime now = DateTime.Now;
            if(TimeOut >= 360000) return false; else return true;
           
        }
В итоге, так сделал у себя
я очень извиняюсь ,но у меня зависает инстанс при обрыве интернета,необходимо вырубить инстанс ,если этот код мне подходит,то как мне его применить ,куда вставить кубик С#,нужно ли добавить переменные ?
 

ZSharp

Client
Регистрация
29.09.2013
Сообщения
387
Благодарностей
121
Баллы
43
@Phoenix78, а как ты потом зависшие инстансы убиваешь? Я вот завернул методы зенки в асинхронные функции, как выше писал. По тайм ауту вылетает ошибка. Поток закрывается, но инстанс так же продолжает висеть в процессах и не мерено жрать ресурсы
Подробнее можно, как вы асинхронным методом закрываете поток?

Вот здесь тему создал по этому делу https://zennolab.com/discussion/threads/preryvanie-potoka-po-tajmautu-iz-koda-c.84095
 

Roman48

Client
Регистрация
28.02.2016
Сообщения
2 058
Благодарностей
743
Баллы
113
У меня проблема, вроде все работает, несколько раз подряд читал тему, скажи правильно я понял, этот код надо вставить один раз, при старте шаблона, и на этом все? Из темы я понял что при переходе на новый кубик начинается новый отсчет?
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("Внешнее прерывание");
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 705
Баллы
113
У меня проблема, вроде все работает, несколько раз подряд читал тему, скажи правильно я понял, этот код надо вставить один раз, при старте шаблона, и на этом все? Из темы я понял что при переходе на новый кубик начинается новый отсчет?
Если применять этот код, то постоянно. в каждом месте обращения к браузеру. в кубике c# это очень не удобно делать. в старт посте я приводил пример как сделать в общем коде. вот выделил моменты которые делают основную работу, а то что не выделено, это как раз проверки на время выполнения.

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

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