Cet article analyse les raisons pour lesquelles le débordement de la mémoire du programme Java est plus détaillé. Partagez-le pour tout le monde pour votre référence. Les détails sont les suivants:
Rencontré un système en ligne signalé java.lang.outofMemoryError: Permgen Space Error, vous devez localiser le problème. J'ai eu cela il y a longtemps, et je ne m'en souviens vraiment pas maintenant, mais c'est vraiment une question très intéressante. Tout d'abord, la première réaction consiste à ajouter -xx: + printgcdetails paramètres pour examiner les journaux GC spécifiques, mais parce que le programme est lancé par Tomcat, je crains qu'il y ait trop de choses encapsulées à l'intérieur.
Voyons ensuite la cause de cette erreur.
Le nom complet de l'espace permanent est l'espace de génération permanente, qui fait référence à la zone de préservation permanente de la mémoire. Différentes régions de tas. Place pré-compile sur JSP. Si vous utilisez un grand nombre de troisième pot à partie sous votre application Web, la taille dépasse la taille par défaut (4m) du JVM, ce message d'erreur sera généré.
Ensuite, augmentons la taille initiale de la mémoire de Permgen:
Ajouter au début de Linux au début du fichier Catalina.sh: copier le code du code comme suit: java_opts = "-xms1024m -xmx1024m -xx: permsize = 256m -xx: maxpermSize = 256m" "" "
Plus au début du fichier de la catalina.bat sous Windows: Copier le code du code comme suit: Définissez Java_OPTS = -XMS1024M -XMX1024M -XX: permsize = 256m -xx: maxpermsize = 256m
Ensuite, nous utilisons toujours la mémoire visuelle pour afficher des outils pour localiser des problèmes spécifiques. L'outil préféré pour JDK6 est bien sûr ses propres outils. Cette fois, j'ai rencontré un autre problème étrange, c'est-à-dire que le processus Tomcat n'a pas pu être trouvé après l'ouverture de l'outil d'analyse (JRE a été démarré par la suite, et il devrait être suffisant pour le changer en JDK).
Étant donné que la zone locale n'est pas autorisée, je peux me connecter à distance, il suffit d'ouvrir JMX.
Comme ce qui précède, ajoutez le code de copie au début du fichier java_opts du fichier catalina.sh.sh ou catalina.bat comme suit: -djava.rmi.server.hostname = 192.168.1.101-dcom.management.jmxremote.port = 900 0-- dcom.sun.management.jmxRemote.ssl = false -dcom.sun.management.jmxRemote.authenticate = false
Après avoir démarré le programme, vérifiez si le port est ouvert correctement pour vous assurer que la télécommande peut être connectée.
Je suis paresseux ici et je désactive l'authentification. Ces paramètres sont efficaces sur mon PC local, mais ce n'est pas suffisant sur le serveur. Ouvrez JVisualVM, cliquez sur Fichier-> Ajouter la connexion JMX, puis ajoutez LocalHost: 1000 et connectez.
Après le programme précédent, observant le changement de mémoire pendant un certain temps, je me suis concentré sur la situation de permanente. Il se peut que la taille de la mémoire Perm n'a pas pris effet auparavant, car l'initialisation par défaut de PERM est de 16 m et le maximum est de 64 m, et le montant de l'occupation réel peut en effet provoquer ce problème. . Si vous avez besoin de localiser davantage le problème, vous pouvez également utiliser Btrace pour afficher un endroit où une certaine méthode est appelée. Cela peut positionner si certaines méthodes sont exécutées comme prévu.
On espère que cet article est utile à la conception du programme Java de tous.