


Comment utiliser les commandes JVM en Java pour implémenter le dépannage du serveur
Cet article vous présentera comment utiliser les commandes JVM en Java pour résoudre les problèmes de serveur. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il vous sera utile.
1. top (commande Linux)
Exécutez la commande top : (Affichez les détails du processus 15477, utilisé ci-dessous)
Informations système (cinq premières lignes) :
Ligne 1 : informations sur la file d'attente des tâches principales (état d'exécution du système et charge moyenne), le même résultat que le commande de disponibilité.
Charge moyenne du système : dans le cas d'un processeur monocœur, 0,00 signifie aucune charge, 1,00 signifie juste une charge complète, plus de 1 signifie une surcharge, le la valeur idéale est 0,7 ;
Charge CPU multicœur : nombre de cœurs CPU * valeur idéale 0,7 = charge idéale, par exemple : la charge CPU 4 cœurs ne dépasse pas 2,8, ce qui signifie il n'y a pas de charge élevée.
Format : jusqu'à xx jours, HH:MM
Par exemple : 241 jours, 20h11, signifie Fonctionnement continu pendant 241 jours, 20 heures et 11 minutes
Section 1 : Heure actuelle du système, par exemple : 16:07:37
-
Paragraphe 2 : Temps de fonctionnement du système, le temps avant le redémarrage. Plus le temps est long, plus le système sera stable.
Paragraphe 3 : Le nombre actuel d'utilisateurs connectés, par exemple : 1 utilisateur, ce qui signifie qu'il n'y a actuellement qu'un seul utilisateur connecté
Segment du paragraphe 4 : Charge du système, c'est-à-dire la longueur moyenne de la file d'attente des tâches. Les trois valeurs comptent respectivement la charge moyenne du système au cours des 1, 5 et 15 dernières minutes
- Ligne 2 : Informations relatives au processus des tâches
- Paragraphe 1 : Nombre total de processus, par exemple : Tâches : 231 au total, indiquant un total de 231 processus en cours d'exécution
- Paragraphe 2 : Nombre de processus en cours d'exécution, par exemple : 1 en cours d'exécution,
- Paragraphe 3 : Nombre de processus en veille, par exemple : 230 en veille,
- Paragraphe 4 : Nombre de processus arrêtés, par exemple : 0 arrêté,
- Paragraphe 5 : Nombre de processus zombies, par exemple : 0 zombie
- Ligne 3 : Informations relatives au processeur S'il s'agit d'un processeur multicœur, appuyez sur le chiffre 1. pour afficher les informations CPU de chaque cœur. À ce moment, la ligne 1 sera convertie en ligne du numéro de cœur du processeur, et le numéro 1 peut être commuté d'avant en arrière.
- Paragraphe 1 :
Pourcentage de CPU occupé par l'espace utilisateur
us
, par exemple : Cpu(s) : 12,7%us, - Paragraphe 2 :
L'espace du noyau occupe un pourcentage de CPU, par exemple : 8,4%sy,
sy
- Paragraphe 3 :
Les processus dont les priorités ont été modifiées dans l'espace des processus utilisateur occupent un pourcentage de CPU, par exemple : 0,0%ni,
ni
- Paragraphe 4 :
Pourcentage de CPU inactif, par exemple : 77,1 % id,
id
- Paragraphe 5 :
Pourcentage de temps CPU en attente d'entrée et de sortie, par exemple : 0,0%wa,
wa
- Paragraphe 6 Paragraphe :
Temps total passé par le CPU à traiter les interruptions matérielles, par exemple : 0,0%hi,
hi
- Paragraphe 7 :
Temps total passé par le CPU à gérer les interruptions logicielles , par exemple : 1.8%si,
si
- Paragraphe 8 :
Steal time Le temps CPU volé par la machine virtuelle par l'hyperviseur (si la vm est actuellement sous un hyperviseur, le hyperviseur en fait Il consomme également une partie du temps de traitement du CPU)
st
- Ligne 4 :
Informations liées à la mémoire mémoire (Mem : 12196436k total, 12056552k utilisés, 139884k libres, 64564k tampons)
- Segment 1 : Mémoire physique totale, par exemple : Mem : 12196436k total,
- Paragraphe 2 : Quantité totale de mémoire physique utilisée, par exemple : 12056552k utilisé,
- Paragraphe 3 : Quantité totale de mémoire libre, par exemple : Mem : 139884k libre ,
- Paragraphe 4 : La quantité de mémoire utilisée comme cache du noyau, par exemple : 64564k tampons
- Ligne 5 : Swap swap Informations relatives à la partition (Swap : 2097144k total, 151016k utilisés, 1946128k gratuits, 3120236k en cache)
- Paragraphe 1 : Montant total de la zone d'échange, par exemple : Swap : 2097144k total,
- Paragraphe 2 : Montant total de la zone d'échange utilisée, par exemple : 151016k utilisé,
- Paragraphe 3 : Montant total de la zone d'échange gratuite zone d'échange, par exemple : 1946 128 ko libre,
- Paragraphe 4 : zone d'échange totale en mémoire tampon, 3120 236 k en cache
Informations sur le processus :
Appuyez sur f dans la commande supérieure pour afficher les informations de la colonne affichée. Appuyez sur la lettre correspondante pour activer/désactiver la colonne. Les lettres majuscules signifient activées, les lettres minuscules signifient désactivées. Les colonnes marquées d'un * sont les colonnes par défaut.A : = (ID de processus) ID de processus
PID
- E :
= (Nom d'utilisateur) Le nom d'utilisateur du propriétaire du processus
USER
; H :
PR
= (Priorité) prioritéI :
NI
= (Belle valeur) belle valeur. Les valeurs négatives représentent une priorité élevée, les valeurs positives représentent une faible prioritéO :
VIRT
= (Image virtuelle (ko)) La mémoire virtuelle totale utilisé par le processus Quantité, unité kb. VIRT=SWAP+RESQ :
RES
= (Taille du résident (Ko)) La taille de la mémoire physique utilisée par le processus et non échangée , unité ko. RES=CODE+DATAT :
SHR
= (Taille de la mémoire partagée (ko)) Taille de la mémoire partagée, unité koW :
S
= (Statut du processus) Statut du processus. D = état de veille ininterrompue, R = course, S = veille, T = piste/arrêt, Z = processus zombieK :
%CPU
= (CPU utilisation) Le pourcentage de temps CPU occupé depuis la dernière mise à jourN :
%MEM
= (Utilisation de la mémoire (RES)) Pourcentage de mémoire physique utilisée par le processusM :
TIME
+ = (Temps CPU, centièmes) Temps CPU total utilisé par le processus, unité 1/100 deuxième
b :PPID
= (Pid du processus parent) ID du processus parent
c :RUSER
= (Nom d'utilisateur réel)
d :UID
= (ID utilisateur) ID utilisateur du processus propriétaire
f :GROUP
= (Nom du groupe) Le nom de groupe du propriétaire du processus
g :TTY
= (Tty de contrôle) Le nom du terminal du processus démarré. Les processus qui ne sont pas démarrés depuis le terminal sont affichés comme ?
j :P
= (Dernier processeur utilisé (SMP)) Le dernier processeur utilisé n'a de sens que dans un environnement multi-CPU
p :SWAP
= ( Taille échangée (Ko)) La taille de la mémoire virtuelle utilisée par le processus qui est échangé, unité Ko
l:TIME
= (Temps CPU) Le temps CPU total utilisé par le processus, unité secondes
r :CODE
= (Taille du code (ko)) La taille de la mémoire physique occupée par le code exécutable, en ko
s :DATA
= (Taille des données+stack (ko)) La partie autre que le code exécutable (segment de données + pile) La taille de la mémoire physique occupée, en ko
u :nFLT
= (Nombre de défauts de page) Nombre de défauts de page
v :nDRT
= (Pages sales count) La dernière fois qu'il a été écrit, il a été modifié Nombre de pages
y :WCHAN
= (En veille en fonction) Si le processus est en veille, le nom de la fonction système en veille est affiché
z :Flags
= (Task Flags) Task Pour les indicateurs, reportez-vous à sched.h -
Reportez-vous à l'explication détaillée de la commande supérieure de l'outil d'analyse des performances Linux
Exécuter top -Hp PID, tel que top -Hp 15477COMMAND
Remarque : à l'heure actuelle, le PID est l'identifiant du thread
S'il y a une exception dans le thread 15571 et que vous devez la vérifier, utilisez jstack pour imprimer la pile et vérifier l'état du thread 15571 (15571 hexadécimal = 3cd3)
2. jstack
Commande java de référence - outil jstack Série d'apprentissage des commandes Java (2) -Jstack
Besoin d'aller dans JDK. Utilisez-le dans le répertoire d'installation (vous pouvez visualiser le processus Java via ps Hexadecimal = 3cd3) Statut
Analyse du journal jstack :
Monitor Monitor :
Chaque objet n'a qu'un seul moniteur.
La figure suivante décrit la relation entre les threads et les moniteurs, ainsi que les transitions d'état des threads :
Entrt Set : indique que le le thread demande d'acquérir le verrou de l'objet via une synchronisation. Si l'objet est verrouillé, entrez le propriétaire ; sinon attendez dans la zone d'entrée. Une fois que le verrou de l'objet est libéré par d'autres threads, il participe immédiatement à la compétition.
Le propriétaire : indique qu'un thread a réussi à concourir pour le verrouillage de l'objet.
Wait Set : indique que le thread libère le verrou de l'objet via la méthode object.wait() de l'objet et attend dans la zone d'attente d'être réveillé.
Comme vous pouvez le voir sur l'image, un moniteur ne peut appartenir qu'à un seul thread à un certain moment, et ce thread est <code><span style='font-family: "Microsoft YaHei"'>Active Thread</span>
Active Thread <span style='font-family: "Microsoft YaHei"'>Waiting</span> <span style='font-family: "Microsoft YaHei"'>Thread</span>
, tandis que les autres threads sont <code><span style='font-family: "Microsoft YaHei"'>Entry</span> <span style='font-family: "Microsoft YaHei"'>Set</span>
En attente<span style='font-family: "Microsoft YaHei"'>Wait</span> <span style='font-family: "Microsoft YaHei"'>Set</span>
Thread
Entrée Attendez à l'intérieur de Set<code><span style='font-family: "Microsoft YaHei"'>Entry</span> <span style='font-family: "Microsoft YaHei"'>Set</span>
et Wait<code><span style='font-family: "Microsoft YaHei"'>Waiting for monitor entry</span>。
Set. <span style='font-family: "Microsoft YaHei"'>Wait</span> <span style='font-family: "Microsoft YaHei"'>Set</span>
L'action du fil en attente dans <code><span style='font-family: "Microsoft YaHei"'>in Object.wait()</span>
Entrée Set
<p>En attente de l'entrée du moniteur<span style="color: #888888">. </span></p>
L'action du fil de discussion en attente dans <strong>Attendre</strong>
est dans Object.wait(). Lorsqu'un fil de discussion demande à entrer dans la section critique, il entre dans la file d'attente de l'ensemble d'entrées.
(Nous appelons le segment de code protégé par synchronisé comme section critique. Lorsqu'un fil demande à entrer dans la section critique, il entre dans la file d'attente "Entry Set") Statut du fil :
NOUVEAU: Non démarré. N'apparaîtra pas dans Dump. RUNNABLE : exécuté dans la machine virtuelle, état en cours d'exécution. L'Espace Propriétaire
BLOQUÉ : Bloqué et en attente de verrouillage du moniteur. Attendez le verrou dans la zone Entry Set .
WATING : Attendre indéfiniment qu'un autre thread effectue une opération spécifique.
Dans la zone Wait Set
attendez qu'une certaine condition ou surveillance se produise, en restant généralement dans des instructions telles que wait().
TIMED_WATING : Attente limitée dans le temps pour une opération spécifique provenant d'un autre thread. Dans la zone
WaitSet, la différence entre et WAITING est que wait() et d'autres instructions ajoutent une limite de temps d'attente (timeout).
TERMINÉ: Quitté. Modification d'appel indique des opérations importantes supplémentaires lorsque le thread appelle une méthode. Modifiez l'appel de méthode ci-dessus.
verrouillé
attente du verrouillage
en attente de
Objectif : Après avoir demandé avec succès le verrouillage de l'objet en utilisant synchronisé, relâchez le verrou,
attendez le verrouillage la zone Wait Set. L'état du fil est WAITING ou TIMED_WATING
parking à attendre
(park est une primitive de blocage de thread de base qui ne bloque pas les objets via le moniteur.
park : entrez dans l'état d'attente, comparez wait peut faire en sorte que le thread ATTENDE sans acquérir le verrou et le réveiller via unpark)
Action du thread
La raison pour laquelle l'état du thread est généré.
runnable : La zone Propriétaire, statut RUNNABLEdans Object.wait() : Appelez wait(), zone Wait Set, le statut est WAITING ou TIMED_WAITING, modifier l'attente sur attente pour l'entrée du moniteur : attente de verrouillage, zone de jeu d'entrée, statut BLOQUÉ, modification en attente pour verrouillerattente sur condition : Garé en raison de certaines conditions, zone Wait Set, le statut est parking à attendredormir : Thread en veille, appelé Thread.sleep()Résumé
1. Vérifiez le vidage du thread, regardez d'abord l'état du thread/l'action du thread (plus intuitif), vous pouvez déterminer à quelle étape se trouve actuellement le thread. Ensuite, regardez la modification de l'appel et l'état du verrouillage, vous pouvez essentiellement déterminer s'il y a un problème avec le thread secondaire
2. Vous pouvez imprimer des instantanés du fil plusieurs fois sur une courte période de temps (la période pendant laquelle il peut y avoir des problèmes), puis vérifiez les problèmes possibles. Cette situation d'un certain thread peut efficacement trouver le problème.
3. jps
Semblable à la commande Linux ps
Série d'apprentissage des commandes Java de référence (1) - Jps
./jps
./jps -q
./jps -m
./jps -l
./jps -v
4. jmap
Référence : Série d'apprentissage des commandes Java (3) - Jmap
commande java - utilisation de la commande jmap
jmap -heap PID : utilisation du tas
jmap -histo PID : situation de l'objet
(jmap -histo:live Cette commande est exécutée, la JVM déclenchera d'abord gc, puis collectera des informations statistiques
Focus sur les classes du projet : [C est un tableau de chaînes, String est utilisé ; [B est un tableau d'octets, utilisé par la couche réseau. Peu importe si ces deux sont plus grands
[C est un caractère[]
[S est un court[ ]
[I est un int[]
[B est un octet[]
[ [I is a int[] []
Résumé : ce qui précède représente l'intégralité du contenu de cet article. J'espère qu'il sera utile à l'apprentissage de chacun. Pour plus de didacticiels connexes, veuillez visiter . Tutoriel vidéo Java, Tutoriel graphique de développement Java, Tutoriel vidéo bootstrap !
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!

Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

Il existe de nombreuses questions que les débutants sous Linux posent souvent : « Linux a-t-il un gestionnaire de tâches ? », « Comment ouvrir le gestionnaire de tâches sous Linux ? » Les utilisateurs de Windows savent que le gestionnaire de tâches est très utile. Vous pouvez ouvrir le Gestionnaire des tâches en appuyant sur Ctrl+Alt+Suppr sous Windows. Ce gestionnaire de tâches vous montre tous les processus en cours d'exécution et la mémoire qu'ils consomment, et vous pouvez sélectionner et tuer un processus à partir du programme gestionnaire de tâches. Lorsque vous utiliserez Linux pour la première fois, vous rechercherez également quelque chose qui équivaut à un gestionnaire de tâches sous Linux. Un expert Linux préfère utiliser la ligne de commande pour rechercher les processus, la consommation de mémoire, etc., mais ce n'est pas obligatoire

La prise en charge du chinois par Zabbix n'est pas très bonne, mais parfois nous choisissons toujours le chinois à des fins de gestion. Dans l'interface Web surveillée par Zabbix, le chinois sous l'icône graphique affichera des petits carrés. Ceci est incorrect et nécessite le téléchargement de polices. Par exemple, "Microsoft Yahei", "Microsoft Yahei.ttf" est nommé "msyh.ttf", téléchargez la police téléchargée dans /zabbix/fonts/fonts et modifiez les deux caractères dans /zabbix/include/defines.inc.php. fichier dans definition('ZBX_GRAPH_FONT_NAME','DejaVuSans');define('ZBX_FONT_NAME'

Saviez-vous comment vérifier la date de création d'un compte sur un système Linux ? Si vous le savez, que pouvez-vous faire ? Avez-vous réussi ? Si oui, comment faire ? Fondamentalement, les systèmes Linux ne suivent pas ces informations, alors quelles sont les autres manières d'obtenir ces informations ? Vous vous demandez peut-être pourquoi je vérifie cela ? Oui, il existe des situations dans lesquelles vous devrez peut-être consulter ces informations et elles vous seront utiles à ce moment-là. Vous pouvez utiliser les 7 méthodes suivantes pour vérifier. Utilisez /var/log/secure Utilisez l'outil aureport Utilisez .bash_logout Utilisez la commande chage Utilisez la commande useradd Utilisez la commande passwd Utilisez la dernière commande Méthode 1 : Utilisez /var/l

Installation à l'échelle du système Si vous installez une police à l'échelle du système, elle sera disponible pour tous les utilisateurs. La meilleure façon de procéder est d'utiliser les packages RPM des référentiels de logiciels officiels. Avant de commencer, ouvrez l'outil "Logiciel" dans Fedora Workstation, ou d'autres outils utilisant le référentiel officiel. Sélectionnez la catégorie « Modules complémentaires » dans la barre de sélection. Sélectionnez ensuite « Polices » dans la catégorie. Vous verrez les polices disponibles similaires à celle de la capture d'écran ci-dessous : Lorsque vous sélectionnez une police, certains détails apparaîtront. Selon plusieurs scénarios, vous pourrez peut-être prévisualiser un exemple de texte pour la police. Cliquez sur le bouton "Installer" pour l'ajouter à votre système. En fonction de la vitesse du système et de la bande passante du réseau, ce processus peut prendre un certain temps.

1. Recherchez les polices wingdings, wingdings2, wingdings3, Webdings et MTExtra sur Internet 2. Entrez dans le dossier principal, appuyez sur Ctrl+h (afficher les fichiers cachés) et vérifiez s'il existe un dossier .fonts. Sinon, créez. 3. Copiez les polices téléchargées telles que wingdings, wingdings2, wingdings3, Webdings et MTExtra dans le dossier .fonts du dossier principal. Ensuite, démarrez wps pour voir s'il existe toujours une boîte de dialogue de rappel « Police manquante dans le système ». sinon, juste du succès Notes : wingdings, wingdin

Environnement expérimental : OS : LinuxCentos7.4x86_641. Affichez le fuseau horaire actuel du serveur, répertoriez le fuseau horaire et définissez le fuseau horaire (s'il s'agit déjà du fuseau horaire correct, veuillez l'ignorer) : #timedatectl#timedatectllist-timezones#timedatectlset-timezoneAsia. /Shanghai2. Compréhension des concepts de fuseau horaire : GMT, UTC, CST, DSTUTC : La terre entière est divisée en vingt-quatre fuseaux horaires. Dans les situations de communication radio internationale, dans un souci d'unification, une heure unifiée est utilisée, appelée Temps coordonné universel (UTC : UniversalTim).

Comment utiliser un câble réseau pour connecter deux hôtes Ubuntu à Internet 1. Préparez l'hôte A : ubuntu16.04 et l'hôte B : ubuntu16.042. L'hôte A possède deux cartes réseau, l'une est connectée au réseau externe et l'autre est connectée. pour accueillir B. Utilisez la commande iwconfig pour afficher toutes les cartes réseau sur l'hôte. Comme indiqué ci-dessus, les cartes réseau sur l'hôte A (ordinateur portable) de l'auteur sont : wlp2s0 : Il s'agit d'une carte réseau sans fil. enp1s0 : carte réseau filaire, la carte réseau connectée à l'hôte B. Le reste n’a rien à voir avec nous, inutile de s’en soucier. 3. Configurez l'adresse IP statique de A. Modifiez le fichier #vim/etc/network/interfaces pour configurer une adresse IP statique pour l'interface enp1s0, comme indiqué ci-dessous (où #==========

Différentes architectures de processeur signifient qu'exécuter DOS sur le Raspberry Pi n'est pas facile, mais ce n'est pas très compliqué. FreeDOS est peut-être familier à tout le monde. Il s'agit d'un système d'exploitation complet, gratuit et bien compatible pour DOS. Il peut exécuter certains anciens jeux DOS ou logiciels commerciaux, et peut également développer des applications embarquées. Tant que le programme peut fonctionner sur MS-DOS, il peut fonctionner sur FreeDOS. En tant qu'initiateur et coordinateur du projet FreeDOS, de nombreux utilisateurs me poseront des questions en tant qu'initié. La question qu'on me pose le plus souvent est : « FreeDOS peut-il fonctionner sur un Raspberry Pi ? » Cette question n'est pas surprenante. Après tout, Linux fonctionne très bien sur le Raspberry Pi
