Эффективное использование ресурсов при работе с ZennoPoster

ZennoPoster - многопоточная программа и в каждом потоке обрабатывает много информации, требуя при этом значительных ресурсов компьютера. Эта статья поможет Вам настроить программу под Ваш компьютер, позволив использовать его ресурсы максимально эффективно.

Время пользователя

Самый важный ресурс. Время процессора стоит дёшево, оперативная память - ещё дешевле. Единственное, что действительно важно - это Ваше личное время.

Создавая программу, мы в первую очередь экономили этот ресурс.

Оперативная память

Каждый поток в ZennoPoster представляет собой изолированный браузер со своими куками (около 13 видов), кэшем, прокси, User Agent и всеми другими данными, которые нужны для полной эмуляции пользователя.

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

  1. Сайт, с которым Вы работаете. Все сайты очень разные и отличаются потреблением оперативной памяти, иногда на порядок. Таким образом, автоматизация одного сайта может работать в 100 потоков, а другого в 20 на одной и той же машине. Старайтесь отключать Flash, картинки и другие ресурсы, если они не нужны для работы с сайтом.

  2. Файлы. Файлы для ускорения работы хранятся в оперативной памяти (иначе будут проблемы с доступом к жёсткому диску). Если Вы для каждого потока используете свою копию файла (так происходит при использовании списков и таблиц без синхронизации с файлом) то, соответственно, каждый поток требует дополнительную оперативную память для хранения этого файла. Учитывайте, что таблицы в оперативной памяти занимают намного больше места, чем исходный файл на жёстком диске. Списки не такие требовательные как таблицы, тем не менее, тоже в оперативной памяти увеличиваются. Например, в оперативной памяти таблица на основе файла *.csv в 10 MB в 100 потоков без синхронизации с файлом, может занять 5 GB. Старайтесь не использовать списки и таблицы в режиме «без синхронизации» с файлом без необходимости.

  3. См пункт (2) в разделе «Процессор».

  4. Поиск по картинке. Эта фича тратит много оперативной памяти. Но очень полезна.

Процессор

Каждый поток в ZennoPoster строит DOM модель, рендерит картинку, выполняет JavaScript, обрабатывает события, обрабатывает анимацию и т.д. всё это требует ресурсов процессора. Также процессор нагружается при периодической перезагрузке инстансов. Есть несколько способов экономии процессора:

  1. Отключение обработки ненужных элементов: Flash, картинки, скрипты и всё что не нужно. Обратите внимание, если сайт с хорошей защитой, то это может повлиять на бан аккаунтов. Т.е. регистрация пройдёт, но созданный аккаунт вызовет подозрения и в дальнейшем может быть забанен.

  2. (Данный пункт актуален только при работе на движке Firefox 45) В настройках программы есть возможность регулирования количества потоков на одной базе. Увеличив этот параметр, Вы немного экономите память и процессор, но появляются дополнительные задержки при эмуляции мыши и клавиатуры. Про эмуляцию читайте дальше.

  3. Эмуляция мыши и клавиатуры немного увеличивает расход процессора и создаёт эффект, описанный в (2). Но иногда без неё просто нельзя создать аккаунт. Также эмуляция при регистрации аккаунта понижает вероятность бана аккаунта в будущем при дальнейшем его использовании.

  4. Программное распознавание каптчи при использовании модулей из CapMonster тоже расходует процессор. Сколько времени одного ядра процессора нужно для распознавания каптчи написано в CapMonster при тестировании модуля. На самом деле, даже если Вы тратите 10 секунд ядра процессора (хотя такого не бывает, обычно это меньше четверти секунды) на распознавание каптчи, это всё равно дешевле, чем отправлять каптчу в сервисы ручного распознавания.

  5. Поиск по картинке тратит и ресурсы процессора тоже. Но всё равно остаётся очень полезной фичей.

Время потока

Обратите внимание на этот параметр. Во время распознавания каптчи в сервисах ручного распознавания происходит простой проекта около 15 секунд (пока работники сервисов распознают вашу каптчу).

За это время процессор практически не работает для этого потока.

Благодаря этому (если в проекте есть такое действие) общее количество потоков, которое можно запустить на одной машине резко увеличивается. Т.е. Вы можете запустить 30 потоков, на которых Ваш проект всё время открывает web-страницы без распознавания каптч (обычный парсер, например). И это займёт все ресурсы процессора.

Или 150 потоков с проектом (регистратор аккауната), в котором есть распознаванием каптчи через сервисы. И это займёт всю оперативную память.

Аналогично с подтверждением регистрации по e-mail, когда поток ждёт письмо. В этом случае тоже происходит простой потока.

Интернет канал

Здесь всё просто. Вы открываете web-страницу - при этом она скачивается с сервера и все картинки, Flash, скрипты и т.д., которые есть на ней. Если Вы чистите кэш, то всё скачивается постоянно при работе проекта, если нет - то потребление этого ресурса сильно понижается.

Обычно кэш нужно чистить. Без очистки кэша web ресурс поймёт, что Вы уже заходили на него, даже если Вы используете прокси.

Интернет канал может быть широким, тем не менее, ограничивать работу программы из-за малого количества разрешённых открытых соединений, о которых читайте далее.

Открытые соединения

Что это такое можно узнать у Google, а сколько таких соединений поддерживает Ваша сеть можно узнать в ZennoProxyChecker. В нём есть тест канала и его онлайн мониторинг.

На поток с установленной прокси нужно 2 соединения. Без прокси - до 32.

Обычно соединения урезаны домашними провайдерами, но чаще модемами, обычно доступно около 300, дальше модем просто перестаёт отвечать на запросы, в то время как выделенные сервера поддерживают тысячи (15000 на серверах от hetzner.de).

Учитывайте, что ProxyChecker использует соединения. От 1 соединения на поток ProxyChecker.

В итоге

Каждый проект может требовать разное количество ресурсов. Один может использовать 15 MB оперативной памяти на поток, другой 1 GB, аналогично с ресурсами процессора - всё зависит от задач.

При создании программы мы в первую очередь экономили Ваше время, всё остальное легко настраивается и масштабируется.

Настройка количества потоков по умолчанию

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

Если Вы прочитали предыдущие пункты, то Вам уже ясно, что количество потоков очень сильно зависит от проекта и подбирается вручную индивидуально для Ваших задач. Для этого просто плавно прибавляется количество потоков, пока один из ресурсов компьютера не будет исчерпан.

Нужно учесть один нюанс: расход процессора можно немного превысить, т.е. если у Вас он загружен на 100% увеличение потоков на 10-15% практически ничего не изменит, а главное, не ухудшит. Просто потоки будут ждать некоторое время освобождения этих ресурсов.

Оперативная память, наоборот, не должна забиваться полностью, всегда лучше оставлять 10-30%. Если она кончится, это может привести к падению ZennoPoster и всех остальных программ на Вашем компьютере.

Скорость как у сокетов

Наши недобросовестные конкуренты (не будем показывать пальцем :) утверждают, что их программа может работать со скоростью сокетов, если отключить загрузку Flash, скриптов, картинок и т.д.

На самом деле это не так. Браузер никогда не будет работать со скоростью прямых http запросов. Прямые запросы работают в 50-100 раз быстрее. Вы можете убедиться в этом, запустив наш ZennoProxyChecker на выделенном сервере в 15000 потоков. При тестировании на серверах hetzner.de на 15000 потоках кончились свободные соединения, больше не поддерживает их сетевое оборудование, причём процессора и оперативной памяти легко хватило бы и на 50000.