Сборщик мусора и паузы
Почему сервер фризит на пару секунд при нормальном TPS: как работает сборка мусора, как её увидеть в логах и что реально помогает.
Обновлено 13 августа 2026 г.
Java освобождает память паузами: приложение останавливается, сборщик убирает мусор, работа продолжается. Длинная пауза выглядит как фриз всего сервера.
Симптомы
- Средний TPS нормальный, но раз в несколько минут всё замирает на 1–5 секунд.
- В логе Paper:
Can't keep up! Did the system time change, or is the server overloaded?— разбор. - В
spark healthвидно долю времени в GC.
Что влияет
| Фактор | Эффект |
|---|---|
| Размер кучи | Больше куча — длиннее пауза |
| Скорость создания мусора | Плагины и моды, создающие объекты в цикле |
| Сборщик | G1 по умолчанию; ZGC даёт короткие паузы на больших кучах |
| Число ядер | Параллельная сборка быстрее |
Что делать
- Не давать памяти «с запасом побольше». 32 ГБ там, где хватает 8, — это более длинные паузы. Ориентир — пик плюс 30–50% — Сколько памяти нужно.
- Найти источник мусора.
spark heapsummaryпокажет, что заполняет кучу. Часто это конкретный плагин или мод. - Флаги. Настроенный G1 уже стоит в Millida; ручные наборы из интернета чаще вредят — Флаги Aikar.
Чего не делать
Не пытаться «отключить сборщик мусора» — его нет как опции. Не ставить -Xmx больше объёма тарифа: процесс будет убит при попытке выйти за лимит — OutOfMemoryError.