• Bienvenue sur le forum de Paragon !
Bienvenue, Visiteur ! Connexion S’enregistrer


Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
Comment on corrige les crashs, déjà?
#1
Comment on corrige les crashs, déjà?
(où: comment ça se fait que ce crash-de-minuit ™ ait pris tant de temps à régler? Qu'est ce que c'est ces branleurs de devs qui fichent rien?)

Ceci est un message informatif/pédagogique pour les joueurs qui souhaitent comprendre pourquoi il y a des crashs, et comment on s'y prends pour réparer le souci.
Certaines explications techniques sont données de manière approximative pour des raisons de simplicité, mais dans l’ensemble, c’est à peu près comme ça.

1) Quelle est la cause d’un crash (en général) ?
Dans l’écrasante majorité des cas, un crash arrive à cause d’une erreur de programmation (bug) dans le logiciel du serveur (que ce soit scripts, sorts, instances, mobs, …) qui entraîne la réalisation d’une opération invalide. Lorsque ceci se produit, le système d’exploitation force la fermeture du serveur (de manière similaire à ce qui se passe lorsque vous avez une application qui plante sous Windows), et il est ensuite relancé automatiquement.
Ce n’est en donc pas dû à une trop grande population sur le serveur (bien que l’augmentation de population augmente les risques de tomber sur un bug, il n’y aurait pas de crash sans le-dit bug). Ca peut éventuellement être dû à un problème matériel, réseau, ou attaque (hack, DDoS), mais ça reste une cause rare (quoique apparemment y’en a pas mal qui s’acharnent sur Paragon ces jours ci, mais bon ils vont se fatiguer) .


2) Comment on corrige ça (dans le cas idéal) ?
Le logiciel qui gère le serveur est très gros (à peu près 1 million de lignes de code en C++, sans compter la partie SQL). Aucune chance donc d’aller essayer de deviner d’où vient le problème en tapant au hasard.
Lorsqu’un crash se produit, une sorte de fichier “boite noire” appelée coredump est créé. Le coredump permet de savoir l’état du serveur au moment du crash, mais pas les évènements qui ont conduit à cet état. Ça, c’est au développeur de le déduire, et suivant les cas ça peut être très simple (par ex. un crash se produisant toujours lorsqu’on effectue une action donnée), ou bien extrêmement difficile (par ex. un crash dépendant de conditions complexes faisant intervenir des parties diverses du serveur n’ayant apparemment aucun lien entre elles).
Une fois le coredump analysé, et le problème compris, on développe un correctif, qui sera appliqué lors du prochain reboot (ou crash) du serveur.


3) Pourquoi ça a pris beaucoup de temps (spécifiquement sur Paragon) ?

Il y a quelques spécificités sur Paragon qui nous empêchent d’être dans le “cas idéal” décrit dans ci dessus dans la section 2).


Problème 1: Sur Paragon, les développeurs n’onti pas accès aux coredumps directement. Pour accéder à un coredump, il fallait que je contacte Tisk sur skype ou TS et que je lui demande. Ceci doit être refait à chaque nouveau coredump (donc à chaque crash).

Problème 2:Sur Paragon, le coredump généré lors d’un crash ne contenait pas toutes les informations nécessaires. Il y a certaines informations, mais pas toutes (par exemple on saura que ça à crash sur le lancement d’un spell, mais on ne saura pas quel spell, ni quel lanceur…).

Problème 3: Sur Paragon, il manque un logiciel qui permet d’analyser les coredumps, et pour des raisons techniques ce logiciel ne peut pas être installé (pour l’instant). Ca rends le coredump totalement opaque et inexploitable (essayez par exemple d’ouvrir Wow.exe avec le Bloc-Notes).

On voit donc que à cause du Problème 3, il est strictement impossible d’obtenir des informations sur les crashs.
Et même sans tenir compte du Problème 3, on voit que lorsqu’un crash survient le jour J, il faut attendre en général le jour J+1 pour avoir le coredump via Tisk, puis il faut réaliser le correctif, qui sera appliqué au plus tôt le jour J+2 (bien sur, uniquement dans le cas optimiste où le développeur trouve immédiatement la cause du crash en analysant le coredump, ce qui est rendu improbable par la présence du Problème 2).

4) Les solutions que j’ai essayé d’apporter aux problèmes ci-dessus

Solution problème 1:
J’ai réalisé (et passé à Tisk) un script s’exécutant périodiquement (toute les heures), et me fournissant les coredumps des derniers crashs. Cette solution est effective depuis jeudi 19/02/15.

Solution problème 2:
J’ai réalisé un script permettant d’avoir les informations complètes dans les coredumps. Cette solution est effective depuis la Mini-Maj ™ #1, c'est-à-dire dimanche 22/02/15.

Solution problème 3:
J’ai réalisé un script permettant d’analyser les coredumps sur une machine différente de celle du serveur Paragon. Du coup plus besoin d’installer quoi que ce soit sur la machine Paragon.
Cette solution est effective depuis lundi 16/02/15, Avant cette date, il n’y avait strictement aucun moyen de savoir ce qui se passait.

Ces améliorations apportées à l'infrastructure ont donc permis de diagnostiquer la cause du crash-de-minuit ™ et de le corriger (pas de crash lié à ce bug depuis le 17 février).

Cordialement,
Zangdar
[Image: 1423581536-zangdarsignpara2.png]
(Signature © Pimouss :p)
 
#2
barbapapa mais Zangdar comment tu roxamor.
Ca te dérange si je monte un fan club en ton honneur ?
 
#3
J'en serrai nova ^^ il est trop fort et en plus c'est un bon vulgarisateur j'adore.
 
#4
Par curiosité, c'était quoi alors le bug ?
 
#5
Maintenant j'en ai la preuve, Dieu existe ;)
 
#6
Allah Bricot ! ( . add [Corde] 3 , au cas ou)
Sinon, original les logs en format binaire, soit c'est une spécialité Trinity, soit c'est une touche personnelle made in paragon, mais c'est plutot pratique pour des logs censés fournir des informations détaillées aux devs x)
J'espère juste que la partie récuperation des logs depuis l'extérieur a pas été faite en mode "scannez mes ports c'est mailloche les gars" mais jsuis assez confiant la dessus ^^ Merci pour le crash de minuit, les gens vont arrêter de deco reco instant, en sueur apres avoir loot une 284.
 
#7
Gros GG à toi Zangdar, et merci d'avoir pris la peine d'établir ce post alors que tu n'en étais pas obligé.

On t'aime tous. <3
 
#8
Bonjour,

(02-23-2015, 11:24)Morokeï a écrit : Allah Bricot ! ( . add [Corde] 3 , au cas ou)
Sinon, original les logs en format binaire, soit c'est une spécialité Trinity, soit c'est une touche personnelle made in paragon, mais c'est plutot pratique pour des logs censés fournir des informations détaillées aux devs x)
J'espère juste que la partie récuperation des logs depuis l'extérieur a pas été faite en mode "scannez mes ports c'est mailloche les gars" mais jsuis assez confiant la dessus ^^ Merci pour le crash de minuit, les gens vont arrêter de deco reco instant, en sueur apres avoir loot une 284.

Pour les coredumps, non, il s'agit d'une fonctionnalité standard de Linux : http://fr.wikipedia.org/wiki/Core_dump

Et la récupération de ce coredump sur paragon s'effectue via un protocole sécurisé/encrypté =)

Cordialement,
Zangdar
[Image: 1423581536-zangdarsignpara2.png]
(Signature © Pimouss :p)
 
  


Atteindre :


Browsing: 1 visiteur(s)