3 votes

Comment déterminer la quantité de mémoire utilisée par ehcache ?

J'utilise JBoss 7.1.3.AS avec Java 6 et cette version de ehcache.

            <dependency>
                    <groupId>org.hibernate</groupId>
                    <artifactId>hibernate-ehcache</artifactId>
                    <version>5.1.0.Final</version>
            </dependency>

Nous fonctionnons sur Amazon Linux. Comment puis-je déterminer la quantité de mémoire utilisée par ehcache ? Je peux voir des statistiques sur la quantité de mémoire utilisée par JBOss avec top

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND   
12159 jboss     20   0 14.9g 5.7g  25m S 163.2 19.3 225:18.15 java

et combien de mémoire libre il y a sur notre système

[dalvarado@east1c ~]$ free -m
             total       used       free     shared    buffers     cached
Mem:         30104       8099      22004          0        161       1859
-/+ buffers/cache:       6078      24026
Swap:            0          0          0

mais je souhaite connaître la quantité de mémoire utilisée par notre ehcache afin de pouvoir redimensionner le nombre d'entrées de notre cache par défaut. Notez qu'étant donné que nous sommes dans un environnement de production, l'ajout d'un nouveau code Java n'est pas une option immédiate. Voici la configuration de ehcache

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../config/ehcache.xsd" updateCheck="false">

<!-- This is a default configuration for 256Mb of cached data using the JVM's heap, but it must be adjusted
     according to specific requirement and heap sizes -->
<defaultCache maxElementsInMemory="200000"
     eternal="false"
     timeToIdleSeconds="86400"
     timeToLiveSeconds="86400"
     overflowToDisk="false"
     memoryStoreEvictionPolicy="LRU">
</defaultCache> 
<cache name="main" maxElementsInMemory="200000" />

 <cacheManagerPeerProviderFactory
     class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
     properties="peerDiscovery=automatic, multicastGroupAddress=230.0.0.1,
     multicastGroupPort=4446, timeToLive=32"/>

<cacheManagerPeerListenerFactory
    class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"
    properties="hostName=localhost, port=40001,
    socketTimeoutMillis=2000"/>    

</ehcache>

1voto

popalka Points 1178

Si vous êtes autorisé à effectuer un heap dump de votre application Java en cours d'exécution, faites-le et analysez-le avec un analyseur de mémoire, par exemple avec MAT http://www.eclipse.org/mat/

Pour obtenir des vidages de tas, vous pouvez utiliser jmap . Identifiez le pid de votre processus java, par exemple avec

ps aux |grep java

et ensuite

jmap -dump:format=b,file=heap_dump.hprof <pid>

Ouvrir le fichier heap_dump.hprof avec MAT.

Memory Analyzer fournit un arbre de dominance du graphe d'objets, de sorte que vous pouvez sélectionner les objets de cache ehcache en tant que racines et voir les objets de cache enfant en détail.

0voto

JHarnach Points 1252

EhCache fournit net.sf.ehcache.management.sampled.Sampled Cache pour cela. Enregistrez-le auprès de JMX. Il expose, entre autres, le tas en octets utilisé par un cache enregistré.

La création d'un cache est assez facile, il suffit d'envelopper un cache existant :

SampledCache sampledCache = new SampledCache(cache);

La quantité de données qu'il expose est très utile : API

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X