Анализатор трассировки шаблона

orka13

Client
Регистрация
07.05.2015
Сообщения
2 163
Благодарностей
2 163
Баллы
113
performance-1024x570.jpg


Часто вижу вопросы типа: «Почему шаблон в 10 и в 50 потоков работает только в 2 раза быстрее а не в 5?» (свежий пример). И тогда обычно начинается холивар на тему оптимизации шаблона, выбора среды типа HDD vs RAMDisk, списки\таблицы vs БД, Intel vs AMD, поиск «узкого горлышка» через Трассировка проектов и т.д.
И вот с последним как раз проблема, ибо в трассировке легко найти по логу кубик-ошибку, но трудно посчитать среднестатистический показатель для понимания картины:
1) насколько часто эта ошибка появляется;
2) сколько в среднем времени она кушает;
3) насколько хуже тот же кубик отрабатывает в многопотоке по сравнению с однопотоком.
Вот как раз эти проблемы и закрывает мой небольшой шаблончик.

Как работает шаблон:
1. Включаем трассировку на исследуемом шаблоне (условно назовем его «Глюченый_Шаблон»).
2. Запускаем в ZennoPoster Глюченый_Шаблон в обычном режиме работы, допустим в 1…10 потоков.
3. Останавливаем работу Глюченый_Шаблон через несколько циклов работы (ну и хотя бы 60 минут чтобы он отработал). Дожидаемся завершения всех потоков. Желательно чтобы после остановки в папке из следующего пункта накопилось ~2…10 мегабайт логов.
4. Файлы трассировки (обычно они по пути типа «c:\Users\Administrator\Documents\ZennoLab\Traces\Глюченый_Шаблон.zp\») переносим в папку шаблона-анализатора «…\Analizator_Trassirovki\Input\1_Good\», то есть папка с файлами трассировки должна после этого стать пустой!
4. Запускаем Глюченый_Шаблон повторно но в режиме работы «под нагрузкой» где он по вашему мнению неоправданно «тормозит», допустим в 50…200 потоков, тут уже сами прикиньте сколько макс можно.
5. Останавливаем работу Глюченый_Шаблон как в пункте «№3» так чтобы в папке накопилось ~10…100 мегабайт логов (не рекомендую больше 100, а то может заглючить процесс). Файлы трассировки переносим в папку шаблона-анализатора «…\Analizator_Trassirovki\Input\2_Bad\».
6. Запускаем наконец-то мой шаблон-анализатор в 1 попытку и ждем. Через минут ~1...20 он обработает логи и посчитает среднее время выполнения для каждого кубика, сравнит их в обеих режимах и на выходе получим таблицы (идентичные, просто в разных форматах) типа:
«…\Analizator_Trassirovki\Table_Final_xlsx_2021-03-10-01-05.xlsx»
«…\Analizator_Trassirovki\Table_Final_csv_2021-03-10-01-05.csv»
Открываете любую таблицу, из нее можно прикинуть на каких кубиках наибольшие потери и заменить их. Например, я понял, что в моем шаблоне проблемы на кубике «71df525e-d0ff-4116-8383-eb71842933c0» («сохранения профиля») ибо в многопотоке он очень тупил, пришлось по возможности убрать его в ненужных местах.
1T1.png
Сортировка в таблице по последнем столбце. Везде кроме него время в миллисекундах, а вот в нем уже для удобства в минутах. Там посчитано насколько быстрее выполнился бы шаблон, если бы не было падения быстродействия. Но этот показатель еще стоит поделить на количество ваших потоков во втором режиме. То есть если у меня там было 100 потоков, значит только этот кубик украл ~4 минуты общего времени.

Кстати, если пролистать таблицу, то в низу можно найти кубики с минусовым значением. Можно было бы обрадоваться, что кубики начали быстрее выполнятся, но обычно хорошего тут мало. К примеру, у меня это кубик перехода по урлу в браузере, и среднестатистически он в многопотоке быстрее стал выполнятся из-за того, что чаще прокси не выдерживали нагрузки и пустую страницу мгновенно выдавали вместо прогрузки нормальной. Я это понял по резкому увеличению показателей в колонке «% неудач» для кубика, который в шаблоне шел следом за кубиком погрузки страницы и проверял наличие нужного текста на ней (то есть чаще по красной ветке стал выходить):
2T2.png

Подсказка для новичков: если вы хотите найти в таблице параметры нужного вам кубика, но не знаете его ID, то запустите в ProjectMaker его 1 раз, и из лога скопируйте ID этого действия («лог» включается через верхнее меню «Окно > Лог»):
3Log.png
Ну а в самом ProjectMaker кубики ищутся по ID через окно поиска (Ctrl+F):
4Log.png

Скачать шаблон можно в прикреплённых файлах внизу поста.
 
Категория
Аналитика
Номер конкурса шаблонов
Седьмой конкурс шаблонов
Уровень сложности
Средний

Вложения

Для запуска проектов требуется программа ZennoPoster или ZennoDroid.
Это основное приложение, предназначенное для выполнения автоматизированных шаблонов действий (ботов).
Подробнее...

Для того чтобы запустить шаблон, откройте нужную программу. Нажмите кнопку «Добавить», и выберите файл проекта, который хотите запустить.
Подробнее о том, где и как выполняется проект.

radv

Client
Регистрация
11.05.2015
Сообщения
3 670
Благодарностей
1 855
Баллы
113
Хорошая идея, попробую внедрить в свои проекты. :az:
 
  • Спасибо
Реакции: abcman и orka13

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 941
Благодарностей
4 333
Баллы
113
Очень полезно! Трассировкой приходится иногда пользоваться в сложных случаях.
 
  • Спасибо
Реакции: orka13

backoff

Client
Регистрация
20.04.2015
Сообщения
5 925
Благодарностей
6 389
Баллы
113
Давно админов прошу сделать такую вещь только с визуализацией, но и так думаю норм будет стата!
Молоток
 

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 320
Благодарностей
5 424
Баллы
113
Годнота. Опробую на деле!
 
  • Спасибо
Реакции: orka13

loshpek

Client
Регистрация
24.11.2016
Сообщения
83
Благодарностей
34
Баллы
18
Пригодится!
 
  • Спасибо
Реакции: orka13 и cliverd

phoenixs

Client
Регистрация
10.06.2020
Сообщения
158
Благодарностей
209
Баллы
43
Очень искал что-то подобное, спасибо!
 
  • Спасибо
Реакции: orka13

Bas

Client
Регистрация
15.12.2013
Сообщения
607
Благодарностей
251
Баллы
63
Супер. Отдал голос за Вас и уже запустил шаблон трассироваться. Как раз не могу победить, почему на 1 компе он выполняется за 4 секунды, на другом тоже 4 на старте, а уже через пол часа за 8-12 секунд, когда на первом так и остается 4 секунды, хотя компы одинаковые практически :-)
 
  • Спасибо
Реакции: orka13

Bas

Client
Регистрация
15.12.2013
Сообщения
607
Благодарностей
251
Баллы
63
73823


Как я и подозревал собственно, вся соль и боль в банальном запуске инстанса. 4 часа процессорного времени проект тупо запускал инстанс... Всего 20 потоков запустил для теста, а время запуска сразу в 5 раз возросло. Естественно свободных ресурсов достаточно для нормальной работы всех одновременно. Уже поднимал эту тему в обсуждении билда. Так никто и не ответил :(

PS: спасибо за полезный шаблон, реально так намного нагляднее, чем по notepad++ бегать с помощью ctrl + f.
 
Последнее редактирование:
  • Спасибо
Реакции: Lord_Alfred и orka13

orka13

Client
Регистрация
07.05.2015
Сообщения
2 163
Благодарностей
2 163
Баллы
113
Посмотреть вложение 73823

Как я и подозревал собственно, вся соль и боль в банальном запуске инстанса. 4 часа процессорного времени проект тупо запускал инстанс... Всего 20 потоков запустил для теста, а время запуска сразу в 5 раз возросло. Естественно свободных ресурсов достаточно для нормальной работы всех одновременно. Уже поднимал эту тему в обсуждении билда. Так никто и не ответил :(

PS: спасибо за полезный шаблон, реально так намного нагляднее, чем по notepad++ бегать с помощью ctrl + f.
Спасибо за тест реальный, а то я уже задумался: "лайкают, но запускал хоть кто-то шаблон?". А тот тут нет "кнопки бабло" :-)
 
  • Спасибо
Реакции: Bas, phoenixs и Phoenix78

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 856
Баллы
113
Шаблон огонь :-)
 
  • Спасибо
Реакции: orka13

RoyalBank

Client
Регистрация
07.09.2015
Сообщения
557
Благодарностей
547
Баллы
93
У кого есть идеи, как лучше организовать работу чекпоинтов для замера скорости общего кода.
 

Phoenix78

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

RoyalBank

Client
Регистрация
07.09.2015
Сообщения
557
Благодарностей
547
Баллы
93
измерять разницу времени между началом кода и концом
Так то понятно, что можно сделать void в начеле и конце кода, в который передавать название текущего этапа, а также запускать и останавливать Stopwatch() .
Вопрос в наличии, возможного, более элегантного решения, может какая библиотека есть...
 

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 320
Благодарностей
5 424
Баллы
113
Воспользовался шаблоном. Спасибо за работу. Разбираю свой проект, нашел узкие места. Правда я не сравниваю один поток с многопотоком. Мне просто важно посмотреть узкие места шаблона. По этому дублировал файлы в обе папки.

1) Не хватает пары колонок. Максимальное значение, минимальное значение. Приведу пример, у меня GET запрос составляет 1.6 сек среднее значение. Таймаут установлен 10 сек. Понять бы в каких значениях плавает запрос. И по моему процент неудач немного не корректно работает, ну либо сама трассировка не совсем корректно отображает эти данные. Переход по красной ветке считается неудачей?

2) Еще не помешал бы блеклист ID, что бы исключить всякие паузы и прочее из анализа. После первой проверки, их загнать в список и далее мониторить только важные моменты.

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

orka13

Client
Регистрация
07.05.2015
Сообщения
2 163
Благодарностей
2 163
Баллы
113
...Переход по красной ветке считается неудачей?
Да.
...Думаю в целом могу и я допилить проект. Но если вдруг у тебя есть такое желание, то проинформируй, что бы не пришлось делать двойную работу))
Пока к сожалению допиливать нет времени, слишком погряз в работе.
 
  • Спасибо
Реакции: Mikhail B.

Lucky_life

Client
Регистрация
24.04.2014
Сообщения
109
Благодарностей
22
Баллы
18
Воспользовался шаблоном. Спасибо за работу. Разбираю свой проект, нашел узкие места. Правда я не сравниваю один поток с многопотоком. Мне просто важно посмотреть узкие места шаблона. По этому дублировал файлы в обе папки.

1) Не хватает пары колонок. Максимальное значение, минимальное значение. Приведу пример, у меня GET запрос составляет 1.6 сек среднее значение. Таймаут установлен 10 сек. Понять бы в каких значениях плавает запрос. И по моему процент неудач немного не корректно работает, ну либо сама трассировка не совсем корректно отображает эти данные. Переход по красной ветке считается неудачей?

2) Еще не помешал бы блеклист ID, что бы исключить всякие паузы и прочее из анализа. После первой проверки, их загнать в список и далее мониторить только важные моменты.

Думаю в целом могу и я допилить проект. Но если вдруг у тебя есть такое желание, то проинформируй, что бы не пришлось делать двойную работу))
а можно в Лс скинуть, если допилили шаблончик
 

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 320
Благодарностей
5 424
Баллы
113
а можно в Лс скинуть, если допилили шаблончик
Извини, забил тоже, тут обнов навалилось выше крыши. Да и нашел узкие места которые искал, и дальше не стал. Есть и другие проекты которые хотел проверть, может тогда и обновлю.
 
  • Спасибо
Реакции: Lucky_life

Lucky_life

Client
Регистрация
24.04.2014
Сообщения
109
Благодарностей
22
Баллы
18
Извини, забил тоже, тут обнов навалилось выше крыши. Да и нашел узкие места которые искал, и дальше не стал. Есть и другие проекты которые хотел проверть, может тогда и обновлю.
Понял, :ay:пойду тоже тестировать.
 
  • Спасибо
Реакции: Mikhail B.

bigloafer

Client
Регистрация
23.07.2020
Сообщения
241
Благодарностей
75
Баллы
28
Я так понимаю, чтобы проанализировать свой шаблон, надо чтобы конкретные действия находились в отдельных кубиках.
А как быть если шаблон находиться в одном кубике?
 

backoff

Client
Регистрация
20.04.2015
Сообщения
5 925
Благодарностей
6 389
Баллы
113

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 689
Баллы
113
Я так понимаю, чтобы проанализировать свой шаблон, надо чтобы конкретные действия находились в отдельных кубиках.
А как быть если шаблон находиться в одном кубике?
использовать свое решение, для логирования действий.
 

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 320
Благодарностей
5 424
Баллы
113
Обновил шаблон под свои задачи. Это не сравнение, а проверка одного потока шаблона. (может и нескольких, не тестил)
Запись ведется статичную таблицу, что бы поля сохраняли свои размеры. + добавил блек лист, что бы исключать ненужные кубики. Выполнять лучше в ZP, а править в PM.

P.S. Может и вайт лист добавлю, тогда обновлю шаб.
 

Вложения

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

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 320
Благодарностей
5 424
Баллы
113
Есть идея, но я ее реализую в следующий раз.

Есть разное время выполнения действия. Я считаю кол-во отхождений от среднего и уже считаю процент проблемных выполнений от общего. Если он уходит за установленный лимит, то проблема есть. Допустим 10%. Проценты можно будет менять.

Допустим если выполнением является пауза от 1 до 5 сек. То такой кубик будет считаться проблемным, т.к. есть явные расхождения по времени выполнения.

Таким образом можно более эффективно находить плавающие и не явные проблемы в шаблоне. Когда например среднее выполнение 1 секунда, но при этом в 20% случаев выдает 5 секунд. С математикой не очень дружу, может есть какие-то формулы для подобных расчетов, если поделитесь, то буду очень признателен.
 

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 320
Благодарностей
5 424
Баллы
113
Теперь анализатор огонь!
по крайней мере для меня)))

- Считает кол-во отклонений от среднего
- Считает процент отклонений от среднего
- Суммирует время отклонений
- Показывает минимальное время выполнения
- Показывает максимальное время выполнения

- Блеклист вывел во входящие настройки

Удалено
- Среднее время выполнения кубива


Так смотрите у нас кубик GET-Запроса.
Мы видим, что его процент отклонений является 19%. Эти 19% скорее всего таймаут. т.к. максимальное время 10 сек. Общее время отклонений составило 260 сек, что для 2 часового выполнения не так много. Но мне эти секунды важны. Думаю надо таймаут сделать по меньше, или прикрутить быструю смену прокси на этом этапе. Уже не важно, главное проблема найдена. Пробуйте)

2022-06-13_005647.jpg
 

Вложения

Последнее редактирование:

Dimazzan

Client
Регистрация
05.11.2014
Сообщения
338
Благодарностей
126
Баллы
43
Теперь анализатор огонь!
по крайней мере для меня)))

- Считает кол-во отклонений от среднего
- Считает процент отклонений от среднего
- Суммирует время отклонений
- Показывает минимальное время выполнения
- Показывает максимальное время выполнения

- Блеклист вывел во входящие настройки

Удалено
- Среднее время выполнения кубива


Так смотрите у нас кубик GET-Запроса.
Мы видим, что его процент отклонений является 19%. Эти 19% скорее всего таймаут. т.к. максимальное время 10 сек. Общее время отклонений составило 260 сек, что для 2 часового выполнения не так много. Но мне эти секунды важны. Думаю надо таймаут сделать по меньше, или прикрутить быструю смену прокси на этом этапе. Уже не важно, главное проблема найдена. Пробуйте)

Посмотреть вложение 93094
Огонь да
Тип Время Сообщение
03:22:02 Выполнение действия Table Колонка D отсутствует в таблице
03:22:02 Выполнение действия Table Ошибка при обработке таблицы
 

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 320
Благодарностей
5 424
Баллы
113

gospodinkot

Client
Регистрация
04.03.2019
Сообщения
82
Благодарностей
22
Баллы
8
Круто! Спасибо за шаблон и за апдейт. Скажите, а есть ли способ отследить сколько ресурсов кушает тот или иной кубик? Сильно нагружается процессор хочу понять что именно его грузит. Это вообще возможно?
 

Devostator

Client
Регистрация
17.09.2011
Сообщения
229
Благодарностей
16
Баллы
18
разобрался
 

adr1enette

Client
Регистрация
30.11.2022
Сообщения
47
Благодарностей
10
Баллы
8
Теперь анализатор огонь!
по крайней мере для меня)))

- Считает кол-во отклонений от среднего
- Считает процент отклонений от среднего
- Суммирует время отклонений
- Показывает минимальное время выполнения
- Показывает максимальное время выполнения

- Блеклист вывел во входящие настройки

Удалено
- Среднее время выполнения кубива


Так смотрите у нас кубик GET-Запроса.
Мы видим, что его процент отклонений является 19%. Эти 19% скорее всего таймаут. т.к. максимальное время 10 сек. Общее время отклонений составило 260 сек, что для 2 часового выполнения не так много. Но мне эти секунды важны. Думаю надо таймаут сделать по меньше, или прикрутить быструю смену прокси на этом этапе. Уже не важно, главное проблема найдена. Пробуйте)

Посмотреть вложение 93094
Есть более усовершенствованная версия?
 

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