L’augmentation de la taille maximale de la ligne d’entrée nécessite plus de mémoire pour le stockage des documents sérialisés. Une augmentation de la taille maximale du tas de la JVM est donc généralement nécessaire.
Un système lourdement chargé et traitant un grand nombre de documents peut rapidement saturer la mémoire du tas JVM. Pour éviter de saturer la mémoire (OutOfMemoryError), vous devez augmenter la taille maximale du tas de la JVM d’un volume correspondant à la taille des documents de la ligne d’entrée multipliée par le nombre de documents généralement exécutés à un moment donné.
Taille maximale du tas de la JVM = (taille des documents de ligne d’entrée) x (nombre moyen de documents traités)
Calcul de la taille maximale du tas de la JVM
Dans cet exemple, la taille maximale actuelle du tas de la JVM est de 512 Mo et la taille maximale de la ligne d’entrée, de 64 Ko. Vous devez configurer le serveur pour le scénario suivant : 10 tâches sont exécutées simultanément et chacune compte 9 fichiers d’entrée et un fichier de résultats (soit un total de 10 fichiers par tâche et 100 fichiers traités simultanément). La taille de chaque fichier ne dépasse pas 512 Ko.
Pour stocker tous les fichiers dans la ligne d’entrée, la taille maximale de cette dernière doit être de 512 Ko au minimum.
Utilisez l’équation suivante pour calculer l’augmentation requise de la taille maximale du tas de la JVM :
(512 Ko) x (100) = 51 200 Ko ou 50 Mo
Vous devez augmenter la taille maximale du tas JVM de 50 Mo pour un total de 562 Mo.
Fragmentation du tas
Si vous réglez la taille des documents de ligne d’entrée sur de grandes valeurs, vous augmentez le risque d’apparition d’erreurs OutOfMemoryError sur les systèmes sujets à la fragmentation du tas. Pour stocker un document de ligne d’entrée, il faut que la mémoire du tas JVM dispose d’un espace contigu suffisant. Certains systèmes d’exploitation, JVM et algorithmes collecteurs sont sujets à la fragmentation du tas. La fragmentation réduit la quantité d’espace de tas contigu et peut générer un message de mémoire saturée (OutOfMemoryError) même si l’espace disponible total est suffisant.
Par exemple, les précédentes opérations sur le serveur d’applications ont laissé le tas JVM dans un état fragmenté et le collecteur est incapable de compresser suffisamment le tas pour récupérer de grands blocs d’espace libre. Une erreur OutOfMemoryError peut se produire même si vous augmentez la taille maximale du tas JVM en fonction de la ligne d’entrée.
Pour éviter une fragmentation du tas, la taille du document de ligne d’entrée ne doit pas dépasser la taille totale du tas de plus de 0,1 %. Par exemple, une taille maximale du tas JVM de 512 Mo peut prendre en charge une taille maximale de ligne d’entrée de 512 Mo x 0,001 = 0,512 Mo, soit 512 Ko.