Рекомендации по анализу метрик¶
При мониторинге системы рекомендуется в первую очередь обращать внимание на следующие группы метрик:
Note
Рекомендуемые и критические значения для большинства метрик из списка ниже рассчитываются на основе статистических данных промышленной эксплуатации или предварительной статистики, собранной на стенде нагрузочного тестирования. Для получения помощи в настройке таких метрик обратитесь к команде поддержки.
Статистика использования ЦП¶
Рекомендуемые и критические значения для метрик ниже определяются исходя из конкретного проекта. Узнать подробнее о метриках, связанных с использованием процессора, можно в разделе Статистика ЦП.
tnt_cpu_user_time¶
Среднее время использования CPU в секундах, затраченное процессом экземпляра на исполнение логики базы данных. Срабатывает при высокой нагрузке на заданном сервере.
Решение:
Определите место в коде приложения, которое вызывает всплеск нагрузки на CPU. Постоянно высокая загрузка CPU может говорить о нехватке вычислительных мощностей.
tnt_cpu_system_time¶
Среднее время использования CPU в секундах, затраченное процессом экземпляра на исполнение системного вызова.
Решение:
Большое значение метрики указывает на проблему в одной из подсистем.
Одна из причин проблемы – выросшее значение параметра iowait()
, в этой ситуации приложение тратит много
ресурсов на чтение или запись на диск.
Статистика использования памяти¶
Рекомендуемые и критические значения для метрик ниже определяются исходя из конкретного проекта, если не указано иначе.
tnt_info_memory_lua¶
Объем памяти в байтах, используемый средой выполнения Lua-кода. Объем памяти Lua ограничен 2 Гб на каждый экземпляр (более 2 Гб на версиях GC64). Отслеживание метрики помогает предотвратить переполнение памяти и выявить некорректные методы работы с Lua-кодом. Рекомендуемое значение метрики: 25-100 МБ.
Порог срабатывания: значение больше 1 Гб (за исключением версий GC64).
Решение:
Одна из причин большой загруженности памяти – утечка памяти. Чтобы выяснить точную причину, вызовите функцию fiber.top(). Перезагрузите экземпляр после того, как определите причину проблемы.
tnt_runtime_used¶
Объем памяти в байтах, используемый средой выполнения Lua-кода (runtime arena) в данный момент. Среда выполнения хранит:
сетевые буферы;
кортежи, созданные с помощью box.tuple.new();
другие объекты, выделенные приложением, которые не охватывают базовые механизмы Lua.
Отслеживание метрики помогает предотвратить переполнение памяти и выявить некорректные методы работы с Lua-кодом. Рекомендуемое значение метрики близко к 0.
Порог срабатывания: значение заметно больше 0.
Решение:
Обратитесь к разработчику приложения для анализа проблемы.
tnt_info_memory_tx¶
Объем памяти в байтах, используемый активными транзакциями. Для движка vinyl это общий размер всех выделенных объектов и кортежей, закрепленных для этих объектов. Рекомендуемое значение метрики близко к 0.
Порог срабатывания: значение заметно больше 0.
Решение:
Обратитесь к разработчику приложения для анализа проблемы.
tnt_ev_loop_time¶
Продолжительность последней итерации цикла событий (поток TX) в миллисекундах.
Порог срабатывания: значение больше 1 секунды. Большое значение метрики может быть причиной ошибки
Too long WAL write
.
Решение:
Обратитесь к разработчику приложения для анализа проблемы.
Статистика распределения слабов¶
Распределение слабов (slab allocator) – это ключевой механизм хранения кортежей в Tarantool. Статистика распределения слабов отражает использование выделенной оперативной памяти в процентах. Чтобы узнать больше о вариантах использования распределения слабов, обратитесь к документации модуля box.slab.
Полезные метрики:
tnt_slab_quota_used_ratio
– соотношение занятого объема памяти (tnt_slab_quota_used
) к максимальному объему памяти, который можно выделить для слабов (tnt_slab_quota_size
);tnt_slab_arena_used_ratio
– соотношение занятого объема памяти (tnt_slab_arena_used
) к максимальному объему памяти, который можно выделить для кортежей и индексов (tnt_slab_quota_size
);tnt_slab_items_used_ratio
– соотношение занятого объема памяти (tnt_slab_items_used
) к максимальному объему памяти, который можно выделить для кортежей (tnt_slab_items_size
).
Узнать подробнее о метриках, связанных с распределением слабов, можно в разделе Статистика использования памяти для распределения слабов.
Отслеживание статистики распределения слабов позволяет увидеть объем свободной оперативной памяти для хранения
memtx кортежей и индексов на экземпляре.
Если Tarantool превышает ограничения, экземпляр становится недоступен для записи.
Оповещение может помочь понять, когда пора увеличить лимит
box.cfg.memtx_memory
или добавить новое хранилище в кластер vshard
.
Порог срабатывания:
(tnt_slab_quota_used_ratio >= 80)
и(tnt_slab_arena_used_ratio >= 80)
– у экземпляра заканчивается выделенный объем оперативной памяти;(tnt_slab_quota_used_ratio >= 90)
и(tnt_slab_arena_used_ratio >= 90)
– у экземпляра закончился выделенный объем оперативной памяти.
Решение:
Увеличьте лимит памяти Tarantool box.cfg.memtx_memory.
Порог срабатывания:
(tnt_slab_quota_used_ratio >= 80)
и(tnt_slab_items_used_ratio <= 85)
– у экземпляра заканчивается выделенный объем оперативной памяти. Возможна большая фрагментация данных;(tnt_slab_quota_used_ratio >= 90)
и(tnt_slab_items_used_ratio <= 85)
– у экземпляра закончился выделенный объем оперативной памяти. Возможна большая фрагментация данных.
Решение:
Чтобы избавиться от фрагментации, выполните перезагрузку экземпляра. Если после перезагрузки значения метрик не изменились, рассмотрите возможность увеличения лимита памяти Tarantool box.cfg.memtx_memory.
Информация о файберах¶
Рекомендуемые и критические значения для метрик ниже определяются исходя из конкретного проекта. Узнать подробнее о метриках, связанных с файберами, можно в разделе Информация о файберах.
tnt_fiber_csw
– количество контекстных переключений для всех текущих файберов экземпляра;tnt_fiber_amount
– текущее количество файберов в потоке процессора транзакций (потоке TX). Скорость работы снижается, если количество файберов приближается к 10000. Большое значениеtnt_fiber_amount
отразится на значениях метрикtnt_fiber_csw
и tnt_ev_loop_time;tnt_fiber_memused
– объем памяти в байтах, используемый файберами;tnt_fiber_memalloc
– общий объем памяти в байтах, выделенный под файберы.
Решение:
Обратитесь к разработчику приложения для анализа проблемы.
Статистика сетевой активности¶
Рекомендуемые и критические значения для метрик ниже определяются исходя из конкретного проекта. Узнать подробнее о метриках, связанных с работой сети, можно в разделе Статистика сетевой активности.
tnt_info_memory_net
– объем памяти в байтах, используемый для буферов сетевого ввода и вывода. Может быть ограничен параметром конфигурации readahead;tnt_net_sent_total
– исходящий трафик в байтах;tnt_net_received_total
– входящий трафик в байтах;tnt_net_requests_in_progress_total
– общее количество сетевых запросов, обработанных потоком процессора транзакций (поток TX);tnt_net_requests_in_progress_current
– количество сетевых запросов, которые обрабатывает поток процессора транзакций в текущий момент;tnt_net_requests_in_stream_queue_total
– общее количество сетевых запросов, помещенных в очереди стримов за все время потоком процессора транзакций.
tnt_net_requests_total¶
Общее количество входящих сетевых запросов, обработанных с момента запуска экземпляра.
Решение:
При возникновении проблем проверьте сетевую доступность экземпляров Tarantool и наличие нагрузки с внешних сервисов.
tnt_net_requests_current¶
Текущее количество входящих сетевых запросов в обработке. Может быть ограничено параметром конфигурации базы данных net_msg_max.
Решение:
Если количество сетевых запросов достигло лимита, заданного в параметре net_msg_max
(по умолчанию 768), увеличьте
значение этого параметра.
Если Tarantool не успевает обрабатывать поступающие запросы, необходимо провести анализ поступающей нагрузки.
tnt_net_requests_in_stream_queue_current¶
Количество сетевых запросов, ожидающих обработки в очередях стримов в текущий момент.
Решение:
Проверьте скорость работы жесткого диска при помощи системных утилит.
Проведите анализ потока процессора транзакций, используя функцию fiber.top().
tnt_net_connections_total¶
Общее количество входящих сетевых соединений с момента запуска экземпляра.
Решение:
Проверьте профиль нагрузки в функции box.stat.net().
tnt_net_connections_current¶
Текущее количество входящих сетевых соединений.
Решение:
Проверьте профиль нагрузки в функции box.stat.net().