Не все знают, что в InterSystems Caché есть встроенный инструмент для профилирования кода, который называется Caché Monitor.
Основное его назначение (очевидно) – сбор статистики по исполняющимся в Caché программам. Он может предоставлять как общую статистику по всем программам, так и детализированную Line-by-Line статистику по каждой отдельной программе.
Используем Caché Monitor
Давайте рассмотрим сценарий использования Caché Monitor и его основные возможности. Итак, чтобы запустить профилировщик, необходимо в терминале перейти в область, которую планируется мониторить, и запустить системную рутину %SYS.MONLBL:
zn "<namespace>"
do ^%SYS.MONLBL
В результате выполнения последней команды вы увидите следующее:
Здесь всего два пункта: первый пункт позволяет, собственно, запустить сам профилировщик, а второй – имитировать запуск для вычисления необходимой для мониторинга памяти. Учтите, что мониторинг большого числа программ одновременно может потребовать довольно много памяти. Если вам это необходимо, то может потребоваться увеличение значение параметра gmheap (увеличить его можно в Портале управления системой => Администрирование системы => Конфигурация => Дополнительные настройки => Дополнительные настройки памяти. Изменения данного параметра потребует перезапуска Caché).
Давайте выберем первый пункт. На экране появится предложение ввести имя программы. Поддерживается маска с использованием "*". Для просмотра всех уже добавленных программ необходимо ввести "?L".
В примере я буду мониторить все программы в моей области, поэтому введу просто "*".
Окончанием ввода служит ввод пустой строки. Как видно, для мониторинга выбрано 246 программ.
Далее, нам предлагается выбрать метрики для мониторинга. В Caché Monitor для отслеживания доступно более 50 метрик, например:
- Число глобальных ссылок
- Время, затраченное на исполнение строки
- Число строк Caché Object Script
- Число исполненных строк
- Количество исполнений той или иной строки
- Число команд блокировки
- Число успешных команд блокировки и т.д.
В большинстве случаев программисту необходимы лишь минимальные метрики (число строк, число исполненных строк, количество исполнений конкретной строки, время исполнения конкретной строки). Данная статистика будет собрана при выборе пункта 1 (значение по умолчанию). При желании можно так же собрать всю статистику или выбрать определенные метрики. В своем примере я остановлюсь на минимальных метриках:
На следующем шаге будет предложено выбрать процессы для мониторинга. Можно собирать статистику по каким-то определенным процессам (необходимо будет указать список их PID), по текущему процессу или же по всем. Я опять остановлюсь на значении по умолчанию.
В случае успешного старта вы увидите сообщение “Monitor started”. И по нажатию Enter окажетесь в меню монитора:
Пробежимся по пунктам.
Stop Monitor – полная остановка монитора. Это так же сотрет всю собранную статистику.
Pause Monitor – приостановка монитора с возможностью продолжения и сохранением собранной статистики.
Clear Counters – очистка статистики.
Следующие четыре пункта отвечают за вывод собранной статистики. Чаще всего используются первые два – вывод детализированной Line-by-Line информации по конкретной программе и вывод обобщенной статистики по всем исполненным программам. При выборе этих пунктов будет предложен ввод списка программ, по которым необходимо отобразить статистику, и имя файла, в которую ее необходимо записать (если не указывать файл, статистика будет отображена прямо в терминале). Так же, помимо INT-кода есть возможность включить в выходной файл исходный код (при наличии), однако по нему подробной статистики не собирается.
Все готово, запускаем на выполнение нужные нам программы, а затем смотрим статистику.
Внимание! Использование Caché Monitor может принести существенные накладные расходы в плане производительности, поэтому использование его в производственных системах крайне не рекомендуется. Пожалуйста, используйте его только на этапе разработки и отладки.
Небольшой бонус
Для большего удобства просмотра результатов я написал небольшое web-приложение, которое вы можете загрузить из нашего GitHub-репозитория: github.com/intersystems-ru/monlbl-viewer
На данный момент оно умеет следующее:
- Старт, Остановка, Пауза/Возобновление Caché Monitor.
- Отслеживание минимальных метрик по программам.
- Просмотр обобщенной статистики по программам.
- Просмотр детализированной Line-by-Line статистики по конкретной программе.
- Подсветка синтаксиса.
- Переход от вызова класс-метода или программы (метки программы) к коду этого класс-метода или программы (если код доступен и отслеживается монитором).
Что в планах:
- Предоставить возможность выбора области (Namespace) для мониторинга.
- Переход от вызова метода объекта и вызова функции программы к коду этого метода или функции.
- Отображение исходных строк класса CLS в строки промежуточного кода INT (если существует такая возможность без потери статистики).
Пара скриншотов
Отмечу, что приложение распространяется под лицензией MIT (т.е. распространяется “как есть”), т.к. использует недокументированные возможности Caché и его работоспособность не гарантируется на различных версиях в силу возможности изменения этих самых недокументированных возможностей от версии к версии.
Для использования необходимо импортировать загруженные из репозитория файлы в область, для которой вы хотите собрать статистику.