Настройка памяти
Для стабильной работы системы крайне важно правильно настроить JVM, особенно параметры памяти и сборщика мусора (GC), чтобы обеспечить оптимальную производительность. Сборщики ZGC (Z Garbage Collector) и G1GC (G1 Garbage Collector) предназначены для работы с большими объемами памяти и обеспечивают минимальные задержки. Выбор между ними зависит от ваших технических требований.
Основные принципы настройки
Heap (куча JVM): максимум 50% от общего объема RAM.
Direct Memory (прямая память): 15–25% для индексов (критично при больших объемах данных).
Soft Direct Memory (мягкое ограничение): позволяет JVM гибко управлять использованием прямой памяти.
Метапространство (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→ устанавливает жесткий лимит прямой памяти.-XX:SoftMaxDirectMemorySize=32g→ позволяет JVM адаптивно снижать использование прямой памяти при дефиците ресурсов.-XX:+UseZGC→ активирует сборщик мусора с ультра-низкими задержками.-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 файлами требует увеличения данного параметра:sudo sysctl -w vm.max_map_count=262144Для сохранения изменений после перезагрузки:
echo "vm.max_map_count=262144" | sudo tee -a /etc/sysctl.confНастройте системные лимиты (ulimit)
Для обеспечения стабильности под высокой нагрузкой увеличьте лимиты процессов и открытых файлов:# В файле /etc/security/limits.conf добавьте: * soft nofile 65536 # Максимум открытых файлов (индексы, логи, сокеты) * hard nofile 65536 * soft nproc 65536 # Максимум процессов/потоков (пулы Tomcat, потоки ZGC) * hard nproc 65536После внесения изменений перезагрузите систему или перезайдите в сессию.
Оптимизируйте Transparent HugePages для ZGC
Для достижения наилучшей производительности ZGC установите режимmadvise, что поможет избежать длительных пауз:# Проверка текущего режима cat /sys/kernel/mm/transparent_hugepage/enabled # Установка режима madvise echo madvise | sudo tee /sys/kernel/mm/transparent_hugepage/enabled # Для автоматизации при загрузке создайте systemd-сервис: # /etc/systemd/system/disable-thp.serviceОписание режимов:
always— может вызвать значительные паузы в работе ZGC (не рекомендуется).madvise— оптимальный вариант для ZGC (рекомендуется).never— безопасный, но менее производительный режим.
🔧 Bash-скрипт для автоматической настройки JVM
Рекомендации по настройке SWAP
Для систем с большим объемом памяти, особенно при использовании SSD-накопителей, крайне важна правильная настройка SWAP. Его размер напрямую зависит от объема оперативной памяти (RAM) и предполагаемой нагрузки. Применение 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.
Расчет размера: Обычно достаточно 1–2x объема RAM для стандартных задач, однако в сложных сценариях (высокая многозадачность, огромные индексы) допустимо увеличение до 3x RAM.
Инструкция по добавлению или изменению SWAP
Выполните следующие шаги для настройки swap-файла в Linux:
1. Проверка текущего состояния
2. Создание swap-файла
Например, для создания файла объемом 64 ГБ:
(Замените 65536 на требуемое число мегабайт).
3. Настройка прав доступа
4. Форматирование файла в swap
5. Активация swap
6. Обеспечение автозапуска после перезагрузки
Добавьте запись в /etc/fstab:
7. Финальная проверка
Оптимизация параметров ядра для SWAP
Для минимизации влияния swap на производительность JVM и улучшения работы с индексами (которые используют mmap), рекомендуется скорректировать параметры в /etc/sysctl.conf:
Параметр | Оценка | Комментарий |
|---|---|---|
| ✅ Оптимально | Предотвращает преждевременный сброс страниц heap в swap, что исключает серьезные задержки (page faults) при работе сборщика мусора. |
| ✅ Хорошо | Позволяет ядру дольше удерживать кэш объектов файловой системы, что значительно ускоряет доступ к многочисленным файлам индекса. |
| ⚖️ Хорошо | Обеспечивает плавную фоновую запись данных на диск, избегая резких скачков нагрузки. |
| ✅ Оптимально | Ограничивает объем «грязных» страниц в памяти, минимизируя риск возникновения длительных IO-блокировок. |
| ⚖️ Допустимо | Время жизни грязных страниц (30 сек). На быстрых SSD можно увеличить до 6000 (60 сек) для повышения общей пропускной способности. |
| ⚠️ Минимум | При наличии десятков миллионов документов индексы могут потребовать большего значения. Рекомендуется установить 1 048 576 (1 M) для уверенности. |
Итог
Используйте G1GC для систем с RAM < 64 ГБ и ZGC для более мощных серверов.
Правильно распределите Direct Memory и Soft Direct Memory для баланса производительности и стабильности.
Всегда оставляйте резерв памяти для кэширования файловой системы ОС.
Регулярно мониторьте показатели GC и общее потребление ресурсов.
Настройте SWAP согласно рекомендациям, используя SSD-накопители.
Такая конфигурация обеспечит стабильную и высокопроизводительную работу АРХИВА даже в условиях экстремальных нагрузок. 🔥