THE ORB
Démarrage du studio

hitch warning : une image de N millisecondes

Quelque chose a figé le serveur un instant. Les joueurs le ressentent comme un à-coup. C'est un symptôme, pas une panne.

groupsÀ-coups et pics de lagcodeIl faut un développeur

Faites d'abord ceci

Quelques-uns au démarrage sont normaux. En continu pendant le jeu, un script est à examiner.

bug_reportCollez plutôt toute votre console

Ce que ça veut dire

Quelque chose a bloqué le thread principal pendant ce temps. Ce n'est PAS une erreur : rien n'a échoué et rien n'a planté. C'est le runtime qui signale qu'une image a pris bien plus longtemps qu'elle ne devrait, ce que les joueurs ressentent comme un gel.

Voyez-le comme un symptôme avec un chiffre. Sous 100 ms environ, c'est en général du bruit de démarrage ; des à-coups soutenus au-delà de 200 ms en jeu normal sont un vrai problème.

Ce qui la provoque

Classé par fréquence : la cause la plus probable en premier.

  1. 1

    Une requête base de données synchrone sur le serveur

    Tout le tick attend MySQL. Un index manquant fait passer cela d'invisible à plusieurs centaines de millisecondes.

  2. 2

    Du travail lourd au démarrage d'une ressource

    Analyser une grosse config JSON, construire une table énorme, charger des centaines de props. Les à-coups uniquement au démarrage sont en général inoffensifs.

  3. 3

    Une boucle serrée sans Wait

    while true do ... end sans rendre la main bloque l'ordonnanceur jusqu'à la fin.

  4. 4

    Streamer beaucoup d'assets d'un coup

    Demander de nombreux modèles ou dictionnaires d'animation dans la même image.

  5. 5

    Un gestionnaire d'événements lent

    Un événement qui se déclenche par joueur, avec du vrai travail, sur un serveur plein.

Comment savoir laquelle est la vôtre

resmon 1

dans la console client montre le CPU par ressource. Côté serveur, txAdmin et le profileur intégré désignent la ressource. Recoupez le moment de l'à-coup avec ce qui se passait : une vague de connexions, un redémarrage de ressource, ou une action précise d'un joueur.

Où regarder

La ressource désignée par resmon, puis ses threads et ses appels à la base de données.

Comment la corriger

Rendez la main dans les longues boucles, rendez les requêtes asynchrones, et indexez ce que vous filtrez :

-- bloquant
local rows = MySQL.query.await('SELECT * FROM users')

-- non bloquant
MySQL.query('SELECT * FROM users WHERE identifier = ?', { id }, function(rows)
    -- ...
end)

-- rendez toujours la main
CreateThread(function()
    while true do
        Wait(500)      -- ne l'omettez jamais
    end
end)

Toujours bloqué sur votre propre code ?

Cette page explique ce que cette erreur signifie en général. Collez votre console dans Server Fixer : il classera tout ce qui s'y trouve et vous dira quoi faire en premier ; et si vous préférez ne pas y toucher, ORBIE peut réparer le script et vous rendre la ressource prête à déposer.

bug_reportOuvrir le Server Fixer

Pour ce type d'erreur, le Script Optimizer trouve ce qui vous coûte des images et le réécrit.

Les erreurs qui voyagent avec celle-ci