Christmas Patriarch

Оптимизация Killing Floor Dedicated Server

Killing Floor Dedicated Server обычно упирается не в “секретные” параметры, а в стабильную сеть, аккуратный KillingFloor.ini, быстрый redirect для кастомных файлов и разумный tickrate. Этот гайд собирает рабочий baseline для KF1-сервера и объясняет, какие значения стоит менять первыми.

Перед правками остановите сервер и сохраните копию System/KillingFloor.ini. Меняйте параметры по одному блоку и проверяйте сервер после каждой группы изменений.

Быстрый baseline

Что настраиваемРекомендуемое началоКогда менять
CacheSizeMegs128 или 256Если много кастомных карт, mutators и долгие смены карты
NetServerMaxTickRate25 или 30Если есть запас CPU и стабильный ping
MaxInternetClientRate10000 или 15000Если игрокам не хватает пропускной способности
HTTP redirectВключитьЕсли игроки скачивают карты с самого сервера
PrecacheСначала оставить как естьМенять только при стабильных фризах или долгих загрузках

Для публичного интернет-сервера обычно лучше стабильные 25-30 tickrate, чем завышенный tickrate с рывками и потерей пакетов.

1. Кеш и память

В KillingFloor.ini найдите секцию [Engine.GameEngine]. Для выделенного сервера с 1 GB RAM и больше можно начать с CacheSizeMegs=256:

[Engine.GameEngine]
CacheSizeMegs=256

Практичная таблица:

RAM сервераЗначение
256 MB или меньшеCacheSizeMegs=32
512 MBCacheSizeMegs=64
768 MBCacheSizeMegs=128
1 GB и большеCacheSizeMegs=256

Не ставьте огромное значение “на всякий случай”. Для старого UE2.5 важнее предсказуемая работа процесса, чем агрессивный кеш.

2. Сетевые лимиты и tickrate

Основной блок для интернет-сервера:

[IpDrv.TcpNetDriver]
MaxClientRate=15000
MaxInternetClientRate=10000
NetServerMaxTickRate=30
LanServerMaxTickRate=35
ServerTravelPause=4.0
SpawnPrioritySeconds=1.0
RelevantTimeout=5.0
KeepAliveTime=0.2
InitialConnectTimeout=200.0
ConnectionTimeout=15.0
AckTimeout=1.0
DownloadManagers=IpDrv.HTTPDownload
AllowDownloads=True

Что важно

Если сервер начинает лагать во время плотных волн, сначала снизьте tickrate до 25, а не урезайте все сетевые лимиты сразу.

3. HTTP redirect для карт и mutators

Когда игроки качают кастомные карты с самого игрового сервера, это забирает канал и может портить ping всем остальным. Для production-сервера лучше настроить HTTP redirect.

[IpDrv.HTTPDownload]
RedirectToURL=https://example.com/kf-redirect/
UseCompression=True

Проверочный список:

  1. Файлы на redirect должны совпадать с файлами сервера.
  2. Имена и расширения должны быть такими же, как ожидает клиент.
  3. После обновления карты или mutator обновляйте redirect одновременно с сервером.
  4. Если игроки получают Package version mismatch, сначала проверьте redirect и кеш клиента.

Смежная инструкция: ошибка Package version mismatch.

4. Precache: включать или отключать

Отключение precache в нескольких подсистемах может ускорить старт или смену карты, но иногда переносит фризы на первый спавн оружия, zed или эффекта.

Тестовый вариант:

[ALAudio.ALAudioSubsystem]
UsePrecache=False

[Engine.LevelInfo]
bNeverPrecache=True

[Engine.NullRenderDevice]
UsePrecaching=False

[D3DDrv.D3DRenderDevice]
UsePrecaching=False

[D3D9Drv.D3D9RenderDevice]
UsePrecaching=False

[OpenGLDrv.OpenGLRenderDevice]
UsePrecaching=False

[PixoDrv.PixoRenderDevice]
UsePrecaching=False

Для dedicated server обычно важнее стабильность. Если после отключения precache появились микрофризы в начале волны или при первом появлении контента, верните прежние значения.

5. Трупы, гибы и лишняя физика

Для KF1 не копируйте блоки вида [KFGame.KFGoreManager] из KF2-гайдов. В Killing Floor 1 чаще смотрят на параметры игрового типа и mutator-настройки, которые реально есть в вашем KillingFloor.ini.

Если в конфиге есть секция [KFMod.KFGameType], можно аккуратно уменьшить время жизни трупов:

[KFMod.KFGameType]
TimeUntilVanished=5.0

Слишком низкие значения выглядят странно для игроков, но могут помочь слабому серверу на больших волнах и custom-картах.

Проверьте, что query включен, а сервер не спрятан настройками NAT или broadcast:

[IpServer.UdpServerQuery]
bEnabled=True

[IpDrv.MasterServerUplink]
DoUplink=True
SendStats=True
ServerBehindNAT=False
DoLANBroadcast=True

Если сервер за NAT, значение ServerBehindNAT зависит от вашей схемы сети. Важнее всего корректно открыть game/query порты и проверить сервер из внешней сети.

7. Пути и базовая целостность

Секция [Core.System] обычно не является “ускорителем”, но помогает быстро увидеть сломанные пути после переноса сервера:

[Core.System]
CachePath=..\Cache
CacheExt=.uxx
Paths=..\System\*.u
Paths=..\Maps\*.rom
Paths=..\StaticMeshes\*.usx
SavePath=..\Save

Не удаляйте Paths ради оптимизации. Если сервер перестал видеть карты, mutators или пакеты, проверьте этот блок первым.

8. Логи и эксплуатация

Полностью выключать полезные логи не стоит. Лучше держать отдельный файл лога на каждый инстанс и периодически чистить старые файлы.

Практика для нескольких серверов на одной машине:

UE2.5 ограниченно использует несколько ядер. Если один процесс упирается в CPU, часто эффективнее разнести несколько серверов по разным ядрам/инстансам, чем искать один магический параметр.

Готовый минимальный профиль

Для стандартного публичного KF1-сервера можно начать так:

[Engine.GameEngine]
CacheSizeMegs=256

[IpDrv.TcpNetDriver]
MaxClientRate=15000
MaxInternetClientRate=10000
NetServerMaxTickRate=30
LanServerMaxTickRate=35
ServerTravelPause=4.0
SpawnPrioritySeconds=1.0
RelevantTimeout=5.0
KeepAliveTime=0.2
InitialConnectTimeout=200.0
ConnectionTimeout=15.0
AckTimeout=1.0
DownloadManagers=IpDrv.HTTPDownload
AllowDownloads=True

[IpServer.UdpServerQuery]
bEnabled=True

[IpDrv.MasterServerUplink]
DoUplink=True
SendStats=True
ServerBehindNAT=False
DoLANBroadcast=True

После этого настройте HTTP redirect, проверьте поздние волны на 6 игроках и только потом экспериментируйте с precache, временем жизни трупов и более высоким tickrate.

Связанные страницы