Java.lang.OutOfMemoryError: Java heap space

Résolu
Ezekhx Messages postés 73 Date d'inscription   Statut Membre Dernière intervention   -  
Ezekhx Messages postés 73 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour !

Je cherche à développer un serveur privé d'un MMORPG en ligne qui a fermé il y a une décennie, et j'ai récupéré les fichiers du jeu.
Maintenant, après avoir suivi toutes les étapes de fabrication, la console m'indique ceci après avoir lancé le RunAll.exe.
Comment faire ? Aidez-moi s'il vous plaît je n'ai plus aucune idée !
J'ai essayé en faisant Panneau de configuration > Programmes > Java et en augmentant le "head space" jusqu'à avoir 3GB en utilisant la commande "-Xms3072m".

Merci d'avance pour vos réponses.

9 réponses

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Bonjour,

Ouvre jvisualvm.exe (fourni dans le JDK) puis lances ton programme comme d'habitude, tu vas voir apparaître dans Visual VM le process de ton application, ouvre le, cela va te donner davantage d'informations sur la vie de ton programme (mémoire, threads actifs, garbage collector, etc.)
0
Ezekhx Messages postés 73 Date d'inscription   Statut Membre Dernière intervention  
 
Salut et merci de ta réponse !

J'ai ouvert ton .exe, que fais-je ensuite ?
0
Ezekhx Messages postés 73 Date d'inscription   Statut Membre Dernière intervention   > Ezekhx Messages postés 73 Date d'inscription   Statut Membre Dernière intervention  
 
Je n'ai aucune notion d'info, alors je ne sais pas ce qu'il faut faire :(
0
Ezekhx Messages postés 73 Date d'inscription   Statut Membre Dernière intervention  
 
Je l'ai ouvert, j'ai lancé le programme, j'ai plein d'infos mais je ne sais pas quoi en faire...
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020 > Ezekhx Messages postés 73 Date d'inscription   Statut Membre Dernière intervention  
 
Comment tu veux "développer un serveur privé d'un MMORPG en ligne" si tu n'as "aucune notion d'info"...

Ce n'est pas magique et au moindre problème comme ici tu vas être coincé.

"j'ai plein d'infos mais je ne sais pas quoi en faire"
Déjà savoir si la quantité de mémoire allouée à ton programme est bien celle que tu as configurée... au travers des arguments de la JVM et/ou suivre les graphes d'évolution de mémoire pour savoir à combien ça plante.
0
Ezekhx Messages postés 73 Date d'inscription   Statut Membre Dernière intervention  
 
Voilà ce que ça me donne !


Qu'est ce que ça veux dire selon toi ?
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Les valeurs indiquées sur le graphe de la Heap indiquent 256 Mo, ce n'est pas assez, d'où les OutOfMemoryError sur la Heap.
Ton paramétrage à 3Go n'a affecté que la quantité de mémoire allouée à la JVM, pas celle que la JVM alloue à ton programme...
0
Ezekhx Messages postés 73 Date d'inscription   Statut Membre Dernière intervention  
 
Du coup, comment est-ce que je fais pour fixer le problème maintenant ? S'il te plaît ! ^^
0
Ezekhx Messages postés 73 Date d'inscription   Statut Membre Dernière intervention  
 
Parce que je comprends, mais je comprends pas pourquoi est-ce que quand je mets la fonction -Xmx3072M, ça ne fixe pas mon problème...
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020 > Ezekhx Messages postés 73 Date d'inscription   Statut Membre Dernière intervention  
 
Dans ta description tu parles d'un RunAll.exe

Un programme Java ne devrait pas être en .exe et le fait qu'il le soit signifie que ton programme n'est pas complètement un programme Java, donc tout ce qu'il devrait être possible de faire normalement ne l'est peut-être pas dans ton cas.

Il faudrait en savoir plus sur ton programme pour savoir ce qui relève du Java et ce qui ne l'est pas et donc non modifiable...
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020 > Ezekhx Messages postés 73 Date d'inscription   Statut Membre Dernière intervention  
 
"quand je mets la fonction -Xmx3072M, ça ne fixe pas mon problème"
Je l'ai expliqué plus haut :
Ton paramétrage à 3Go n'a affecté que la quantité de mémoire allouée à la JVM, pas celle que la JVM alloue à ton programme.
0
Ezekhx Messages postés 73 Date d'inscription   Statut Membre Dernière intervention  
 
Vu qu'il plante quand il doit charger les "Mobs", je pense que le problème vient de l'un ou de ces dossiers :
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Un programme qui plante parce qu'il n'a plus de mémoire pourrait planter à n'importe quel moment même sur l'opération la plus insignifiante, ce sera la goutte d'eau qui fait déborder le vase.

Le but du jeu ici ça va être de lui trouver un vase plus grand...

Si tu as accès aux fichiers .class c'est bon signe pour toi, on pourrait lancer le programme Java sans passer par le RunAll.exe... est-ce qu'il y a d'autres fichiers au niveau du RunAll qui permettrait de savoir comment est démarré le programme (des .bat ou .cmd par exemple)
0
Ezekhx Messages postés 73 Date d'inscription   Statut Membre Dernière intervention  
 
Voilà le dossier où se situe le runall


et voilà, quand je fais le chemin jusqu'aux dossier où s'exécutent les .exe, j'atterris ici.

Que voudrais-tu voir ?
Et merci pour la métaphore, je comprends mieux maintenant ^^
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Le premier fichier RunAll.bat est intéressant.

Déjà tu vas diminuer la valeur
4000m
à
512m
parce que ça n'a aucun sens.
Ensuite tu vas rajouter sur la même ligne
-Xms512m -Xmx2048m


Et tu vas lancer le programme directement en lançant le .bat (sans le .exe)

Je t'invites aussi à ouvrir jvisualvm comme tout à l'heure pour suivre l'évolution de la mémoire, ici je donnes des valeurs un peu au pif, qu'il faudra sûrement ajuster.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Ezekhx Messages postés 73 Date d'inscription   Statut Membre Dernière intervention  
 

J'ai fait ça et quand je l'exécute, il se ferme tout de suite...
Ensuite j'ai retiré du coup le -Xms512m -Xmx2048m, et ça me refait comme au début.
Est-ce que j'ai fait une erreur ?
Et j'ai pas compris l'histoire du .bat, tu veux dire que je lance juste le hoertje ?
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Je ne sais pas ce que c'est hoertje...

Les deux options que je t'ai demandé de rajouter, mets les avant le nom de la classe GameServer.StartGameServer

Et pour éviter que ça s'ouvre et que ça se ferme, démarre ton .bat depuis une invite de commande.

Sachant que si c'est bien fait, peut-être qu'avec le .exe ça marcherait quand même...
0
Ezekhx Messages postés 73 Date d'inscription   Statut Membre Dernière intervention   > KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention  
 
J'ai essayé de le placer où tu me l'as dit (avant Game server), ça ne fonctionne pas...
Comment est-ce que je le démarre avec un .bat ? Je rename juste en .bat au lieu du .exe ?
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020 > Ezekhx Messages postés 73 Date d'inscription   Statut Membre Dernière intervention  
 
"Comment est-ce que je le démarre avec un .bat ?"
Vu ton impression écran tu ne vois pas les extensions de tes fichiers, j'ai donc l'impression que tu n'as jamais eu de .exe, ce que tu appelles RunAll.exe c'est en fait le RunAll.bat que tu édites avec NotePad++

Bref, cliques dessus comme avant, sinon lances le depuis une invite de commandes.
PS. N'oublies pas d'enregistrer le fichier dans NotePad++ (sur ton impression écran ce n'est pas le cas...)
0
Ezekhx Messages postés 73 Date d'inscription   Statut Membre Dernière intervention  
 
Je l'ai bien enregistré ! Et après ça me l'a quitté tout de suite.
Oui j'utilise notepad++, donc ça doit être des .bat comme tu le dis ^^
Et je vais essayer avec l'invite de commandes !
D'autres idées ou pas pour essayer de choper un vase plus grand ? ^^
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020 > Ezekhx Messages postés 73 Date d'inscription   Statut Membre Dernière intervention  
 
Il faudrait faire comme tout à l'heure, ouvrir JVisualVM et suivre le graphe de mémoire pour savoir s'il a pris en compte ton paramétrage.
0
Ezekhx Messages postés 73 Date d'inscription   Statut Membre Dernière intervention  
 


Voilà ce qu'il se passe sur Visual avec le programme où j'ai changé 4000m par 512m !
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
4000m par 512m ne changera rien, c'est un paramétrage de la mémoire "secondaire" (permgen), toi ton problème concerne la mémoire principale (heap) qu'il faut augmenter d'où mon paramétrage
-Xms512m -Xmx2048m
qui devrait faire commencer le graphe en haut à droite à 512 minimum, et 2048 maximum.

Sur ton image il est toujours à 256m...
0
Ezekhx Messages postés 73 Date d'inscription   Statut Membre Dernière intervention  
 
Et du coup on peut pas faire entrer le -Xms512m -Xmx2048m ailleurs ?
0
Ezekhx Messages postés 73 Date d'inscription   Statut Membre Dernière intervention  
 
Il faudrait que l'on trouve comment est-ce qu'il peut prendre en compte le nouveau paramétrage, mais comme je suis une quiche... Je peux vraiment pas aider :(
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
"on peut pas faire entrer le -Xms512m -Xmx2048m ailleurs"
Si tu parles de bidouiller les config de la JVM comme tu l'as fait avec ton -Xms3072m ça ne sert à rien, d'ailleurs ce serait bien que tu la vires cette configuration et que tu reviennes à la conf par défaut de la JVM parce que si elle prends déjà 3Go rien que pour démarrer, ça fait 3Go de moins disponibles pour ton programme...

Les options Xms et Xmx devraient être pris en compte immédiatement ou alors c'est que tu ne modifies pas le bon fichier, pour ça rien de plus simple : tu changes le nom de la classe à lancer, genre GameStartServer2, apriori il devrait te dire qu'il ne trouve pas la classe...
0
Ezekhx Messages postés 73 Date d'inscription   Statut Membre Dernière intervention  
 
En modifiant donc en rajoutant le 2) avec le rajout Xms et Xmx, ça se ferme automatiquement, et sans le rajout Xms et Xmx, ça se ferme aussi !
0
Ezekhx Messages postés 73 Date d'inscription   Statut Membre Dernière intervention  
 
Quand je lance le RunAll.bat, voilà sur quoi je tombe au début, jusqu'au fameux message d'erreur. Est-ce que la première ligne te paraît suspecte ?
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
La première ligne est normale, l'architecture de la JVM a changé en Java 8 et il n'y a plus de permgen (la mémoire secondaire) mais ça ne va pas te changer grand chose ton problème est sur la mémoire principale.

Par contre du coup tu peux complètement virer l'option à 4000m, elle ne sert à rien si tu es en Java 8... la question étant de savoir si ce n'est pas un peu risqué de vouloir faire tourner un programme qui a 10 ans avec Java 8 pour lequel il n'est peut être pas compatible.

Mais ça, ce sera d'autres erreurs plus tard...
0
Ezekhx Messages postés 73 Date d'inscription   Statut Membre Dernière intervention  
 
Le programme a été modifié par d'autres personnes qui eux-mêmes ont voulu faire un serveur il y a 3 ans, donc tout date de y a 3 ans. Mais ils ont abandonné, et ont remis les fichiers modifiés sur Internet !
0
Ezekhx Messages postés 73 Date d'inscription   Statut Membre Dernière intervention  
 
Avec le RunAll.bat non modifié

Avec les Xms et Xmx

Sans le Xms et le Xmx mais avec le Gameserver2
0
Ezekhx Messages postés 73 Date d'inscription   Statut Membre Dernière intervention  
 
J'ai trouvé la solution ! Merci beaucoup pour l'aide ^^
0
Ezekhx Messages postés 73 Date d'inscription   Statut Membre Dernière intervention  
 
KX, j'ai un autre problème pour toi a présent, si tu es toujours disponible, toujours lié à ce fameux jeu. A présent que le "serveur" est lancé, le client lui refuse de se connecter au serveur (il refuse de le lancer, ou ne trouve pas le serveur), comment faire ? Je peux fournir des screens de la console du serveur et du message d'erreur si tu veux.
Qu'est-ce que cela veux dire ?
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
S'il y a un message d'erreur oui, ça peut être utile, mais vu qu'a priori ça concerne un autre problème ce serait mieux de créer une autre discussion...
0
Ezekhx Messages postés 73 Date d'inscription   Statut Membre Dernière intervention   > KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention  
 
Je créé de suite une autre discussion !
0