Настройка памяти
Для стабильной работы важно правильно настроить JVM, особенно параметры памяти и сборщика мусора (GC), чтобы обеспечить оптимальную производительность. Оба сборщика — ZGC (Z Garbage Collector) и G1GC (G1 Garbage Collector) — предназначены для работы с большими кучами и обеспечивают низкие задержки. Выбор между ними зависит от ваших требований к производительности.
Основные принципы настройки:
Heap (куча JVM): Максимум 50% от общей RAM.
Direct Memory (прямая память): 15–25% для индексов (особенно при больших объемах данных).
Soft Direct Memory (мягкое ограничение): Позволяет JVM гибко управлять использованием direct memory.
Метапространство (Metaspace): 512 МБ – 2 ГБ.
Кэш ОС для файловой системы: 25–35% RAM для ускорения доступа к индексам и данным.
Выбор сборщика мусора (GC)
Объем RAM | Рекомендуемый GC |
---|---|
2–64 ГБ | G1GC |
64–512 ГБ | ZGC |
✅ G1GC (< 64 ГБ RAM)
G1GC хорошо балансирует между низкими паузами и пропускной способностью.
Конфигурация для G1GC:
🚀 ZGC (> 64 ГБ RAM)
ZGC обеспечивает ультра-низкие паузы (до 10 мс) и отлично подходит для больших куч.
Конфигурация для ZGC:
Конфигурация памяти в зависимости от RAM
RAM | Heap (Xmx/Xms) | DirectMemory | SoftDirectMemory | Парсер |
---|---|---|---|---|
2 ГБ | 1 ГБ | 256 МБ | 128 МБ | 512 МБ |
8 ГБ | 4 ГБ | 2 ГБ | 1 ГБ | 1 ГБ |
32 ГБ | 16 ГБ | 6 ГБ | 4 ГБ | 2 ГБ |
128 ГБ | 64 ГБ | 24 ГБ | 16 ГБ | 4 ГБ |
512 ГБ | 256 ГБ | 100 ГБ | 64 ГБ | 8 ГБ |
Полный пример конфигурации JVM (128 ГБ RAM)
Пример конфигурации, которая балансирует использование heap, direct memory, индексов и парсера с использованием ZGC:
Объяснение параметров:
-Xms64g -Xmx64g
→ Выделяет 50% от RAM для heap.-XX:MaxDirectMemorySize=48g
→ Жесткое ограничение direct memory.-XX:SoftMaxDirectMemorySize=32g
→ Позволяет JVM гибко уменьшать direct memory при нехватке ресурсов.-XX:+UseZGC
→ GC с ультра-низкими задержками.-XX:+AlwaysPreTouch
→ Улучшает предсказуемость работы памяти.-XX:+UseStringDeduplication
→ Уменьшает расход памяти для строк.-XX:+ParallelRefProcEnabled
→ Ускоряет обработку ссылок (WeakReference, SoftReference).-XX:+DisableExplicitGC
→ БлокируетSystem.gc()
для предотвращения внезапных пауз.-XX:SoftMaxHeapSize=48g
→ Позволяет JVM снижать использование heap при необходимости.-XX:MaxGCPauseMillis=500
→ Задаёт целевую задержку GC (настраиваемо).-Dindex.storage.type=mmap
→ Оптимизирует работу индексов с использованием memory-mapped файлов.-Dparser.memory.limit=8g
→ Ограничивает память, выделенную для парсера.
Дополнительные рекомендации
Оставьте достаточно памяти для файлового кэша АРХИВА активно использует файловый ввод-вывод, поэтому 25–35% RAM лучше зарезервировать для ОС.
Используйте логирование GC Включите журналирование, чтобы следить за сборкой мусора:
-Xlog:gc*:file=/var/log/gc.log:time,uptime:filecount=10,filesize=100MНастройте max_map_count для индексов
Memory-mapped файлы требуют увеличенногоmax_map_count
:sudo sysctl -w vm.max_map_count=262144Чтобы сделать изменение постоянным:
echo "vm.max_map_count=262144" | sudo tee -a /etc/sysctl.conf
🔧 Bash-скрипт для автоматической настройки JVM
Рекомендации по настройке SWAP
Для систем с большим объемом памяти, особенно с SSD дисками, важно правильно настроить swap. Размер swap зависит от объема оперативной памяти (RAM) и предполагаемой нагрузки. Использование SSD-дисков для swap значительно ускоряет операции с памятью, так как SSD обеспечивают гораздо более высокую скорость чтения/записи по сравнению с традиционными жесткими дисками.
Рекомендации по настройке SWAP в зависимости от объема RAM
RAM (GB) | Рекомендуемый размер SWAP | Тип диска |
---|---|---|
2–8 ГБ | 2–4 ГБ | SSD / HDD |
8–16 ГБ | 4–8 ГБ | SSD / HDD |
16–32 ГБ | 8–16 ГБ | SSD |
32–64 ГБ | 16–32 ГБ | SSD |
64–128 ГБ | 32–64 ГБ | SSD |
128–256 ГБ | 64–128 ГБ | SSD |
> 256 ГБ | 128–256 ГБ | SSD |
Рекомендации: Для высоконагруженных систем или при использовании больших наборов данных и индексов рекомендуется использовать SSD для swap, так как скорость обмена данными с SSD значительно выше, чем с HDD.
Размер swap: Обычно рекомендуется устанавливать swap размером 1–2x объем RAM для систем с менее интенсивной нагрузкой, но для более сложных сценариев (например, многозадачность или работа с большими индексами) можно установить swap до 3x RAM.
Как добавить или изменить swap
Для добавления или изменения swap на Linux, выполните следующие шаги:
1. Проверка текущего размера swap
2. Создание swap-файла
Для создания swap-файла, например, размером 64 ГБ:
Замените 65536
на нужное количество блоков для swap в МБ (64 ГБ = 65536 МБ).
3. Установка правильных прав доступа к файлу
4. Создание swap-формата для файла
5. Включение swap
6. Постоянное включение swap после перезагрузки
Добавьте запись в файл /etc/fstab
, чтобы swap был включен после перезагрузки:
7. Проверка нового размера swap
Рекомендации по параметрам swap
swappiness: Настройка
swappiness
влияет на то, когда система начинает использовать swap.
Рекомендуется устанавливать значениеswappiness=10
, чтобы система использовала swap только при недостатке памяти.Для изменения
swappiness
временно:sudo sysctl vm.swappiness=10Чтобы сделать изменения постоянными, добавьте строку в файл
/etc/sysctl.conf
:vm.swappiness=10
Итог
Используйте G1GC для RAM < 64 ГБ, ZGC для больших систем.
Настройте Direct Memory и Soft Direct Memory для лучшего баланса между производительностью и потреблением ресурсов.
Оставляйте место для ОС и кэширования файловой системы.
Мониторьте GC и потребление памяти для своевременной оптимизации.
Используйте SWAP при больших объемах памяти.
Такое конфигурирование обеспечит стабильную работу АРХИВА даже в высоконагруженных сценариях. 🔥