Выделенный сервер Project Zomboid работает на виртуальной машине Java (OpenJDK 17). В процессе длительной работы сервера, особенно при исследовании карты на быстрых автомобилях, генерации тысяч зомби и подключении десятков модов, серверная часть начинает испытывать микрофризы и резкие скачки потребления оперативной памяти. Без тонкой настройки параметров JVM сервер либо упирается в паузы сборщика мусора (Stop-The-World), либо уничтожается механизмом Linux OOM-killer.
В этом практическом руководстве подробно разбирается расчёт необходимой памяти для сервера Project Zomboid, настройка параметров -Xms и -Xmx, оптимизация сборщика мусора G1GC и мониторинг кучи Java.
Расчёт необходимого объёма RAM для мультиплеера#
Для стабильной работы сервера Project Zomboid требуется корректное разделение памяти между Java Heap (кучей) и системными процессами Linux.
Базовая формула расчёта:
- Базовый минимум для пустого мира: 4 ГБ RAM (загрузка карты Нокс, метаданных комнат и спавна зомби).
- Запас на каждого одновременного игрока: +500 МБ RAM (отслеживание инвентаря, радиуса видимости и сетевых пакетов).
- Пакеты модов (Workshop): +2–4 ГБ RAM в зависимости от количества кастомных автомобилей, оружия и дополнительных карт.
- Резерв операционной системы: минимум 2 ГБ нераспределённой памяти для дискового кэша Linux, сетевых буферов и нативных библиотек C++ движка.
Если физический сервер имеет 16 ГБ RAM, максимальный размер кучи -Xmx следует ограничить значением 12G или 13G. Выделение всех 16 ГБ под Java приведёт к аварийному завершению процесса операционной системой.
Настройка параметров -Xms и -Xmx в start-server.sh#
Конфигурация параметров JVM задаётся в файле запуска ProjectZomboid64.json или в шелл-скрипте start-server.sh. Откройте файл параметров запуска:
nano /opt/pzserver/ProjectZomboid64.json
Установите одинаковые значения начального (-Xms) и максимального (-Xmx) размера кучи, чтобы исключить динамическое расширение памяти во время игры:
{
"mainClass": "zombie/network/GameServer",
"classpath": [
"."
],
"vmArgs": [
"-Xms12G",
"-Xmx12G",
"-XX:+UseG1GC",
"-XX:MaxGCPauseMillis=20",
"-XX:InitiatingHeapOccupancyPercent=45",
"-XX:G1ReservePercent=15",
"-Djava.awt.headless=true"
]
}
Если сервер запускается через системную службу systemd, проверьте файл /etc/systemd/system/zomboid.service и убедитесь, что лимит памяти в MemoryMax соответствует параметрам JVM:
[Service]
MemoryMax=14G
LimitNOFILE=65535
Примените изменения службы:
sudo systemctl daemon-reload
sudo systemctl restart zomboid
При использовании специализированной панели управления серверами выделение памяти и тюнинг флагов сборщика мусора настраиваются через удобный слайдер ресурсов с автоматической защитой от OOM.
Тюнинг сборщика мусора G1GC для устранения фризов#
Стандартный сборщик мусора Java может вызывать зависания сервера длительностью от 500 мс до 3 секунд при переполнении региона Old Generation (старых объектов). Для динамической игры это выражается в рассинхронизации транспорта и атаках невидимых зомби.
Флаги оптимизации G1GC для Project Zomboid:
-XX:+UseG1GC: включает современный сборщик мусора Garbage-First, разделяющий память на независимые регионы.-XX:MaxGCPauseMillis=20: целевой ориентир максимальной паузы в 20 миллисекунд (в пределах одного игрового тика).-XX:InitiatingHeapOccupancyPercent=45: сборка старого поколения запускается заранее, когда заполнено 45% кучи, а не в момент критического исчерпания памяти.-XX:G1ReservePercent=15: резервирует 15% памяти для предотвращения ошибок сбоя аллокации (Evacuation Failure).
Мониторинг использования кучи через jstat и htop#
Для анализа реального расхода памяти процессом Java найдите идентификатор процесса сервера:
pgrep -f "zombie.network.GameServer"
Запустите утилиту мониторинга памяти Java jstat, обновляющуюся каждую секунду:
jstat -gcutil $(pgrep -f "zombie.network.GameServer") 1000
Обратите внимание на столбцы:
- E (Eden): процент заполнения региона новых объектов.
- O (Old): процент заполнения старых объектов.
- FGC (Full GC Count): количество полных остановок мира. В здоровой системе этот счетчик должен быть равен 0.
Для общей оценки потребления памяти системой используйте free -m:
free -h
Типичные ошибки конфигурации памяти и их исправление#
- Сервер внезапно закрывается с кодом
Killed(Exit code 137): Это означает вмешательство Linux OOM-killer. Проверьте системный журнал ядра:
sudo dmesg -T | grep -i oom
Если процесс ProjectZomboid6 был убит, уменьшите -Xmx на 1–2 ГБ, чтобы оставить запас под нативную память ОС.
- Бесконечный рост памяти и утечки из-за модов: Некоторые моды на карты и кастомную броню не выгружают кэш текстур. Запланируйте мягкий перезапуск сервера каждые 12–24 часа по cron:
sudo crontab -l | grep zomboid
Добавьте задачу мягкого рестарта в 05:00 утра:
0 5 * * * /usr/bin/systemctl restart zomboid




