Оптимизация Killing Floor Dedicated Server
Killing Floor Dedicated Server обычно упирается не в “секретные” параметры, а в стабильную сеть, аккуратный KillingFloor.ini, быстрый redirect для кастомных файлов и разумный tickrate. Этот гайд собирает рабочий baseline для KF1-сервера и объясняет, какие значения стоит менять первыми.
Перед правками остановите сервер и сохраните копию
System/KillingFloor.ini. Меняйте параметры по одному блоку и проверяйте сервер после каждой группы изменений.
Быстрый baseline
| Что настраиваем | Рекомендуемое начало | Когда менять |
|---|---|---|
CacheSizeMegs | 128 или 256 | Если много кастомных карт, mutators и долгие смены карты |
NetServerMaxTickRate | 25 или 30 | Если есть запас CPU и стабильный ping |
MaxInternetClientRate | 10000 или 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 MB | CacheSizeMegs=64 |
| 768 MB | CacheSizeMegs=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
Что важно
NetServerMaxTickRate=30- частота обновления сервера. Для публичных серверов обычно достаточно25-30.LanServerMaxTickRate=35- можно держать выше для LAN или закрытых серверов с низким ping.MaxClientRateиMaxInternetClientRate- верхний лимит пропускной способности на игрока.AllowDownloads=True- нужно для выдачи кастомных файлов, но лучше не раздавать большие карты напрямую с игрового процесса.
Если сервер начинает лагать во время плотных волн, сначала снизьте tickrate до 25, а не урезайте все сетевые лимиты сразу.
3. HTTP redirect для карт и mutators
Когда игроки качают кастомные карты с самого игрового сервера, это забирает канал и может портить ping всем остальным. Для production-сервера лучше настроить HTTP redirect.
[IpDrv.HTTPDownload]
RedirectToURL=https://example.com/kf-redirect/
UseCompression=True
Проверочный список:
- Файлы на redirect должны совпадать с файлами сервера.
- Имена и расширения должны быть такими же, как ожидает клиент.
- После обновления карты или mutator обновляйте redirect одновременно с сервером.
- Если игроки получают
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-картах.
6. Uplink, query и видимость сервера
Проверьте, что 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. Логи и эксплуатация
Полностью выключать полезные логи не стоит. Лучше держать отдельный файл лога на каждый инстанс и периодически чистить старые файлы.
Практика для нескольких серверов на одной машине:
- отдельная папка или отдельный конфиг на каждый инстанс
- разные game/query ports
- отдельные log-файлы
- регулярная очистка старых логов и временных файлов
- мониторинг CPU во время поздних волн, а не только на пустом сервере
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.