2016-09-13 1 views
0

Je veux faire un vidage de mon application rubinius pour aider à enquêter sur un problème d'impasse apparente. Mon application utilise rbx-3.21, et je préférerais ne pas changer cela si possible.Comment puis-je faire un vidage de fil dans rubinius?

J'ai essayé de faire une solution de rubis pur comme celle décrite here, mais les backtraces de threads ne fonctionnent pas correctement - ils semblent tous identiques au thread exécutant le vidage de pile. Le résultat ressemble à ceci:

Thread-1uvk 
common/service.rb:192:in `dump_threads' 
    common/service.rb:190:in `dump_threads' 
    common/service.rb:90:in `prepare_status' 

Thread-1uvs 
common/service.rb:192:in `dump_threads' 
    common/service.rb:190:in `dump_threads' 
    common/service.rb:90:in `prepare_status' 

....etc 

Répondre

0

Vous devriez jeter un coup d'œil sur le livre de Rubinius qui documente certains des nouveaux outils. Plus précisément, vérifier cela: https://book.rubinius.com/manuscript/inspectability.html

Je généralement reçu mon code en utilisant l'exemple donné en bas de cette page:

rbx -Xsystem.diagnostics.target='./diagnostics-$PID.json' -Xsystem.profiler.target=diagnostics some_script.rb 

Cela écrire des statistiques, y compris un profil de filet, dans le fichier JSON.

Si ce n'est pas assez d'informations, arrêtez-vous dans la pièce Gitter où de nombreux utilisateurs de Rubinius sortent et demandent de l'aide.