Correction: une erreur s'est produite lors de l'initialisation de la machine virtuelle n'a pas pu réserver suffisamment d'espace pour le tas d'objets

Même si les applets Java ne sont pas une technologie Web populaire de nos jours, il existe d'innombrables raisons de déployer une machine virtuelle Java directement sur un serveur Linux. Si vous essayez d'exécuter la commande Linux java directement sur un matériel discret ou à l'intérieur de sa propre machine virtuelle, vous pourriez obtenir le message «Une erreur s'est produite lors de l'initialisation de la machine virtuelle n'a pas pu réserver suffisamment d'espace pour le tas d'objets».

Cela semble probablement assez étrange parce que vous avez plus que probablement assez de RAM pour exécuter la commande, mais c'est en grande partie dû à une bizarrerie spécifique dans la façon dont les pages de mémoire physique et virtuelle sont utilisées. Spécifier des tailles relativement grandes devrait vous permettre de contourner complètement ce message et d'exécuter la commande java comme vous le feriez pour n'importe quelle autre.

Méthode 1: utilisation des options de ligne de commande

Si vous avez essayé d'exécuter java et que vous avez reçu ce message, vous avez probablement déjà exécuté la commande gratuite pour vous assurer qu'il y a suffisamment de mémoire pour exécuter le programme.

java et commandes gratuites

Notez que sur notre machine de test, nous avions environ 2,3 Go de RAM physique et pas une seule page de mémoire virtuelle n'avait encore été utilisée. Si vous remarquez que vous avez une crise de mémoire, vous voudrez fermer les autres éléments que vous avez exécutés avant de réessayer. D'un autre côté, ceux qui trouvent qu'ils ont beaucoup de mémoire libre peuvent essayer de spécifier directement une taille.

Par exemple, sur notre machine, nous avons pu exécuter la commande en tant que java -Xms256m -Xmx512M et cela a fonctionné comme on s'y attendait autrement. Cela limite la taille du tas que la machine virtuelle Java tente de réserver au démarrage. Puisqu'une machine virtuelle non restreinte pourrait hypothétiquement faire des choses inhabituelles, elle pourrait envoyer des messages d'erreur sur un système par ailleurs libre. Vous pouvez également jouer avec ces deux valeurs avant de trouver la bonne combinaison.

Cela peut être un problème indépendamment de ce sur quoi vous l'exécutez, car la JVM n'a rien à voir avec le type de VM que vous utilisez pour exécuter GNU / Linux.

Méthode 2: exportation des variables pour rendre la modification permanente

Lorsque vous trouvez une valeur qui fonctionne, vous pouvez l'exporter pour la rendre permanente pour cette session. Par exemple, nous avons utilisé export _JAVA_OPTIONS = '- Xms256M -Xmx512M' à partir de l'invite de commande bash et cela nous a permis d'exécuter la commande java par elle-même sans aucune autre option jusqu'à ce que nous nous déconnections de notre serveur.

Il devait être exécuté à nouveau lorsque nous nous connections dans une autre session, vous pouvez donc l'ajouter à tous les scripts de démarrage pertinents si vous prévoyez d'utiliser la commande java assez souvent. Nous avons ajouté la ligne à notre fichier .bash_login et cela semblait fonctionner à chaque fois que nous utilisions une invite de connexion sans avoir à l'exécuter à nouveau, bien que vous deviez peut-être trouver un autre emplacement si vous travaillez avec un shell différent.

Vous avez peut-être remarqué que seules certaines configurations matérielles déclenchent ce message d'erreur. C'est parce que cela se produit généralement sur des machines avec une grande quantité de RAM physique mais des limites inférieures pour savoir comment l'utiliser. Java essaiera d'allouer un énorme bloc pour se faire dire qu'il ne peut pas, ce qu'il interprète comme un manque de mémoire.

Méthode 3: impression des options Java actuelles

Si vous avez travaillé sur la ligne de commande et que vous voulez une référence rapide à ce que vous avez actuellement défini la valeur _JAVA_OPTIONS, exécutez simplement echo $ _JAVA_OPTIONS et il affichera immédiatement les valeurs actuelles. Ceci est utile pour le dépannage lorsque vous essayez de trouver les bons chiffres à essayer.

Gardez à l'esprit que même si ce correctif ne devrait nécessiter aucun autre jeu, Java lancera le message «Impossible de réserver suffisamment d'espace pour le tas d'objets» si jamais vous vous trouvez véritablement à l'extrémité courte de la mémoire virtuelle. Si tel est le cas, vous voudrez vérifier à nouveau quels processus sont en cours d'exécution et éventuellement redémarrer le serveur si c'est une option. Vous pouvez également créer plus d'espace de swap, mais s'il s'agit d'un problème, il est généralement préférable d'essayer de le corriger d'une autre manière.

Dans les rares cas où vos paramètres semblent corrects mais ne fonctionnent toujours pas, assurez-vous d'avoir installé le package Java 64 bits car il devrait être immunisé contre ce problème. Les exigences de mémoire contiguë ne s'appliquent qu'à la version 32 bits de Java. Nous avons trouvé dans quelques cas que la version 64 bits a tenté de créer une machine virtuelle 32 bits, donc la spécification de l'option -d64 sur la ligne de commande a résolu le problème pour nous.

Recommandé

Correction: Minecraft ne répond pas
Qu'est-ce que l'application d'enregistrement de périphérique de tuner TV numérique et doit-elle être supprimée?
Qu'est-ce que FileRepMalware et devez-vous le supprimer?