> ## Documentation Index
> Fetch the complete documentation index at: https://docs.lampac.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Режим низкой памяти в Lampac NextGen

> Включите lowMemoryMode для экономии ~140 МБ RSS. Узнайте, что меняется внутри и как настроить GC для оптимальной производительности.

Режим низкой памяти (`lowMemoryMode`) позволяет снизить потребление RAM сервера Lampac NextGen примерно на 140 МБ в типичной установке. Это достигается за счёт уменьшения внутренних пулов буферов, отключения агрессивного кеширования и более частой сборки мусора. Режим подходит для VPS с ограниченным объёмом памяти или для Docker-контейнеров с жёсткими лимитами.

## Включение режима

Добавьте параметр в корень `init.conf` или `init.yaml`. Изменение применяется через горячую перезагрузку без рестарта сервера.

<CodeGroup>
  ```json init.conf theme={null}
  {
    "lowMemoryMode": true
  }
  ```

  ```yaml init.yaml theme={null}
  ---
  lowMemoryMode: true
  ```
</CodeGroup>

По умолчанию значение `false`. В `base.conf` режим включён (`true`) с комментарием для небольших инсталляций.

## Что меняется внутри

<Accordion title="Уменьшение пулов буферов и аллокаций">
  Снижаются размеры пулов для JSON-сериализации, строковых буферов и потоков. Это уменьшает базовый RSS процесса.
</Accordion>

<Accordion title="GeoIP через memory-mapped файлы">
  Базы GeoIP (`GeoLite2-Country.mmdb`, `GeoLite2-ASN.mmdb`) открываются через memory-mapped файл вместо полной загрузки в оперативную память.
</Accordion>

<Accordion title="ThreadPool без агрессивного минимума">
  Не поднимается агрессивный минимум пула потоков. Количество рабочих потоков остаётся на уровне, который задаёт .NET runtime автоматически.
</Accordion>

<Accordion title="NetVips без оперативного кеша">
  Для проксирования изображений библиотека NetVips работает без внутреннего оперативного кеша, снижая потребление RAM при обработке постеров и скриншотов.
</Accordion>

<Accordion title="Уплотнение кучи при простое">
  При отсутствии активной нагрузки чаще срабатывает уплотнение кучи (включая Large Object Heap), что предотвращает фрагментацию памяти.
</Accordion>

<Accordion title="Отключение второстепенных кешей модулей">
  Часть модулей отключает внутренние кеши, которые не критичны для работы. Это может незначительно повлиять на задержку при повторных запросах.
</Accordion>

## Настройка GC для оптимальной производительности

Раздел `GC` в `init.conf` управляет поведением сборщика мусора .NET. Эти параметры особенно актуальны при включённом `lowMemoryMode`.

```json theme={null}
{
  "GC": {
    "Concurrent": true,
    "ConserveMemory": 0,
    "HighMemoryPercent": 90,
    "RetainVM": false
  }
}
```

| Параметр            | Тип  | По умолчанию | Описание                                                                           |
| ------------------- | ---- | ------------ | ---------------------------------------------------------------------------------- |
| `Concurrent`        | bool | `true`       | Включить параллельную сборку мусора в отдельном потоке                             |
| `ConserveMemory`    | int  | `0`          | Агрессивность экономии памяти: от `0` (минимум) до `9` (максимум)                  |
| `HighMemoryPercent` | int  | `90`         | Порог заполнения памяти в процентах, при котором запускается принудительная сборка |
| `RetainVM`          | bool | `false`      | Сохранять виртуальную память при возврате физической памяти ОС                     |

<Tip>
  Для VPS с 512 МБ RAM или меньше рекомендуется включить `lowMemoryMode: true` и установить `ConserveMemory: 1` или `2`. Это сделает сборку мусора более агрессивной и предотвратит OOM-киллер в контейнере.
</Tip>

## Компромисс

<Tip>
  При очень высокой параллельной нагрузке возможно незначительное снижение пиковой пропускной способности по сравнению с режимом по умолчанию. Для домашнего использования или сервера с небольшим числом пользователей разница незаметна.
</Tip>
