server thread hitch warning: интервал таймера X миллисекунд, исправление

Видите 'server thread hitch warning: timer interval of X milliseconds'? Что это означает, какие причины, как найти виновника с помощью профайлера и когда это игнорировать.

В консоли сервера или в txAdmin:

text
server thread hitch warning: timer interval of 1250 milliseconds

Сервер обычно работает много раз в секунду. Эта строка говорит, что один разрыв между тиками был намного длиннее, чем должно быть, здесь 1250 мс. Этот гайд охватывает, что это означает, обычные причины, как найти скрипт, стоящий за ним, с помощью профайлера, и когда вы можете это игнорировать.

Что это означает

Сервер запускает ваши ресурсы на одном главном потоке, и он наблюдает, как долго это занимает, чтобы вернуться. Когда что-то держит этот поток занятым, следующий тик опаздывает, и сервер выводит это предупреждение с длиной задержки.

Игроки замечают сбой как лаг: действия, которые требуют момента ответа, транспортные средства, которые прыгают назад, и события, которые приходят поздно. Одно число говорит мало. Посмотрите, как часто оно появляется и насколько оно становится больше.

Частые причины

  • Тяжелый серверный скрипт. Цикл, который проходит через всех игроков, все транспортные средства или большую таблицу, запускаемый снова и снова, держит поток занятым. Цикл while true do с Wait(0) на сервере - типичный нарушитель.
  • Медленная работа с базой данных. Ресурс, который просит базу данных на много данных или запускает очень медленный запрос, держит поток в ожидании или обработке большого результата. Проверьте медленные предупреждения запроса, которые выводит oxmysql, и убедитесь, что столбцы, которые вы ищете, имеют индекс.
  • Слишком много объектов. Тысячи транспортных средств, пешеходов или объектов, которые скрипт создает и никогда не удаляет, нагружают сервер, особенно с OneSync.
  • Медленная машина. Занятая CPU, VPS, который делит свои ядра с другими, медленный или полный диск или антивирус, сканирующий папку сервера, добавляют задержку, за которую ни один скрипт не ответственен.
  • Очень большое количество событий. Скрипт, который запускает событие для каждого игрока много раз в секунду, требует времени с обеих сторон.
  • Сама консоль. В Windows щелчок внутри окна консоли сервера может приостановить процесс, так как окно входит в режим выбора текста. Если ваши предупреждения о сбое приходят как один длинный разрыв и затем останавливаются, проверьте, не щелкли ли вы в нем. Нажмите Enter или Escape в окне, чтобы отпустить его.

Совет: сравните время предупреждения с тем, что вы делали. Сбой каждый раз, когда кто-то открывает определенное меню, или в одно и то же время каждый час, указывает на ресурс, стоящий за этим действием или запланированную задачу.

Найдите виновника с помощью профайлера

FiveM имеет встроенный профайлер. Вы используете его в консоли сервера (Live Console в txAdmin или ваш терминал). Начните запись нескольких кадров, пока проблема происходит:

text
profiler record 500

Когда запись готова, проверьте ее и откройте:

text
profiler status
profiler view

Средство просмотра показывает, какие ресурсы и какие функции занимали время. Ищите ресурс, чья полоса намного длиннее, чем у других, затем откройте его функции, чтобы увидеть, какой из них тратит время. Проверьте документацию FiveM на точные команды и параметры вашей версии артефакта, так как профайлер имеет больше параметров, чем указано здесь, таких как сохранение записи в файл.

Если вы не поймали проблему в момент, запишите снова, когда это происходит, или когда у вас много игроков онлайн. Запись, пока сервер пуст, обычно ничего полезного не показывает.

Второй способ: остановите ресурсы один за другим

Когда вы не хотите читать выход профайлера, найдите виновника путем исключения. В консоли сервера:

text
stop my_script

Подождите несколько минут и проверьте, остановятся ли предупреждения. Запустите его снова с ensure my_script. Начните с ресурсов, которые много циклируются (рабочие места, HUD, все с "sync" или "tick" в названии) и самые последние, которые вы добавили.

Исправьте причину

  • Тяжелые циклы: сделайте циклы сервера более долгим ожиданием. Почти ничто не нуждается в Wait(0) на сервере. Wait(1000) или больше часто достаточно.
lua
CreateThread(function()
    while true do
        Wait(5000)
        -- check things every 5 seconds, not every tick
    end
end)
  • База данных: используйте вызовы await только там, где вам нужен результат, избегайте запросов внутри цикла и напишите один запрос, который возвращает много строк, вместо многих запросов, которые возвращают одну. Добавьте индекс к столбцу, который вы ищете в большой таблице.
  • Объекты: удалите транспортные средства и объекты, которые скрипт создает, когда они больше не нужны, и установите ограничение на количество, которое оно может создать.
  • Оборудование: если сервер имеет несколько ресурсов с небольшими сбоями и ничто не выделяется, посмотрите на использование CPU, дисковое пространство и то, работают ли на одной машине другие программы.
  • Обновление: старые артефакты сервера получают исправления производительности. Смотрите update FiveM server artifacts.

Когда это игнорировать

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

Также игнорируйте редкое, небольшое число (несколько сотен миллисекунд), которое появляется время от времени, такое как перезагрузка большого ресурса. Действуйте, когда предупреждения появляются пока игроки онлайн, повторяйте или достигайте секунд.

Контрольный список

Симптом Решение
Предупреждения только в первую минуту Нормально: ресурсы загружаются
Одно большое предупреждение, затем ничего Проверьте, не щелкли ли вы в окне консоли (Windows)
Повторяющиеся предупреждения с игроками онлайн Запишите с profiler record 500 и прочитайте с profiler view
Один ресурс выделяется Исправьте его циклы сервера или остановите и попросите его автора
Предупреждения после действия с интенсивным запросом Добавьте индекс и сократите количество запросов
Много объектов Удалите созданные транспортные средства и объекты по окончании
Ни один скрипт не выделяется Проверьте CPU, диск и антивирус на машине и обновите артефакты

Короткие ответы

Что означает 'server thread hitch warning'?

Основной поток сервера не вернулся к работе вовремя. Он сообщает, сколько миллисекунд длился разрыв, и в течение этого времени игроки могут ощутить лаг или перетаскивание.

Является ли предупреждение при запуске сервера проблемой?

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

Какое большое число является проблемой?

Несколько сотен миллисекунд время от времени - это незначительно. Секунды или постоянный поток предупреждений означают, что что-то блокирует сервер, и вы должны это найти.

Скрипты без этой проблемы

Crypto MiningКупите склад, соберите фермы по деталям и майните монеты на живом рынке.Смотреть скрипт →CCTV Security CamerasУстанавливаемые камеры, планшет с мультиэкраном в реальном времени и распечатанные фото-улики.Смотреть скрипт →Advanced BoostingУгон машин на заказ через планшет: контракты от класса D до S+, команды и живая очередь.Смотреть скрипт →

Читайте также