Table des matières
Introduction au fichier Heapdump
Introduction
Vérifiez la distribution d'utilisation du tas
Trouver le thread d'allocation d'objets volumineux
Afficher la pile de threads
Vérifiez le journal du journal d'accès
Révision du processus de dépannage
MAT View Thread Stack
VisualVM View Thread Stack
Maison Java javaDidacticiel Comment analyser rapidement le fichier tas après que Java l'ait obtenu

Comment analyser rapidement le fichier tas après que Java l'ait obtenu

May 13, 2023 pm 08:58 PM
java heapdump

Introduction au fichier Heapdump

heap dump : Le fichier de vidage du tas est un fichier binaire qui enregistre l'utilisation des objets dans le tas JVM à un moment donné. Le fichier HeapDump est un instantané de la pile Java à un moment spécifié et est une sorte de fichier image.

Les erreurs de vidage du tas (débordement de mémoire) sont généralement causées par les raisons suivantes :

1) La mémoire JVM est trop petite,

2) Le programme n'est pas strict,

3) Trop de déchets sont générés et ne peuvent pas être recyclé.

Introduction

Après avoir examiné le problème de MOO précédent, un autre service Java a un problème de mémoire cette semaine, le problème n'est pas grave. Il déclenchera uniquement une alarme d'utilisation élevée de la mémoire et ne déclenchera pas le MOO. Le script de vidage a été résumé dans la revue, qui exécutera automatiquement jstack et jmap lorsque l'utilisation du tas est élevée, nous permettant ainsi de conserver avec succès le site problématique.

Vérifiez la distribution d'utilisation du tas

Après avoir découvert le fichier heapdump, je l'ai immédiatement copié sur la machine locale et j'ai utilisé MAT pour l'analyser, comme suit :

Comment analyser rapidement le fichier tas après que Java lait obtenu

Évidemment, il semble qu'une interface ait alloué une très grande chaîne object, une chaîne. L'objet fait environ 200 Mo, alors où est-il alloué ?

Trouver le thread d'allocation d'objets volumineux

Ce comportement d'allocation doit être effectué par un certain thread, et le thread est la racine GC la plus courante, il vous suffit donc de trouver la racine GC de l'objet, comme suit :

Comment analyser rapidement le fichier tas après que Java lait obtenu

Le gros objet est trouvé Le thread d'allocation correspondant est http-nio-8088-exec-6, comme suit :

Comment analyser rapidement le fichier tas après que Java lait obtenu

Afficher la pile de threads

Comment vérifier ce que fait ce thread ? Après avoir tâtonné pendant un moment dans MAT, je n'ai trouvé aucun contenu pertinent. Je me suis rappelé que jstack avait été enregistré dans notre script de dump. Ouvrez-le et jetez un œil, comme suit :

Comment analyser rapidement le fichier tas après que Java lait obtenu

On peut trouver ce fil. fait la sérialisation json, mais j'ai regardé attentivement Après avoir attendu un moment, le contrôleur de l'interface concernée n'a pas été trouvé, car le thread a fini d'exécuter la logique dans le contrôleur et a ensuite renvoyé le gros objet alloué lorsque l'interface a répondu. les données.

Cependant, comme il n'y a pas de code métier dans la pile de threads, il est impossible de localiser quelle interface pose problème. . .

Vérifiez le journal du journal d'accès

Considérant que l'interface d'allocation des objets volumineux sera certainement très lente, je me suis retourné pour vérifier le journal du journal d'accès de Tomcat, comme suit :

Comment analyser rapidement le fichier tas après que Java lait obtenu

Enfin, j'ai trouvé l'interface problématique, qui est utilisé pour interroger les données du produit Oui, lorsque vous entrez 3, tous les produits commençant par 3 seront interrogés et il y a plus de 200 000 données. La résolution du problème est très simple, il suffit d'ajouter une limite et c'est fait.

Révision du processus de dépannage

Cependant, j'ai toujours eu l'habitude, c'est-à-dire qu'après avoir résolu un problème, je réfléchirai à la part de chance impliquée dans le processus de résolution du problème.

Si vous lisez souvent des articles techniques sur le dépannage, vous trouverez de nombreux articles dans lesquels la cause première du problème est soudainement localisée. C'est peut-être parce que vous avez soudainement découvert un indice, ou que vous pouvez le voir en regardant le code, ou encore. vous pouvez le deviner. Il y a un problème quelque part. Je pense que ce processus de dépannage implique beaucoup de chance. J'espère que le problème pourra être résolu étape par étape grâce à des années d'accumulation de bases théoriques et d'utilisation compétente d'outils de diagnostic.

Le problème ci-dessus peut être localisé via le journal d'accès, ce qui a une certaine chance, car le problème de mémoire cette fois n'est pas extrême. Si le volume de requêtes de cette interface est important, plusieurs FGC seront déclenchés instantanément, ce qui ralentira. en bas d'autres interfaces. Il n'y a aucun moyen de savoir quelle interface est à l'origine du problème !

Je pense, en théorie, qu'il devrait y avoir une pile de threads et des paramètres sur la pile de threads dans le fichier de tas Java. Parce que les threads sont des objets et que les paramètres sont également des objets, ils devraient tous être dans le tas, j'ai donc trouvé du temps libre. , j'explore à nouveau l'outil MAT.

MAT View Thread Stack

Après avoir tâtonné pendant un moment, j'ai trouvé un bouton pour afficher les informations sur le fil, comme suit :

Comment analyser rapidement le fichier tas après que Java lait obtenu

Trouvez le fil http-nio-8088-exec-6 mentionné plus tôt et développez-le, vous pouvez trouver la pile de threads et les paramètres sur la pile, comme suit :

Comment analyser rapidement le fichier tas après que Java lait obtenu

Ensuite, vous trouvez l'objet paramètre Request de la requête. Après avoir développé l'objet Request plusieurs fois, vous pouvez trouver les informations sur l'URL de l'interface, comme suit. :

Comment analyser rapidement le fichier tas après que Java lait obtenu

VisualVM View Thread Stack

Étant donné que de nombreux étudiants sont habitués à utiliser VisualVM pour analyser le tas, voici comment utiliser VisualVM.

Tout d'abord, chargez le fichier heapdump, comme suit :

Comment analyser rapidement le fichier tas après que Java lait obtenu

Ensuite, sélectionnez l'objet correspondant, cliquez avec le bouton droit et sélectionnez Sélectionner dans les fils de discussion, comme suit :

Comment analyser rapidement le fichier tas après que Java lait obtenu

Après avoir localisé la pile de fils de discussion, recherchez l'objet Request que vous souhaitez afficher, cliquez pour entrer, comme suit :

Comment analyser rapidement le fichier tas après que Java lait obtenu

De même, développez l'objet Request. Après cela, vous pouvez trouver les informations sur l'URL comme suit :

Comment analyser rapidement le fichier tas après que Java lait obtenu

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Nombre parfait en Java Nombre parfait en Java Aug 30, 2024 pm 04:28 PM

Guide du nombre parfait en Java. Nous discutons ici de la définition, comment vérifier le nombre parfait en Java ?, des exemples d'implémentation de code.

Weka en Java Weka en Java Aug 30, 2024 pm 04:28 PM

Guide de Weka en Java. Nous discutons ici de l'introduction, de la façon d'utiliser Weka Java, du type de plate-forme et des avantages avec des exemples.

Numéro de Smith en Java Numéro de Smith en Java Aug 30, 2024 pm 04:28 PM

Guide du nombre de Smith en Java. Nous discutons ici de la définition, comment vérifier le numéro Smith en Java ? exemple avec implémentation de code.

Questions d'entretien chez Java Spring Questions d'entretien chez Java Spring Aug 30, 2024 pm 04:29 PM

Dans cet article, nous avons conservé les questions d'entretien Java Spring les plus posées avec leurs réponses détaillées. Pour que vous puissiez réussir l'interview.

Break or Return of Java 8 Stream Forach? Break or Return of Java 8 Stream Forach? Feb 07, 2025 pm 12:09 PM

Java 8 présente l'API Stream, fournissant un moyen puissant et expressif de traiter les collections de données. Cependant, une question courante lors de l'utilisation du flux est: comment se casser ou revenir d'une opération FOREAK? Les boucles traditionnelles permettent une interruption ou un retour précoce, mais la méthode Foreach de Stream ne prend pas directement en charge cette méthode. Cet article expliquera les raisons et explorera des méthodes alternatives pour la mise en œuvre de terminaison prématurée dans les systèmes de traitement de flux. Lire plus approfondie: Améliorations de l'API Java Stream Comprendre le flux Forach La méthode foreach est une opération terminale qui effectue une opération sur chaque élément du flux. Son intention de conception est

Horodatage à ce jour en Java Horodatage à ce jour en Java Aug 30, 2024 pm 04:28 PM

Guide de TimeStamp to Date en Java. Ici, nous discutons également de l'introduction et de la façon de convertir l'horodatage en date en Java avec des exemples.

Programme Java pour trouver le volume de la capsule Programme Java pour trouver le volume de la capsule Feb 07, 2025 am 11:37 AM

Les capsules sont des figures géométriques tridimensionnelles, composées d'un cylindre et d'un hémisphère aux deux extrémités. Le volume de la capsule peut être calculé en ajoutant le volume du cylindre et le volume de l'hémisphère aux deux extrémités. Ce tutoriel discutera de la façon de calculer le volume d'une capsule donnée en Java en utilisant différentes méthodes. Formule de volume de capsule La formule du volume de la capsule est la suivante: Volume de capsule = volume cylindrique volume de deux hémisphères volume dans, R: Le rayon de l'hémisphère. H: La hauteur du cylindre (à l'exclusion de l'hémisphère). Exemple 1 entrer Rayon = 5 unités Hauteur = 10 unités Sortir Volume = 1570,8 unités cubes expliquer Calculer le volume à l'aide de la formule: Volume = π × r2 × h (4

Créer l'avenir : programmation Java pour les débutants absolus Créer l'avenir : programmation Java pour les débutants absolus Oct 13, 2024 pm 01:32 PM

Java est un langage de programmation populaire qui peut être appris aussi bien par les développeurs débutants que par les développeurs expérimentés. Ce didacticiel commence par les concepts de base et progresse vers des sujets avancés. Après avoir installé le kit de développement Java, vous pouvez vous entraîner à la programmation en créant un simple programme « Hello, World ! ». Une fois que vous avez compris le code, utilisez l'invite de commande pour compiler et exécuter le programme, et « Hello, World ! » s'affichera sur la console. L'apprentissage de Java commence votre parcours de programmation et, à mesure que votre maîtrise s'approfondit, vous pouvez créer des applications plus complexes.

See all articles