Система
Получение информации о среде выполнения: использование памяти, статистика сборщика мусора, сведения о CPU и метаданные процесса.
Загрузка
local system = require("system")
Завершение работы
Инициировать завершение системы с кодом выхода. Полезно для терминальных приложений; вызов из работающих акторов завершит всю систему:
local ok, err = system.exit(0)
| Параметр | Тип | Описание |
|---|---|---|
code |
integer | Код выхода (0 = успех), по умолчанию 0 |
Возвращает: boolean, error
Список модулей
Получить все загруженные Lua-модули с метаданными:
local mods, err = system.modules()
Возвращает: table[], error
Каждая таблица модуля содержит:
| Поле | Тип | Описание |
|---|---|---|
name |
string | Имя модуля |
description |
string | Описание модуля |
class |
string[] | Теги классификации модуля |
Статистика памяти
Получить детальную статистику памяти:
local stats, err = system.memory.stats()
Возвращает: table, error
Таблица статистики содержит:
| Поле | Тип | Описание |
|---|---|---|
alloc |
number | Байт выделено и используется |
total_alloc |
number | Всего выделено байт за время работы |
sys |
number | Байт получено от системы |
heap_alloc |
number | Байт выделено в куче |
heap_sys |
number | Байт получено для кучи от системы |
heap_idle |
number | Байт в простаивающих span |
heap_in_use |
number | Байт в активных span |
heap_released |
number | Байт возвращено ОС |
heap_objects |
number | Количество объектов в куче |
stack_in_use |
number | Байт используется аллокатором стека |
stack_sys |
number | Байт получено для стека от системы |
mspan_in_use |
number | Байт структур mspan в использовании |
mspan_sys |
number | Байт получено для mspan от системы |
num_gc |
number | Количество завершённых циклов GC |
next_gc |
number | Целевой размер кучи для следующего GC |
Текущее выделение
Получить количество выделенных байт:
local bytes, err = system.memory.allocated()
Возвращает: number, error
Объекты в куче
Получить количество объектов в куче:
local count, err = system.memory.heap_objects()
Возвращает: number, error
Лимит памяти
Установить лимит памяти (возвращает предыдущее значение):
local prev, err = system.memory.set_limit(1024 * 1024 * 100)
| Параметр | Тип | Описание |
|---|---|---|
limit |
integer | Лимит памяти в байтах, -1 для неограниченного |
Возвращает: number, error
Получить текущий лимит памяти:
local limit, err = system.memory.get_limit()
Возвращает: number, error
Принудительный GC
Принудительно запустить сборку мусора:
local ok, err = system.gc.collect()
Возвращает: boolean, error
Процент GC
Установить целевой процент GC (возвращает предыдущее значение). Значение 100 означает, что GC срабатывает при удвоении кучи:
local prev, err = system.gc.set_percent(200)
| Параметр | Тип | Описание |
|---|---|---|
percent |
integer | Целевой процент GC |
Возвращает: number, error
Получить текущий процент GC:
local percent, err = system.gc.get_percent()
Возвращает: number, error
Количество горутин
Получить количество активных горутин:
local count, err = system.runtime.goroutines()
Возвращает: number, error
GOMAXPROCS
Получить или установить значение GOMAXPROCS:
-- Получить текущее значение
local current, err = system.runtime.max_procs()
-- Установить новое значение
local prev, err = system.runtime.max_procs(4)
| Параметр | Тип | Описание |
|---|---|---|
n |
integer | Если передан, устанавливает GOMAXPROCS (должен быть > 0) |
Возвращает: number, error
Количество CPU
Получить количество логических CPU:
local cpus, err = system.runtime.cpu_count()
Возвращает: number, error
ID процесса
Получить ID текущего процесса:
local pid, err = system.process.pid()
Возвращает: number, error
Имя хоста
Получить имя хоста системы:
local hostname, err = system.process.hostname()
Возвращает: string, error
Состояние сервиса
Получить состояние конкретного супервизируемого сервиса:
local state, err = system.supervisor.state("namespace:service")
| Параметр | Тип | Описание |
|---|---|---|
service_id |
string | ID сервиса (например, "namespace:service") |
Возвращает: table, error
Таблица состояния содержит:
| Поле | Тип | Описание |
|---|---|---|
id |
string | ID сервиса |
status |
string | Текущий статус |
desired |
string | Желаемый статус |
retry_count |
number | Количество попыток |
last_update |
number | Метка времени последнего обновления (наносекунды) |
started_at |
number | Метка времени запуска (наносекунды) |
details |
string | Опциональные детали (форматированные) |
Состояния всех сервисов
Получить состояния всех супервизируемых сервисов:
local states, err = system.supervisor.states()
Возвращает: table[], error
Каждая таблица состояния имеет тот же формат, что и system.supervisor.state().
Разрешения
Системные операции подчиняются вычислению политики безопасности.
| Действие | Ресурс | Описание |
|---|---|---|
system.read |
memory |
Чтение статистики памяти |
system.read |
memory_limit |
Чтение лимита памяти |
system.control |
memory_limit |
Установка лимита памяти |
system.read |
gc_percent |
Чтение процента GC |
system.gc |
gc |
Принудительная сборка мусора |
system.gc |
gc_percent |
Установка процента GC |
system.read |
goroutines |
Чтение количества горутин |
system.read |
gomaxprocs |
Чтение GOMAXPROCS |
system.control |
gomaxprocs |
Установка GOMAXPROCS |
system.read |
cpu |
Чтение количества CPU |
system.read |
pid |
Чтение ID процесса |
system.read |
hostname |
Чтение имени хоста |
system.read |
modules |
Список загруженных модулей |
system.read |
supervisor |
Чтение состояния супервизора |
system.exit |
- | Инициировать завершение системы |
Ошибки
| Условие | Kind | Повторяемо |
|---|---|---|
| Доступ запрещён | errors.PERMISSION_DENIED |
нет |
| Некорректный аргумент | errors.INVALID |
нет |
| Отсутствует обязательный аргумент | errors.INVALID |
нет |
| Менеджер кода недоступен | errors.INTERNAL |
нет |
| Информация о сервисе недоступна | errors.INTERNAL |
нет |
| Ошибка ОС при получении имени хоста | errors.INTERNAL |
нет |
См. Обработка ошибок для работы с ошибками.