Problèmes de fragmentation d' AIX

L'épuisement du tas natif peut aussi se produire sans que les pages Inuse approchent du nombre de 65535 pages Inuse. Elle peut être causée par la fragmentation des segments de mémoire AIX® malloc , qui est la façon dont AIX gère le segment de mémoire natif de la machine virtuelle Java.

La condition OutOfMemory peut de nouveau être identifiée à partir des instantanés svmon. Auparavant, la colonne importante à examiner en cas de fuite de mémoire était la valeur Inuse. Pour les problèmes dans les segments de mémoire AIX malloc , il est important de consulter la colonne Addr Range . La colonne Addr Range affiche les détails des pages qui ont été allouées, tandis que Inuse affiche le nombre de pages qui sont en cours d'utilisation (engagées).

Il est possible que les pages qui ont été allouées n'aient pas été restituées au processus lorsqu'elles ont été libérées. La non-restitution des pages est ce qui explique la différence entre le nombre de pages allouées et le nombre de pages engagées.

Vous avez une plage de variables d'environnement qui permet de modifier le comportement de l'algorithme malloc lui-même et de résoudre les problèmes de ce type :
MALLOCTYPE=3.1
Cette option permet au système de revenir à une version antérieure de modèle d'allocation de mémoire dans lequel l'allocation s'effectue par puissances de 2. L'allocateur Malloc 3.1, contrairement à l'algorithme par défaut, libère les pages de mémoire et les restitue au système pour qu'il puisse les utiliser. la politique d'allocation 3.1 est utilisable uniquement avec les applications 32 bits.
MALLOCMULTIHEAP=heaps:n, prédimensionnement
Par défaut, le sous-système malloc utilise un seul tas. MALLOCMULTIHEAP permet aux utilisateurs d'activer l'utilisation de plusieurs tas de mémoire. Plusieurs tas de mémoire peuvent provoquer une fragmentation de la mémoire et l'utilisation de cette variable d'environnement est donc à éviter.
MALLOCTYPE=compartiments
Les buckets Malloc fournissent une extension optionnelle basée sur les buckets de l'allocateur par défaut. Son rôle est d'améliorer les performances malloc des applications qui émettent de grands nombres de petites demandes d'allocation. Lorsque les buckets malloc sont activés, les demandes d'allocation entrent dans une plage prédéfinie de tailles de blocs traitées par les buckets malloc. En raison des variations des exigences en termes de mémoire et d'utilisation, certaines applications peuvent ne pas bénéficier du modèle d'allocation de mémoire utilisé par les buckets malloc. Par conséquent, il est déconseillé d'activer les buckets malloc dans le tout le système. Pour obtenir des performances optimales, activez et configurez les buckets malloc par application.
Remarque: Ces options peuvent entraîner un pourcentage d'impact sur les performances. En outre, l'allocateur malloc 3.1 ne prend pas en charge les options Malloc Multiheap et Malloc Buckets.
MALLOCBUCKETS= nombre_de_buckets:128,facteur_dimensionnement_bucket:64,blocs_par_bucket:1024: statistiques_bucket: <path name of file for malloc statistics>
Voir MALLOCTYPE=buckets.