WebSphere eXtreme Scale prend en charge le dimensionnement de la consommation de la mémoire par les instances de BackingMap dans les grilles de données réparties. Le dimensionnement de la consommation de mémoire de la taille n'est pas pris en charge pour les instances de grilles de données locales. La valeur signalée par WebSphere eXtreme Scale pour une mappe donnée est très proche de la valeur signalée par l'analyse des clichés de segments. Si l'objet de mappe est complexe, le dimensionnement peut être moins précis. Le message CWOBJ4543 s'affiche dans le journal pour n'importe quel objet d'entrée de cache qui ne peut pas être dimensionné avec précision parce qu'il est trop complexe. Vous pouvez obtenir une mesure plus précise en évitant une complexité de mappe inutile.
Procédure
- Activez l'agent de dimensionnement.
Si vous utilisez une machine virtuelle Java 5 ou supérieure, utilisez l'agent de dimensionnement. Avec cet agent,
WebSphere eXtreme Scale peut obtenir des informations supplémentaires de la machine JVM afin d'améliorer ses estimations. Il est possible de charger l'agent
en ajoutant l'argument suivant à la ligne de commande de la machine virtuelle Java :
-javaagent:rép_biblio_WXS/wxssizeagent.jar
Dans le cas d'une topologie imbriquée,
ajoutez l'argument à la ligne de commande du processus WebSphere
Application Server.
Dans le cas d'une topologie répartie,
ajoutez l'argument à la ligne de commande des processus eXtreme Scale (conteneurs)
et du processus WebSphere
Application Server.
Lorsque le chargement s'est effectué correctement,
le message suivant est écrit dans le fichier
SystemOut.log :
CWOBJ4541I: La fonction de définition optimisée de la taille de la mémoire BackingMap est activée.
- Dans la mesure du possible, utilisez de préférence des types de données Java
plutôt que des types de données personnalisés.
WebSphere eXtreme Scale sait estimer avec précision
le coût en mémoire des types suivants :
- java.lang.String et les tableaux où String est la classe de composant
(String[])
- tous les types d'encapsuleurs primitifs (Byte, Short, Character, Boolean,
Long, Double, Float, Integer) et les tableaux où ces encapsuleurs primitifs
sont le type de composant (par exemple, Integer[], Character[])
- java.math.BigDecimal et java.math.BigInteger ainsi que les tableaux où
ces deux classes sont le type de composant (BigInteger[] et BigDecimal[])
- les types temporels (java.util.Date, java.sql.Date, java.util.Time,
java.sql.Timestamp)
- java.util.Calendar et java.util.GregorianCalendar
- Evitez d'utiliser l'internement d'objet lorsque cela est possible.
Lorsqu'un objet est inséré dans une mappe,
WebSphere eXtreme Scale suppose qu'il détient la seule référence à l'objet et tous les objets auxquels l'objet fait référence directement. Si vous insérez 1 000 objets personnalisés dans une mappe et que chacun de ces objets comporte une référence à la même instance de chaîne,
WebSphere eXtreme Scale dimensionne l'instance de chaîne 1 000 fois en surestimant la taille réelle de la mappe dans le segment de mémoire.
Toutefois,
WebSphere eXtreme Scale compense correctement dans les scénarios d'internement courants suivants :
- références aux énums Java 5
- références aux classes conformes au pattern Typesafe Enum.
Les classes conformes à ce modèle n'ont que des constructeurs privés définis et au moins une zone finale statique privée ayant son propre type et si elles implémentent Serializable, la classe implémente la méthode readResolve().
- confinement d'un encapsuleur primitif Java 5. Par exemple, avec Integer.valueOf(1) à la place du nouveau
Integer(1)
Si vous devez utiliser l'internement, utilisez l'une des techniques précédentes pour obtenir des estimations plus précises.
- Utilisez les types personnalisés à bon escient.
Lorsque vous devez utiliser des types personnalisés,
privilégiez les types primitifs de données pour les zones, plutôt que les types d'objets.
Préférez également à vos propres implémentations personnalisées les types d'objets
répertoriés dans l'entrée 2.
Lorsque vous utilisez des types personnalisés,
veillez à ce que l'arborescence des objets n'ait pas plus d'un niveau. Lorsqu'on insère
un objet personnalisé dans une mappe, WebSphere eXtreme Scale
ne calculera que le coût de l'objet inséré, ce qui inclut toutes les zones primitives et tous les objets directement référencés
par l'objet inséré. WebSphere eXtreme Scale n'ira pas plus loin pour suivre les références
dans l'arborescence. Si vous insérez un objet dans la mappe et que WebSphere eXtreme Scale détecte des références qui n'ont pas été suivies lors du dimensionnement, un message codé CWOBJ4543 contenant le nom de la classe qui n'a pu être dimenssionnée est généré. Lorsque cette erreur se produit, traitez les statistiques de taille de la mappe comme des données de tendance au lieu de vous baser sur des statistiques de taille comme total exact.
- Utilisez le mode de copie CopyMode.COPY_TO_BYTES, si possible.
Utilisez le mode de copie CopyMode.COPY_TO_BYTES pour supprimer toute incertitude liée aux dimensionnement des objets valeur insérés dans la mappe, même lorsqu'une arborescence d'objets comporte trop de niveaux pour être dimensionnée normalement (ce qui génère le message CWOBJ4543).