server thread hitch warning : fix pour timer interval of X milliseconds

Vous voyez 'server thread hitch warning: timer interval of X milliseconds' ? Ce que cela signifie, les causes, comment trouver le coupable avec le profiler et quand l'ignorer.

Dans la console du serveur ou dans txAdmin :

text
server thread hitch warning: timer interval of 1250 milliseconds

Le serveur tourne normalement plusieurs fois par seconde. Cette ligne dit qu'un écart entre les tiques était beaucoup plus long qu'il ne devrait l'être, ici 1250 ms. Ce guide couvre ce que cela signifie, les causes habituelles, comment trouver le script derrière avec le profiler, et quand vous pouvez l'ignorer.

Ce que cela signifie

Le serveur exécute vos ressources sur un thread principal, et il surveille le temps qu'il faut pour revenir. Quand quelque chose garde ce thread occupé, le prochain tick est tard, et le serveur imprime cet avertissement avec la durée du délai.

Les joueurs remarquent un hitch comme du lag : les actions qui prennent un moment pour répondre, les véhicules qui sautent en arrière, et les événements qui arrivent tard. Un seul nombre dit peu. Regardez à quelle fréquence il apparaît et à quel point il devient grand.

Causes courantes

  • Un script serveur lourd. Une boucle qui parcourt tous les joueurs, tous les véhicules ou une grande table, exécutée encore et encore, garde le thread occupé. Une boucle while true do avec Wait(0) sur le serveur est un coupable typique.
  • Un travail de base de données lent. Une ressource qui demande à la base de données beaucoup de données, ou exécute une très lente requête, garde le thread en attente ou traite un grand résultat. Vérifiez les avertissements de requête lente qu'oxmysql imprime, et assurez-vous que les colonnes que vous recherchez ont un index.
  • Trop d'entités. Des milliers de véhicules, de peds ou d'objets qu'un script crée et ne supprime jamais chargent le serveur, en particulier avec OneSync.
  • Une machine lente. Un CPU occupé, un VPS qui partage ses cœurs avec d'autres, un disque lent ou plein, ou un antivirus qui scanne votre dossier de serveur ajoutent tous du délai dont aucun script n'est responsable.
  • Un très grand nombre d'événements. Un script qui déclenche un événement pour chaque joueur plusieurs fois par seconde coûte du temps des deux côtés.
  • La console elle-même. Sous Windows, cliquer à l'intérieur de la fenêtre de console du serveur peut suspendre le processus, car la fenêtre passe en mode de sélection de texte. Si vos avertissements de hitch arrivent comme un seul long écart puis s'arrêtent, vérifiez que vous n'avez pas cliqué dedans. Appuyez sur Entrée ou Échap dans la fenêtre pour la libérer.

Conseil : comparez l'heure de l'avertissement avec ce que vous avez fait. Un hitch chaque fois que quelqu'un ouvre un certain menu, ou à la même minute chaque heure, pointe vers la ressource derrière cette action ou une tâche planifiée.

Trouvez le coupable avec le profiler

FiveM a un profiler intégré. Vous l'utilisez dans la console du serveur (la Live Console dans txAdmin, ou votre terminal). Commencez à enregistrer un nombre de frames pendant que le problème se produit :

text
profiler record 500

Une fois l'enregistrement terminé, vérifiez-le et ouvrez-le :

text
profiler status
profiler view

Le lecteur montre quelles ressources et quelles fonctions ont pris du temps. Cherchez une ressource dont la barre est bien plus long que les autres, puis ouvrez ses fonctions pour voir lequel passe du temps. Vérifiez la documentation FiveM pour les commandes exactes et les options de votre version d'artefact, car le profiler a plus d'options que listées ici, comme l'enregistrement d'un enregistrement dans un fichier.

Si vous n'attrapez pas le problème sur le fait, enregistrez à nouveau quand cela se produit, ou quand vous avez beaucoup de joueurs en ligne. Un enregistrement quand le serveur est vide montre généralement rien d'utile.

Un deuxième moyen : arrêter les ressources une par une

Quand vous ne voulez pas lire la sortie du profiler, trouvez le coupable par élimination. Dans la console du serveur :

text
stop my_script

Attendez quelques minutes et vérifiez si les avertissements s'arrêtent. Démarrez-le à nouveau avec ensure my_script. Commencez par les ressources qui bouclent beaucoup (jobs, HUDs, n'importe quoi avec "sync" ou "tick" dans le nom) et les plus récentes que vous avez ajoutées.

Corriger la cause

  • Boucles lourdes : faites attendre plus longtemps les boucles serveur. Presque rien n'a besoin de Wait(0) sur le serveur. Wait(1000) ou plus est souvent suffisant.
lua
CreateThread(function()
    while true do
        Wait(5000)
        -- check things every 5 seconds, not every tick
    end
end)
  • Base de données : utilisez les appels await seulement où vous avez besoin du résultat, évitez les requêtes à l'intérieur d'une boucle et écrivez une requête qui retourne de nombreuses lignes au lieu de nombreuses requêtes qui retournent une. Ajoutez un index à une colonne que vous recherchez dans une grande table.
  • Entités : supprimez les véhicules et les objets qu'un script crée quand il n'en a plus besoin, et définissez une limite sur combien il peut créer.
  • Matériel : si le serveur a plusieurs ressources avec de petits hitches et rien ne se démarque, regardez l'utilisation du CPU, l'espace disque et si d'autres programmes s'exécutent sur la même machine.
  • Mise à jour : les anciens artefacts serveur reçoivent des corrections de performance. Voir update FiveM server artifacts.

Quand l'ignorer

Les avertissements au démarrage sont attendus. Pendant que le serveur charge des dizaines de ressources, lit leurs fichiers et se connecte à la base de données, le thread est occupé pendant un moment, et une poignée d'avertissements de hitch dans la première minute ne signifie pas que quelque chose ne va pas.

Ignorez également un nombre rare et petit (quelques centaines de millisecondes) qui apparaît de temps en temps, comme lors du redémarrage d'une grande ressource. Agissez quand les avertissements apparaissent pendant que les joueurs sont en ligne, se répètent, ou atteignent les secondes.

Liste de contrôle

Symptôme Solution
Avertissements seulement dans la première minute Normal : les ressources se chargent
Un grand avertissement, puis rien Vérifiez que vous n'avez pas cliqué dans la fenêtre de console (Windows)
Avertissements répétés avec les joueurs en ligne Enregistrez avec profiler record 500 et lisez-le avec profiler view
Une ressource se démarque Corrigez ses boucles serveur, ou arrêtez-la et demandez à son auteur
Avertissements après une action lourde en requêtes Ajoutez un index et réduisez le nombre de requêtes
De nombreuses entités Supprimez les véhicules et les objets générés quand vous avez terminé
Aucun script ne se démarque Vérifiez le CPU, le disque et l'antivirus sur la machine, et mettez à jour les artefacts

Réponses rapides

Que signifie 'server thread hitch warning' ?

Le thread principal du serveur n'est pas revenu à son travail à temps. Il rapporte combien de millisecondes l'écart a duré, et pendant ce temps les joueurs peuvent ressentir du lag ou du rubber banding.

L'avertissement au démarrage du serveur est-il un problème ?

Généralement non. Pendant que de nombreuses ressources se chargent au démarrage, le serveur est occupé, et quelques avertissements dans la première minute sont normaux. Inquiétez-vous des avertissements qui apparaissent pendant que les joueurs sont en ligne.

Quel est le nombre qui pose problème ?

Quelques centaines de millisecondes de temps en temps est mineur. Les secondes, ou un flux régulier d'avertissements, signifient que quelque chose bloque le serveur et vous devriez le trouver.

Des scripts sans ce problème

Crypto MiningAchetez un entrepôt, montez vos rigs pièce par pièce et minez sur un marché qui bouge.Voir le script →CCTV Security CamerasDes caméras à placer, une tablette multi-vues en direct et des photos imprimées comme preuves.Voir le script →Advanced BoostingDu boosting de véhicules piloté par tablette : contrats de classe D à S+, crews et file d’attente en direct.Voir le script →

À lire aussi