Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
doc:jroboplc:java_memory [2026/01/17 08:43]
denis создано
doc:jroboplc:java_memory [2026/01/17 17:12] (текущий)
denis
Строка 1: Строка 1:
-====== Настройки памяты jvm ======+====== Настройки памяти jvm ====== 
 + 
 +<note important>​Страница в разработке!</​note>​ 
 + 
 +Могу подсказать **практически оптимальные значения**,​ исходя из того, что ты показал и типичной нагрузки **PLC / daemon-приложения под systemd**, даже без точных метрик. А также — **как быстро проверить,​ что они реально подходят**. 
 + 
 +Я буду исходить из предположений (поправь,​ если что-то не так): 
 + 
 +* Java 21 
 +* долгоживущий сервис (24/7) 
 +* не веб-сервер,​ а логика / протоколы / I/O 
 +* стабильная,​ предсказуемая нагрузка 
 +* важна надёжность,​ а не максимальная пропускная способность 
 + 
 +--- 
 + 
 +## Рекомендуемый стартовый вариант (оптимум «по умолчанию») 
 + 
 +```bash 
 +-Xms256m 
 +-Xmx512m 
 +``` 
 + 
 +👉 **Это уже хороший и разумный выбор**,​ особенно для первого продакшена. 
 + 
 +Почему:​ 
 + 
 +* 256 MB хватает для старта без thrash 
 +* 512 MB — безопасный потолок для логики PLC 
 +* GC будет работать спокойно 
 +* сервис не «сожрёт» систему 
 + 
 +--- 
 + 
 +## Когда стоит изменить значения 
 + 
 +### 🔹 Вариант 1: сервис стабильно живёт и память не растёт 
 + 
 +(лучший сценарий) 
 + 
 +👉 **Зафиксировать heap** 
 + 
 +```bash 
 +-Xms512m 
 +-Xmx512m 
 +``` 
 + 
 +**Плюсы** 
 + 
 +* нет расширений heap 
 +* более стабильный GC 
 +* предсказуемое поведение 
 + 
 +**Минус** 
 + 
 +* всегда заняты 512 MB 
 + 
 +📌 Рекомендую,​ если: 
 + 
 +* сервер не очень ограничен по RAM 
 +* сервис критичный (PLC!) 
 + 
 +--- 
 + 
 +### 🔹 Вариант 2: сервер маломощный (1–2 GB RAM) 
 + 
 +```bash 
 +-Xms128m 
 +-Xmx384m 
 +``` 
 + 
 +📌 Подходит,​ если: 
 + 
 +* VPS / embedded / edge 
 +* мало памяти 
 +* нагрузка умеренная 
 + 
 +⚠️ Следи за `OutOfMemoryError` 
 + 
 +--- 
 + 
 +### 🔹 Вариант 3: высокая нагрузка / много объектов / буферы 
 + 
 +```bash 
 +-Xms512m 
 +-Xmx1024m 
 +``` 
 + 
 +📌 Если: 
 + 
 +* много I/O 
 +* очереди сообщений 
 +* бинарные протоколы 
 +* рост GC-пауз 
 + 
 +--- 
 + 
 +## ⚠️ Очень важный момент (часто забывают) 
 + 
 +### `-Xmx` ≠ реальная память процесса 
 + 
 +Java-процесс потребляет:​ 
 + 
 +| Компонент ​     | Память ​        | 
 +| -------------- | -------------- | 
 +| Heap (`-Xmx`) ​ | 512 MB         | 
 +| Metaspace ​     | 50–150 MB      | 
 +| Thread stacks ​ | 1–2 MB * N     | 
 +| Direct buffers | зависит от I/O | 
 +| JVM internals ​ | ~50 MB         | 
 + 
 +👉 **Реально:​** 
 +`Xmx * 1.3–1.6` 
 + 
 +То есть при `-Xmx512m`:​ 
 + 
 +``` 
 +~700–800 MB RSS 
 +``` 
 + 
 +--- 
 + 
 +## 🔒 Очень рекомендую связать с systemd 
 + 
 +Добавь в `[Service]`:​ 
 + 
 +```ini 
 +MemoryMax=1G 
 +``` 
 + 
 +И тогда:​ 
 + 
 +* JVM не выйдет за пределы 
 +* OOM будет контролируемым 
 +* systemd сможет перезапустить сервис 
 + 
 +📌 Хорошая пара: 
 + 
 +```text 
 +-Xmx512m + MemoryMax=1G 
 +``` 
 + 
 +--- 
 + 
 +## Как точно понять «оптимум» за 10 минут 
 + 
 +### 1️⃣ Посмотреть реальное потребление 
 + 
 +После запуска:​ 
 + 
 +```bash 
 +ps -o pid,rss,cmd -p $(pidof java) 
 +``` 
 + 
 +или 
 + 
 +```bash 
 +systemctl status jrobo 
 +``` 
 + 
 +--- 
 + 
 +### 2️⃣ Включить GC-логи (Java 21) 
 + 
 +На время теста:​ 
 + 
 +```bash 
 +-Xlog:gc 
 +``` 
 + 
 +Если видишь:​ 
 + 
 +* частые GC → мало памяти 
 +* GC редко → можно уменьшать 
 + 
 +--- 
 + 
 +### 3️⃣ Контроль через jcmd (очень полезно) 
 + 
 +```bash 
 +jcmd <pid> GC.heap_info 
 +``` 
 + 
 +--- 
 + 
 +## 🎯 Мой итоговый совет для тебя 
 + 
 +Для **PLC / сервисного приложения**:​ 
 + 
 +### ✔ Рекомендуемый продакшен 
 + 
 +```bash 
 +-Xms512m 
 +-Xmx512m 
 +``` 
 + 
 +
 + 
 +```ini 
 +MemoryMax=1G 
 +``` 
 + 
 +Это: 
 + 
 +* стабильно 
 +* предсказуемо 
 +* безопасно для systemd 
 + 
 +--- 
 + 
 +Если хочешь,​ дальше могу: 
 + 
 +* разобрать **Metaspace и Direct buffers** 
 +* подсказать **GC (G1/ZGC) под Java 21** 
 +* проверить unit-файл на **industrial best practices** 
 + 
 +Скажи:​ 
 + 
 +* сколько RAM у сервера 
 +* сколько потоков примерно 
 +* realtime или soft-realtime 
 + 
 +И я подгоню настройки **почти идеально**. 
  
doc/jroboplc/java_memory.1768628584.txt.gz · Последние изменения: 2026/01/17 08:43 — denis
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0