Свой сервер

Спам логов workshop на сервере KF2: причины и обходные пути

Заметка администратора сервера о проблеме конца 2017 - начала 2018 года: выделенный сервер Killing Floor 2, подписанный на множество предметов Workshop, снова и снова пишет строку со всеми номерами подписок. В обновлении к руководству сказано, что баг устранён патчем от 27 марта 2018 (обновление 1062: исправлена ошибка выделенных серверов, при которой через какое-то время создавались логи, потреблявшие много CPU), но обходные пути остаются хорошим примером борьбы с неконтролируемыми логами. См. также Оптимизация выделенного сервера.

Проблема

Чем больше предметов Workshop подключено, тем хуже. На сервере автора с более чем 300 картами одна строка лога содержала все ID, и писалась она каждую секунду круглосуточно. Спустя время это вызывает заметную нагрузку на диск и CPU и огромные бесполезные логи.

Размеры логов Размеры логов всего через несколько часов работы.

Способ 1: запустить клиент Steam до сервера

Если запустить клиент Steam перед сервером, логирование прекращается (и, возможно, обновление предметов Workshop на сервере).

Способ 2: запретить доступ к файлам логов

Вероятно, самый практичный вариант. В \kf2server\Binaries\Win64\logs запретите учётной записи, под которой работает сервер, запись, дополнение и удаление content_log.txt и workshop_log.txt:

  1. Правый клик по файлу, Свойства, вкладка Безопасность, Дополнительно.
  2. Изменить разрешения, Добавить, введите имя пользователя сервера.
  3. Отметьте «Запретить» для «Создание файлов / запись данных», «Создание папок / дозапись данных» и «Удаление».
  4. Подтвердите все окна.

Способ 3: hex-правка steamclient64.dll

Симлинки на NUL в Windows работали плохо. Помогла замена имён файлов логов на недопустимые: файлы создаются (только с первой частью имени), но ничего не записывается:

  1. Сделайте копию Binaries\Win64\steamclient64.dll.
  2. Откройте его в hex-редакторе и найдите content_log.
  3. Замените подчёркивание на двоеточие.
  4. То же сделайте для workshop_log.

Способ 4: убрать steamclient64.dll

Переименуйте его (например, в steamclient64.dll.orig), чтобы можно было откатить. Это почти наверняка сломает обновление предметов Workshop на сервере.

Linux

Создайте символические ссылки на нулевое устройство:

cd <каталог логов>
ln -sf /dev/null content_log.txt
ln -sf /dev/null workshop_log.txt

(В оригинале аргументы указаны в обратном порядке; у ln -sf ЦЕЛЬ ИМЯ_ССЫЛКИ сначала идёт цель.)

Подавление обычного шума в логах

В секции [Core.System] файла PCServer-KFEngine.ini добавьте:

Suppress=NetComeGo
Suppress=Log

NetComeGo забивает основной Launch.log (KFGame\Logs) проверками обновлений каждого предмета Workshop, а Log - общий тег, используемый при проверке состояния каждого предмета при загрузке. Автор на тестовом сервере подавляет ещё и DevOnline. Правила подавления удобны для читаемых логов при отладке модов.

Вопросы и ответы

Исправили ли баг с логированием workshop?
Да. Обновление 1062 (27 марта 2018) исправило ошибку выделенных серверов, из-за которой со временем генерировались логи, сильно нагружающие процессор.
Где находятся разрастающиеся логи?
content_log.txt и workshop_log.txt в каталоге Binaries/Win64/logs сервера.