Bonjour,
Je travaille sur un batch JAVA traitant des fichiers à volume important en entrée de traitement.
Les fichiers en entrée deviennent de plus en plus gros et j'obtiens des outofmemory error (OutOfMemoryError: Java heap space).
En local, j'ai pu augmenter la taille maximum de la JVM à 2Go via l'argument -Xmx2G
Jusque là rien d'anormal, l'augmentation suffit à "corriger" le problème.
Cependant, sur le serveur, l'erreur est toujours présente.
J'ai donc fait une vérification de la mémoire utilisée par JAVA à l'aide de la méthode getHeapMemoryUsage() de la classe MemoryMXBean.
En local, ça m'indique bien que la mémoire maximum allouée est de 2Go. Cependant, sur le serveur, elle est à 910,25 Mo.
Comment cette différence est possible ? Est-ce qu'il est possible de configurer l'option ou un équivalent de Xmx ailleurs qu'au lancement de l'appli ? Par exemple mettre une taille maximum par instance ?
M'enfin, si vous avez une réponse je suis tout ouïe.
Et accessoirement, vous sauriez comment éviter de lire un fichier texte trop gros d'un seul coup (en gros, couper le readline() effectué pour chaque ligne du fichier afin de le lire en plusieurs fois ou au moins vider la mémoire toutes les 100 000 lignes par exemple) ?
Si c'est pas clair ou qu'il manquerait des infos, n'hésitez pas à demander
Merci !
Partager