Correction : Une erreur s'est produite lors de l'initialisation de la VM, impossible de réserver suffisamment d'espace pour le tas d'objets

Correction : Une erreur s'est produite lors de l'initialisation de la VM, impossible de réserver suffisamment d'espace pour le tas d'objets

Découvrez comment résoudre l'erreur d'initialisation de la machine virtuelle Java sous Linux en ajustant les options de mémoire et en configurant des valeurs permanentes pour un fonctionnement optimal.

Bien que les applets Java ne soient pas une technologie web populaire de nos jours, il existe de nombreuses raisons de déployer une machine virtuelle Java directement sur un serveur Linux. Si vous essayez d'exécuter la commande java sous Linux, que ce soit sur un matériel dédié ou dans sa propre VM, vous pourriez obtenir un message d'erreur : “une erreur est survenue lors de l'initialisation de la VM, impossible de réserver suffisamment d'espace pour le tas d'objet.”

Cela peut sembler plutôt bizarre, car vous avez probablement suffisamment de RAM pour exécuter la commande, mais c'est en grande partie dû à une particularité 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 ce message et d'exécuter la commande java comme vous le feriez avec n'importe quelle autre.

Méthode 1 : Utilisation des options de la 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 free pour vous assurer qu'il y a suffisamment de mémoire pour exécuter le programme.

Notez que sur notre machine de test, nous avions environ 2,3 Go de RAM physique et aucune page de mémoire virtuelle n'avait encore été utilisée. Si vous remarquez que vous manquez de mémoire, vous voudrez fermer d'autres applications que vous exécutez avant d'essayer à nouveau. D'autre part, ceux qui constatent qu'ils ont beaucoup de mémoire libre peuvent essayer de spécifier une taille directement.

Par exemple, sur notre machine, nous avons pu exécuter la commande comme java -Xms256m -Xmx512M et cela a fonctionné comme cela aurait dû. Cela contraint la taille du tas que la machine virtuelle Java tente de réserver au démarrage. Étant donné qu'une machine virtuelle non contrainte pourrait théoriquement faire des choses inhabituelles, elle pourrait générer des messages d'erreur sur un système autrement libre. Vous voudrez peut-être également jouer avec ces deux valeurs avant de trouver la bonne combinaison.

Cela peut poser problème, peu importe sur quoi vous exécutez, car la JVM n'a rien à voir avec le type de VM que vous pourriez utiliser pour exécuter GNU/Linux.

Méthode 2 : Exporter les variables pour rendre le changement permanent

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’ depuis l'invite de commande bash, ce qui nous a permis d'exécuter la commande java seule sans options supplémentaires jusqu'à ce que nous nous déconnectons de notre serveur.

Il a fallu l'exécuter à nouveau lorsque nous sommes revenus dans une autre session, donc vous voudrez peut-être l'ajouter à des 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, même si vous devrez 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. Cela est dû au fait que cela se produit généralement sur des machines avec une grande quantité de RAM physique mais des limites d'utilisation plus faibles. Java essaiera d'allouer un énorme bloc, seulement pour se voir dire qu'il ne peut pas, ce qu'il interprète comme un manque de mémoire.

Méthode 3 : Imprimer les options Java actuelles

Si vous avez travaillé en ligne de commande et souhaitez une référence rapide sur la valeur actuellement définie pour _JAVA_OPTIONS, exécutez simplement echo $_JAVA_OPTIONS et cela affichera immédiatement les valeurs actuelles. Cela est utile pour le dépannage lorsque vous essayez de déterminer les bons nombres à essayer.

Gardez à l'esprit que, bien que ce correctif ne devrait pas nécessiter d'autres manipulations, Java lancera le message “impossible de réserver suffisamment d'espace pour le tas d'objet” si jamais vous vous retrouvez réellement à court de mémoire virtuelle. Si tel est le cas, vous voudrez vérifier les processus actuellement en cours d'exécution et éventuellement redémarrer le serveur si c'est une option. Vous pourriez également créer plus d'espace d'échange, mais si c'est un problème, il est généralement préférable d'essayer de le corriger autrement.

Dans le rare cas où vos paramètres semblent corrects mais que ça ne fonctionne 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 essayait de créer une machine virtuelle 32 bits, donc spécifier l'option -d64 dans la ligne de commande l'a corrigé pour nous.

Maintenant que tu as fini de lire Correction : Une erreur s'est produite lors de l'initialisation de la VM, impossible de réserver suffisamment d'espace pour le tas d'objets, nous t'invitons à explorer davantage la catégorie Linux. Tu y trouveras d'autres articles intéressants qui élargiront tes connaissances et te tiendront informé. Ne cesse pas de lire et de découvrir plus!

Index
  1. Méthode 1 : Utilisation des options de la ligne de commande
  2. Méthode 2 : Exporter les variables pour rendre le changement permanent
  3. Méthode 3 : Imprimer les options Java actuelles

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Go up