Cette traduction automatique est fournie pour votre commodité.
En cas d'incohérence entre la version anglaise et la version traduite, la version anglaise prévaudra. Veuillez visiter cette page pour plus d'informations.
Des informations détaillées sur le comportement de la machine virtuelle Ruby peuvent vous aider à comprendre et à améliorer les performances de votre application dans son ensemble. New Relic rassemble quelques indicateurs clés qui peuvent vous aider à avoir une meilleure idée de ce que fait votre machine virtuelle Ruby . Cela peut également vous aider à évaluer l’impact des ajustements apportés à la configuration de la machine virtuelle pour améliorer les performances.
Exigences minimales
Les collections de métriques Ruby VM sont disponibles dans les versions 3.8.0 ou supérieures de l'agent Ruby (bien que les versions antérieures prenaient en charge la collecte de certaines mesures de base de récupération de place).
De plus, pour utiliser cette fonctionnalité, vous devez disposer d'une version Ruby compatible avec CRuby 1.9.2 or higher. Les sections ci-dessous sur chaque mesure individuelle expliquent quelles versions de Ruby prennent en charge la collecte de chaque mesure.
Enfin, pour capturer les timings GC, vous devrez activer GC::profileur dans votre application.
Affichage des données de la machine virtuelle Ruby
Pour afficher les données sur les performances de vos machines virtuelles Ruby. Allez à one.newrelic.com > All capabilities > APM> (select an app) > Monitoring > Ruby VMs.
Détails de mesure
La plupart de ces métriques aident à comprendre le comportement du récupérateur de mémoire de Ruby.
Toutes les métriques ne peuvent pas être collectées dans toutes les versions de Ruby. En général, vous obtiendrez les données les plus complètes si vous utilisez la version la plus récente de CRuby. La liste ci-dessous explique exactement ce qui est disponible où :
Available on:CRuby 2.0+
Le nombre d'objets Ruby alloués dans vos processus. Dans l'UI, cette mesure est normalisée par le nombre de requests, afin que vous puissiez avoir une idée du nombre d'objets alloués par requête.
Il s'agit d'un nombre important à monitorer, car la fréquence des allocations d'objets est l'un des principaux facteurs déterminant la fréquence à laquelle le récupérateur de mémoire de Ruby doit s'exécuter.
Sur CRuby, cette valeur est dérivée de GC.stat[:total_allocated_object].
Available on:CRuby 1.9.2+, Rubinius 2.x (voir note ci-dessous sur le support JRuby)
La quantité de temps passée dans la collecte des déchets (phases de marquage et de balayage) dans vos processus Ruby.
L'agent Ruby mesure en fait cette valeur de deux manières différentes : le temps de ramassage des déchets qui intervient au milieu du traitement de la requête et le temps total de ramassage des déchets. Le temps de collecte des déchets qui se produit au milieu du traitement des demandes est présenté sous forme de bande sur le graphique d'aperçu principal et dans les graphiques de répartition des transactions individuelles. Le temps total du GC en pourcentage de l'horloge temps est affiché dans l'onglet VM Ruby .
Cette mesure est dérivée de GC::Profiler.total_time.
Note:Vous devez activer GC::Profiler pour obtenir cette mesure. Pour plus d'informations, voir instrumentationGC.
JRuby note:En raison de ce qui semble être un bug dans JRuby ou dans certaines versions de la JVM, les timings GC peuvent être décalés d'un facteur 1000 sur JRuby. Pour cette raison, nous ne recommandons pas actuellement d'activer GC::Profiler sur JRuby.
Available on:CRuby 1.9.2+, JRuby 1.7+, Rubinius 2.x
À quelle fréquence le récupérateur de mémoire doit-il arrêter votre processus Ruby pour s'exécuter ? Sur CRuby 2.1+, cela sera segmenté en exécutions GC majeures et mineures. Ce nombre est présenté dans l'UI comme le nombre de requests traitées par exécution GC.
Selon la version de Ruby utilisée, cette valeur peut être dérivée de GC.count ou de GC.stat[:minor_gc_count] et GC.stat[:major_gc_count].
Available on:CRuby 1.9.2+
L'interpréteur Ruby stocke les objets sur un tas, chaque objet occupant un seul emplacement de tas. Au fur et à mesure que les emplacements du tas se remplissent d'objets, le tas sera étendu par la machine virtuelle Ruby si nécessaire.
L'agent Ruby mesure à la fois le nombre d'objets actifs dans le tas et le nombre d'emplacements de tas inoccupés sur une base périodique.
D'une manière générale, plus il y a d'objets sur le tas, plus chaque exécution de GC prendra du temps (puisque potentiellement chaque objet sur le tas doit être examiné). Un plus grand nombre d'objets sur le tas est également corrélé à une utilisation de la mémoire plus élevée pour votre application.
Cette valeur est dérivée de GC.stat[:heap_live_slot] ou GC.stat[:heap_live_num] et GC.stat[:heap_free_slot] ou GC.stat[:heap_free_num].
Available on:Toute version de Ruby
Cette mesure montre l'utilisation de la mémoire (taille de l'ensemble résident) de vos processus Ruby, présentée sous la forme de la taille moyenne par instance (processus). Garder l’utilisation de la mémoire sous contrôle est une considération importante lors du réglage des paramètres de votre machine virtuelle Ruby. Si la taille devient trop importante, vous pouvez forcer la machine hôte à commencer à paginer sur le disque ou à atteindre les limites de mémoire imposées par le logiciel.
Sur les hôtes Linux, cela est dérivé du champ VmRSS de /proc/PID/status.
Available on:CRuby 2.1+
Chaque fois qu'une méthode est invoquée sur un objet, Ruby doit localiser l'implémentation de cette méthode en recherchant la chaîne ancestrale de l'objet. Étant donné que ces recherches sont coûteuses, la machine virtuelle Ruby mettra en cache les résultats de ces recherches.
Dans les anciennes versions de CRuby (antérieures à 2.0), il y avait un seul cache de méthode global et diverses opérations pouvaient entraîner l'invalidation de l'ensemble du cache.
Dans CRuby 2.1 ou supérieur, le cache global a été divisé en un ensemble de caches plus petits par classe, de sorte que les modifications invalidant le cache d'une classe ne rejetteront pas les entrées de cache pour d'autres classes non liées.
Il existe cependant encore certaines opérations qui entraîneront l’invalidation de tous les caches de méthodes. L'agent Ruby mesurera la fréquence à laquelle ces invalidations se produisent et signalera cette mesure normalisée par rapport au nombre de requests, pour vous donner une idée du nombre de fois par requête où tous les caches de méthodes sont invalidés.
Pour plus d’informations, consultez cet article de blog d’Aman Gupta.
Cette valeur est dérivée de RubyVM.stat[:global_method_state].
Available on:CRuby 2.1+
Ruby met en cache les emplacements des constantes d'une manière similaire au comportement de mise en cache des méthodes décrit ci-dessus. L'agent Ruby peut également mesurer le nombre de fois que le cache de constantes globales est invalidé et le signaler sous la forme d'un nombre moyen d'invalidations par requête.
Cette valeur est dérivée de RubyVM.stat[:global_constant_state].
Available on:CRuby 1.9.2+, JRuby 1.7+, Rubinius 2.x
L'agent Ruby peut suivre le nombre de threads dans vos processus Ruby. Si vous utilisez un serveur Web multithread, cela peut être utilisé pour confirmer que votre pool de threads a réellement la taille que vous avez configurée. Il peut également mettre en évidence si vous avez une fuite de thread (où vous générez des threads qui ne sont jamais supprimés).
Processus d'arrière-plan
Par défaut, les données de tous les processus faisant rapport à un nom d'application donné dans New Relic seront combinées sur la page Ruby VM de l'interface utilisateur. Cela signifie que si vous avez à la fois des processus Web et d'arrière-plan (tels que Resque, Sidekiq, DelayedJob, etc.) faisant rapport dans la même application New Relic, les données peuvent être confuses.
Il existe deux manières de contourner ce problème :
Intégrez vos processus Web et d'arrière-plan dans des applications distinctes dans New Relic, en définissant le paramètre de configuration app_name ou la variable d'environnement NEW_RELIC_APP_NAME .
Désactivez la collecte des métriques Ruby VM dans vos processus d'arrière-plan, en définissant disable_vm_sampler: true dans votre fichier de configuration ou en définissant NEW_RELIC_DISABLE_VM_SAMPLER=1 dans l'environnement de votre application.
Ressources de documentation supplémentaires
Les ressources de documentation supplémentaires incluent :
La page Transactions affiche un résumé des performances de votre application.
La ressource de configuration de l'agent Ruby contient des configuration procédures de mise à jour et des valeurs de fichier , notamment générales, proxy, trace de transaction et collecteur d'erreurs.