aviso de hitch do thread do servidor: intervalo de timer de X milissegundos, correção
Vendo 'server thread hitch warning: timer interval of X milliseconds'? O que significa, o que causa, como encontrar o culpado com o profiler e quando ignorar.
No console do servidor ou no txAdmin:
server thread hitch warning: timer interval of 1250 millisecondsO servidor normalmente marca muitas vezes por segundo. Esta linha diz que um intervalo entre marcas foi muito mais longo do que deveria ser, aqui 1250 ms. Este guia cobre o que significa, as causas comuns, como encontrar o script por trás disso com o profiler e quando você pode ignorá-lo.
O que significa
O servidor executa seus recursos em uma única thread principal, e observa quanto tempo leva para voltar. Quando algo mantém essa thread ocupada, o próximo tick é atrasado, e o servidor imprime este aviso com o comprimento do atraso.
Os jogadores notam um hitch como lag: ações que levam um momento para responder, veículos que pulam para trás e eventos que chegam atrasados. Um número sozinho diz pouco. Observe com que frequência aparece e quão grande fica.
Causas comuns
- Um script pesado do servidor. Um loop que passa por todos os jogadores, todos os veículos ou uma tabela grande, executado repetidamente, mantém a thread ocupada. Um loop
while true docomWait(0)no servidor é um típico culpado. - Trabalho lento de banco de dados. Um recurso que pede ao banco de dados um monte de dados, ou executa uma query muito lenta, mantém a thread esperando ou processando um grande resultado. Verifique os avisos de query lenta que oxmysql imprime, e certifique-se de que as colunas que você procura têm um índice.
- Muitas entidades. Milhares de veículos, peds ou objetos que um script spawna e nunca remove sobrecarregam o servidor, especialmente com OneSync.
- Uma máquina lenta. Uma CPU ocupada, um VPS que compartilha seus núcleos com outros, um disco lento ou cheio, ou um antivírus varrendo sua pasta de servidor, todos adicionam atraso que nenhum script é responsável.
- Um número muito grande de eventos. Um script que dispara um evento para cada jogador muitas vezes por segundo custa tempo nos dois lados.
- O próprio console. No Windows, clicar dentro da janela do console do servidor pode pausar o processo, quando a janela entra no modo de seleção de texto. Se seus avisos de hitch vêm como um intervalo longo e depois para, verifique se você não clicou nela. Pressione Enter ou Escape na janela para liberá-la.
Dica: compare o tempo do aviso com o que você fez. Um hitch cada vez que alguém abre um certo menu, ou no mesmo minuto a cada hora, aponta para o recurso por trás dessa ação ou para uma tarefa agendada.
Encontre o culpado com o profiler
O FiveM tem um profiler integrado. Você o usa no console do servidor (o Console ao Vivo no txAdmin, ou seu terminal). Comece a gravar um número de frames enquanto o problema está acontecendo:
profiler record 500Quando a gravação terminar, verifique-a e abra-a:
profiler status
profiler viewO visualizador mostra quais recursos e quais funções levaram o tempo. Procure por um recurso cuja barra é muito mais longa que a dos outros, depois abra suas funções para ver qual gasta o tempo. Verifique a documentação do FiveM para os comandos e opções exatos de sua versão de artefato, pois o profiler tem mais opções do que listadas aqui, como salvar uma gravação em arquivo.
Se você não pegar o problema no ato, grave novamente quando estiver acontecendo, ou quando você tiver muitos jogadores online. Uma gravação enquanto o servidor está vazio geralmente não mostra nada útil.
Uma segunda forma: pare recursos um por um
Quando você não quer ler a saída do profiler, encontre o culpado por eliminação. No console do servidor:
stop my_scriptAguarde alguns minutos e verifique se os avisos param. Inicie-o novamente com ensure my_script. Comece com recursos que fazem muito loop (jobs, HUDs, qualquer coisa com "sync" ou "tick" no nome) e os mais recentes que você adicionou.
Corrija a causa
- Loops pesados: faça loops de servidor esperar mais. Quase nada precisa de
Wait(0)no servidor.Wait(1000)ou mais é geralmente suficiente.
CreateThread(function()
while true do
Wait(5000)
-- check things every 5 seconds, not every tick
end
end)- Banco de dados: use chamadas
awaitapenas onde você precisa do resultado, evite queries dentro de um loop e escreva uma query que retorna muitas linhas em vez de muitas queries que retornam uma. Adicione um índice a uma coluna que você procura em uma tabela grande. - Entidades: delete os veículos e objetos que um script spawna quando não precisa mais deles, e defina um limite de quantos pode criar.
- Hardware: se o servidor tiver vários recursos com pequenos hitches e nada se destacar, observe o uso de CPU, espaço em disco e se outros programas rodam na mesma máquina.
- Atualizar: antigos artefatos de servidor recebem correções de performance. Veja atualizar artefatos do servidor FiveM.
Quando ignorar
Avisos durante a inicialização são esperados. Enquanto o servidor carrega dúzias de recursos, lê seus arquivos e se conecta ao banco de dados, a thread fica ocupada por um momento, e alguns avisos de hitch no primeiro minuto não significa que algo está errado.
Também ignore um número raro e pequeno (alguns centena de milissegundos) que aparece de vez em quando, como durante um restart de um grande recurso. Aja quando avisos aparecem enquanto os jogadores estão online, repetem, ou atingem segundos.
Lista de verificação
| Sintoma | Solução |
|---|---|
| Avisos apenas no primeiro minuto | Normal: recursos estão carregando |
| Um grande aviso, depois nada | Verifique se você não clicou na janela do console (Windows) |
| Avisos repetidos com jogadores online | Grave com profiler record 500 e leia com profiler view |
| Um recurso se destaca | Corrija seus loops de servidor, ou pare-o e peça ao seu autor |
| Avisos após uma ação pesada em queries | Adicione um índice e reduza o número de queries |
| Muitas entidades | Delete veículos e objetos spawnados quando terminar |
| Nenhum script se destaca | Verifique CPU, disco e antivírus na máquina, e atualize os artefatos |
Respostas rápidas
O que significa 'server thread hitch warning'?
A thread principal do servidor não voltou ao seu trabalho no tempo. Ele informa quantos milissegundos o intervalo durou, e durante esse tempo os jogadores podem sentir lag ou rubber banding.
O aviso na inicialização do servidor é um problema?
Geralmente não. Enquanto muitos recursos carregam no início, o servidor está ocupado, e alguns avisos no primeiro minuto são normais. Preocupe-se com avisos que aparecem enquanto os jogadores estão online.
Que tamanho de número é um problema?
Alguns centena de milissegundos de vez em quando é menor. Segundos, ou um fluxo constante de avisos, significa que algo está bloqueando o servidor e você deve encontrá-lo.
Scripts sem esse problema
Crypto MiningCompre um galpão, monte rigs peça por peça e minere moedas num mercado que se mexe.Ver script →
CCTV Security CamerasCâmeras posicionáveis, um tablet com várias telas ao vivo e fotos impressas como prova.Ver script →
Advanced BoostingBoosting de veículos pelo tablet: contratos da classe D à S+, crews e fila ao vivo.Ver script →