Хостинг · Производительность

Сборщик мусора и паузы

Почему сервер фризит на пару секунд при нормальном 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 даёт короткие паузы на больших кучах
Число ядерПараллельная сборка быстрее

Что делать

  1. Не давать памяти «с запасом побольше». 32 ГБ там, где хватает 8, — это более длинные паузы. Ориентир — пик плюс 30–50% — Сколько памяти нужно.
  2. Найти источник мусора. spark heapsummary покажет, что заполняет кучу. Часто это конкретный плагин или мод.
  3. Флаги. Настроенный G1 уже стоит в Millida; ручные наборы из интернета чаще вредят — Флаги Aikar.

Чего не делать

Не пытаться «отключить сборщик мусора» — его нет как опции. Не ставить -Xmx больше объёма тарифа: процесс будет убит при попытке выйти за лимит — OutOfMemoryError.