Выделенный сервер Palworld на движке Unreal Engine 5 страдает от постепенной деградации оперативной памяти. Из-за незавершённой очистки выгруженных из памяти объектов, физических тел сброшенного лута и расчёта путей палов (AI navigation) процесс PalServer-Linux-Test непрерывно наращивает потребление RAM на протяжении 8–24 часов работы.
Если администратор не вмешивается, потребление памяти достигает 100% от объёма VPS, после чего ядро Linux активирует OOM Killer и принудительно убивает процесс сигналом SIGKILL (код возврата 137). Это приводит к повреждению базы данных Level.sav и откату прогресса игроков. Данное руководство разбирает настройку скрипта-сторожа (watchdog), который отслеживает порог заполнения памяти и выполняет мягкий перезапуск через RCON до падения сервера.
Механика утечки: почему Palworld требует регулярного перезапуска#
В архитектуре Unreal Engine 5 многие подсистемы спавна и физики предметов не возвращают аллоцированные страницы памяти обратно операционной системе. При активной игре 10–15 человек сервер Palworld потребляет от 16 до 32 ГБ оперативной памяти уже через 12 часов после старта.
Проверьте реальный объём резидентной памяти (RSS), занятой процессом Palworld:
ps -o pid,rss,%mem,command -C PalServer-Linux-Test
Значение в колонке RSS показывает физически занятую память в килобайтах. Если это значение приближается к общему объёму RAM вашего VPS, сервер находится в критической зоне.
Проверьте, не убивал ли OOM Killer процесс Palworld ранее:
dmesg -T | grep -E "(Out of memory|killed process.*PalServer)"
Корректная последовательность сохранения через RCON#
Никогда не перезапускайте сервер Palworld принудительным kill -9 или мгновенным выключением службы. В этот момент игроки могут перемещать предметы в сундуках или ловить палов, что вызовет рассинхронизацию таблиц сохранения.
Для безопасной остановки подключитесь к RCON и выполните двухэтапную процедуру:
rcon -a 127.0.0.1:25575 -p "ADMIN_PASSWORD" "Save"
rcon -a 127.0.0.1:25575 -p "ADMIN_PASSWORD" "Shutdown 60 Server_restarting_due_to_memory_maintenance"
Команда Save принудительно сбрасывает транзакции мира на диск, а Shutdown 60 выводит предупреждение на экраны игроков и корректно финализирует процесс через 60 секунд.
Создание скрипта-сторожа (Watchdog) по порогу RAM#
Вместо того чтобы перезапускать сервер вслепую по расписанию раз в сутки (что может прервать игру в разгар рейда), создайте интеллектуальный скрипт мониторинга. Он сработает только тогда, когда потребление RAM превысит безопасный порог (например, 85%).
Создайте скрипт /opt/scripts/palworld-watchdog.sh:
cat << 'EOF' | sudo tee /opt/scripts/palworld-watchdog.sh
#!/usr/bin/env bash
set -euo pipefail
THRESHOLD=85
CURRENT_MEM=$(free | awk '/Mem:/ {printf("%d"), $3/$2 * 100}')
RCON_PASS="ADMIN_PASSWORD"
if [ "$CURRENT_MEM" -gt "$THRESHOLD" ]; then
echo "Memory usage at ${CURRENT_MEM}% exceeds ${THRESHOLD}%. Triggering graceful restart."
rcon -a 127.0.0.1:25575 -p "$RCON_PASS" "Broadcast Server_restarting_in_60s_Memory_cleanup" || true
rcon -a 127.0.0.1:25575 -p "$RCON_PASS" "Save" || true
rcon -a 127.0.0.1:25575 -p "$RCON_PASS" "Shutdown 60" || true
sleep 70
sudo systemctl restart palworld
else
echo "Memory usage normal: ${CURRENT_MEM}%."
fi
EOF
sudo chmod +x /opt/scripts/palworld-watchdog.sh
Настройка таймера systemd для регулярной проверки#
Запускайте проверку скрипта-сторожа каждые 15 минут с помощью системного таймера systemd.
Создайте юнит службы:
cat << 'EOF' | sudo tee /etc/systemd/system/palworld-watchdog.service
[Unit]
Description=Palworld Memory Watchdog
After=network.target
[Service]
Type=oneshot
ExecStart=/opt/scripts/palworld-watchdog.sh
User=root
EOF
Создайте юнит таймера:
cat << 'EOF' | sudo tee /etc/systemd/system/palworld-watchdog.timer
[Unit]
Description=Run Palworld Memory Watchdog every 15 minutes
[Timer]
OnBootSec=10min
OnUnitActiveSec=15min
Persistent=true
[Install]
WantedBy=timers.target
EOF
Активируйте таймер:
sudo systemctl daemon-reload
sudo systemctl enable --now palworld-watchdog.timer
systemctl list-timers palworld-watchdog.timer
Теперь, если в часы пикового онлайна игра начнет заполнять оперативную память, сервер автоматически предупредит игроков, сохранит мир и выполнит чистый перезапуск за 60 секунд до того, как операционная система успеет аварийно завершить процесс.
Для многопользовательских кластеров и турнирных серверов автоматическое отслеживание аномалий памяти и фоновая ротация процессов реализованы в рамках панели управления серверами, избавляя от необходимости писать самодельные скрипты перезапуска.




