Версия:

Вложенный модуль box.slab

Вложенный модуль box.slab

Общие сведения

Вложенный модуль box.slab предоставляет доступ к статистике распределения slab. Механизм распределения slab представляет собой основной тип распределения для хранения кортежей. Такое распределение можно использовать для отслеживания использования памяти и фрагментации памяти.

Индекс

Ниже приведен перечень всех функций модуля box.slab.

Имя Использование
box.runtime.info() Отображение отчета по использованию памяти во время исполнения Lua-кода
box.slab.info() Отображение обобщенного отчета по использованию памяти для распределения slab
box.slab.stats() Отображение подробного отчета по использованию памяти для распределения slab
box.runtime.info()

Отображение отчета по использованию памяти (в байтах) во время исполнения Lua-кода.

возвращается:
  • lua – это размер динамической памяти сборщика мусора в Lua;
  • maxalloc – это максимальная квота памяти, которую можно выделить для Lua;
  • used – объем памяти, используемый Lua в данный момент.
тип возвращаемого значения:
 

таблица

Пример:

tarantool> box.runtime.info()
    ---
    - lua: 913710
      maxalloc: 4398046510080
      used: 12582912
    ...
    tarantool> box.runtime.info().used
    ---
    - used: 12582912
    ...
box.slab.info()

Отображение обобщенного отчета по использованию памяти (в байтах) для распределения slab.

Данный отчет используется для оценки риска нехватки памяти: риск высокий, если высоки значения и arena_used_ratio, и quota_used_ratio (90-95%).

Если значение quota_used_ratio низкое, то высокое значение arena_used_ratio и/или items_used_ratio указывает на низкую фрагментацию памяти (т.е. память используется эффективно).

Если значение quota_used_ratio высокое (достигает 100%), то низкое значение arena_used_ratio (50-60%) указывает на значительную фрагментацию памяти. Весьма вероятно, что в данном случае непосредственного риска нехватки памяти нет, но такую проблему следует тщательно рассмотреть. Например, есть риск того, что вся квота памяти используется на кортежи, а для части индекса slab’ов нет. Или все slab’ы выделены на хранение кортежей, а в действительности все они наполовину пусты.

возвращается:
  • items_size – это общий объем памяти (включая выделенные, но в данный момент свободные slab’ы), который используется только для кортежей, а не для индексов;
  • items_used_ratio = items_used / slab_count * slab_size (это slab’ы, которые используются только для кортежей, не для индексов);
  • quota_size is the maximum amount of memory that the slab allocator can use for both tuples and indexes (as configured in the memtx_memory parameter, the default is 2^28 bytes = 268,435,456 bytes);
  • quota_used_ratio = quota_used / quota_size;
  • arena_used_ratio = arena_used / arena_size;
  • items_used – это эффективный объем памяти (не включая выделенные, но в данный момент свободные slab’ы), который используется только для кортежей, а не для индексов;
  • quota_used – это объем памяти, уже выделенный для распределения slab;
  • arena_size – это общий объем памяти, используемый для кортежей и индексов (включая выделенные, но в данный момент свободные slab’ы);
  • arena_used – это эффективный объем памяти, используемый для кортежей и индексов (не включая выделенные, но в данный момент свободные slab’ы).
тип возвращаемого значения:
 

таблица

Пример:

tarantool> box.slab.info()
    ---
    - items_size: 228128
      items_used_ratio: 1.8%
      quota_size: 1073741824
      quota_used_ratio: 0.8%
      arena_used_ratio: 43.2%
      items_used: 4208
      quota_used: 8388608
      arena_size: 2325176
      arena_used: 1003632
    ...

    tarantool> box.slab.info().arena_used
    ---
    - 1003632
    ...
box.slab.stats()

Отображение подробного отчета об использовании памяти (в байтах) для распределения slab. Отчет разбивается на группы по размеру элементов данных, а также по размеру slab’а (64 байта, 136 байтов и т.д.). Отчет включает в себя информацию о памяти, выделенной на хранение и кортежей, и индексов.

возвращается:
  • mem_free – это выделенная, но не используемая в данный момент память;
  • mem_used – это память, используемая для хранения элементов данных (кортежей и индексов);
  • item_count – это количество хранимых элементов;
  • item_size – это размер каждого элемента данных;
  • slab_count – это количество выделенных slab’ов;
  • slab_size – это размер каждого выделенного slab’а.
тип возвращаемого значения:
 

таблица

Пример:

Ниже представлен пример отчета для первой группы:

tarantool> box.slab.stats()[1]
    ---
    - mem_free: 16232
      mem_used: 48
      item_count: 2
      item_size: 24
      slab_count: 1
      slab_size: 16384
    ...

В отчете показано, что есть два элемента данных (item_count = 2), которые хранятся в одном (slab_count = 1) 24-байтовом slab’е (item_size = 24), поэтому объем используемой памяти mem_used = 2 * 24 = 48 байтов. Кроме того, размер slab’а slab_size составляет 16384 байта, из которых 16384 - 48 = 16232 байта свободны (mem_free).

В полном отчете будет статистика по использованию памяти во всех группах:

tarantool> box.slab.stats()
    ---
    - - mem_free: 16232
        mem_used: 48
        item_count: 2
        item_size: 24
        slab_count: 1
        slab_size: 16384
      - mem_free: 15720
        mem_used: 560
        item_count: 14
        item_size: 40
        slab_count: 1
        slab_size: 16384
      <...>
      - mem_free: 32472
        mem_used: 192
        item_count: 1
        item_size: 192
        slab_count: 1
        slab_size: 32768
      - mem_free: 1097624
        mem_used: 999424
        item_count: 61
        item_size: 16384
        slab_count: 1
        slab_size: 2097152
      ...

Общий объем используемой памяти mem_used для всех групп в данном отчете равен arena_used в отчете box.slab.info().