Работа с оперативной памятью в Human Emulator Studio.

Как уменьшить потребление оперативной памяти в Human Emulator Studio.

Использование памяти программой зависит прежде всего от тех сайтов или онлайн сервисов, с которыми вы работаете. Если сайт работает на java скриптах, имеет тяжеловесные элементы дизайна, большие картинки, видео и т.д., такой сайт будет потреблять больше памяти и ресурсов, чем тот сайт, который не использует в своей работе скрипты или продвинутые элементы дизайна. При этом в работе встроенные в страницы сайта скрипты могут создавать утечки памяти, которые будут потреблять ресурсы компьютера до тех пор, пока вы не перезапустите программу. Если этого не сделать вовремя программа может прекратить свою работу или сделать не комфортной работу на компьютере.

При работе в разных типах браузеров программа по разному работает с памятью. Так при работе в Chromium помимо основного процесса запускаются процессы самого движка CefSharp.BrowserSubprocess.exe.

А при работе с встроенным Firefox запускается только основной процесс XWeb Human Emulator Studio.exe

В версии Human Emulator Studio 7.0.47 в программу была добавлена настройка Индивидуальные субпроцессы браузера для каждой копии. Это настройка позволяет определять субпроцессы движка Chromium для каждой копии программы при работе во многопоточном режиме.

Для её выбора переходим в диалоге настроек на закладку Браузер и нажимаем кнопку Расширенные. В открывшемся диалоге Расширенные Свойства Браузера галочка находится в нижней части окна.

После выбора этой галочки субпроцессы Chromium в диспетчере задач будут выглядеть следующим образом «имя процесса_номер движка cef+порт на котором работает программа«:

Таким образом можно определить сколько потребляет памяти и ресурсов каждая копия программы вместе с её субпроцессами.

Команды для работы с памятью.

Для работы с памятью в программу добавлен ряд команд. Прежде всего это команды объекта debug для получения значений используемой памяти и ресурсов.

Команды для получения размера используемой памяти.

С помощью команды get_cur_mem_size можно получить текущий размер используемой памяти exe-шником программы в байтах.

Пример кода на php:

С помощью команд get_min_mem_size и get_max_mem_size можно получить минимальный и максимальный размер свопа соответственно.

Пример на php:

SWAP (своп) — это механизм виртуальной памяти, при котором часть данных из оперативной памяти (ОЗУ) перемещается на хранение на HDD (жёсткий диск), SSD (твёрдотельный накопитель), флеш-накопитель или иное вторичное хранилище. Как правило, swapping (свопинг) происходит, когда оперативная память переполнена, и ей для работы требуется дополнительное пространство.

Для того что бы определить сколько осталось доступной памяти на компьютере используется команда get_free_physical_mem_size.

Пример на php:

В диспетчере задач это значение Available

Команды для проверки используемых ресурсов.

С помощью команды get_gui_resources можно получить число потребляемых GUI(graphical user interface) ресурсов различных типов, а так же их пиковые значения.

Типы, которые можно получить:
0 — возвращать число GDI объектов, использованных программой
1 — возвращать число USER объектов, использованных программой
2 — возвращать максимальное число GDI объектов, которые были в использовании программой
4 — возвращать максимальное число USER объектов, которые были в использовании программой
5 — возвращать число HANDLE, использованных программой

GDI объекты.

GDI — это интерфейс Windows для представления графических объектов и передачи их на устройства отображения, такие, как мониторы и принтеры. Объекты GDI представляют собой ресурсы интерфейса графического устройства, такие как шрифты, точечные рисунки, кисти, перья и контексты устройств (поверхности конструктора).

При этом в Windows может быть одновременно создано не более 65535 объектов GDI. Это довольно много. Стандартный Human Emulator Studio при работе с Хромиумом использует порядка 270 объектов. RT версия использует 239. Тогда как при работе с Firefox эти значения опускаются до 220 и 160 соответственно. То есть теоретические на компьютере можно запустить более 200 копий программы.

USER объекты.

Объекты USER представляют из себя элементы пользовательского интерфейса, такие как рабочие столы, окна, меню, курсоры, значки и таблицы с сочетаниями клавиш. На использование такимх объектов также имеется ограничение в 65535 объектов USER. При этом полная версия Human Emulator Studio использует порядка 350 объектов, а RT версия всего порядка 180. Эти значения не зависят от браузера, а только от интерфейса программы.

Handle Count.

Handle Count это число дескрипторов файлов, обрабатываемых процессом. Счетчик дескрипторов позволяет оценить, насколько процесс зависит от файловой системы. Для обслуживания каждого дескриптора требуется системная память.

Номер процесса.

Номер процесса программы можно получить с помощью команды get_process_id. Этот номер можно увидеть в диспетчере задач.

Команды оптимизации памяти.

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

Пример на php:

Как мы писали выше, основным источником потребления памяти и ресурсов в программе является встроенный браузер. Для того, чтобы освободить память и ресурсы потребляемую браузером иногда просто достаточно закрыть все используемый вкладки и пересоздать браузер с помощью команды объекта browser recreate.

Пример на php:

Если же и это не помогает, то тогда гарантированная очистка всех потребляемых программой и браузером ресурсов выполняется с помощью команды объекта app restart, которая выполняет полную перезагрузку Human Emulator Studio.

Пример на php:

Информация в строке состояния программы.

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

Автоматически информация в этой строке обновляется раз в 10 минут. Руками это значение можно обновить просто кликнув по нему левой кнопкой мыши.

При выбранной в настройках галочке Индивидуальные субпроцессы браузера для каждой копии потребляемая память будет отображаться в виде суммы двух значений, где первое значение это память потребляемая основным процессом XWeb Human Emulator Studio.exe, а второе значение — память потребляемая субпроцессами браузера Chromium.

Правильная организация работы для уменьшения потребления памяти.

Как правило проблемы с памятью возникают только в том случае, когда программа работает без перерыва целыми сутками с «тяжёлыми» сайтами. Если вы используете программу в таком режиме, то мы рекомендуем использовать версию RT, которая лежит в папке с программой под названием XWeb Human Emulator Studio RT.exe. Это версия специально была добавлена для работы в режиме меньшего потребления памяти и ресурсов. А также использовать в логике работы скриптов периодический перезапуск программы с помощью команды объекта app restart.

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

Также в последних версиях программы были добавлены новые типы браузеров для уменьшения потребления памяти и ресурсов. Это Chromium (Compact) и Chromium (Offscreen). Chromium (Compact) потребляет меньше памяти за счёт использования технологии WPF, а Chromium (Offscreen) за счёт того что не выполняет отрисовку загружаемой страницы в браузере.

Любые вопросы и предложения по работе с памятью в программе Human Emulator Studio вы можете оставить на нашем форуме.


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

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.