Upgrade to Pro — share decks privately, control downloads, hide ads and more …

DirectMemory_3_Devoxx_FR_2012-2.04.18.pdf

Avatar for Olivier Lamy Olivier Lamy
April 27, 2012
47

 DirectMemory_3_Devoxx_FR_2012-2.04.18.pdf

Avatar for Olivier Lamy

Olivier Lamy

April 27, 2012
Tweet

Transcript

  1. 1 Réduire la pression sur l'allocation mémoire Le prochain pas

    dans l'optimisation des performances de la JVM by Olivier Lamy et Benoit Perroud
  2. 2 Abstract •Cache Hors Tas (off-heap) – Rappel sur la

    mémoire Java – Différences de Cache (on-heap vs. off- heap) •Apache Direct Memory – Principes et Architecture – Cas d'utilisation de la vie réelle – Prochaines étapes •Questions
  3. 3 Speakers •Olivier Lamy, Architecte@Talend, Apache Member & Direct Memory

    Committer – @olamy •Benoit Perroud, Software Engineer@Verisign & Apache Direct Memory Committer – @killerwhile
  4. 5 Apache Direct Memory Apache Direct Memory is a multi

    layered cache implementation featuring off-heap memory storage to enable caching of java objects without degrading jvm performance. Le but recherché par le projet est de décharger la JVM de la mémoire consommée par les objets mis en cache afin de réduire le temps d'exécution du GC.
  5. 6 Apache Direct Memory • Projet dans l'incubateur de l'Apache

    Software Foundation • Arrivé dans l'incubateur en automne 2011 • 12 développeurs, 10+ contributeurs • En développement actif – Sujet à changement et à bugs
  6. 8 La Mémoire Java (2) •Ramasse-miette (GC) – Le GC

    gèle complètement l'exécution du processus pour s'exécuter – Rend l'exécution du programme non déterministe
  7. 9 Cache Mémoire •Cache dans la mémoire Java (on-heap) –

    Pas de pénalité d'utilisation – Mais occupe de la mémoire Java la rendant indisponible au fonctionnement de l'application TODO : Image avec RAM
  8. 10 Cache Mémoire (2) •Cache hors de la mémoire Java

    (off-heap) – Pénalité de sérialisation • Protobuf, Avro, Thrift, MsgPack, ... – Réduit la taille de la mémoire gérée par la JVM
  9. 11 Design et Architecture • ByteBuffer.allocateDirect • ByteBuffers sont alloués

    en masse, et découpés à la demande • Développé en couche – Pour une meilleure séparation des responsabilités
  10. 12 Stratégies d'Allocation • Fusion de ByteBuffers – Pas de

    perte de mémoire, mais fragmentation – A utiliser si ratio lecture / écriture haut • Taille fixe des ByteBuffers – Perte de mémoire, mais pas de fragmentation (*) – A utiliser si objets de taille similaire
  11. 13 Cache Multi-Niveaux • Idée : une très petite portion

    d'objets en cache en mémoire Java (on-heap), le reste hors de la mémoire Java (off-heap) – Mmmh, ça ressemble à Terracotta BigMemory tout ça – Apache Direct Memory peut être injecté dans Ehcache. Ouuups ;)
  12. 14 Server de Cache > PUT /dm/cache/bordeaux HTTP/1.1 > Content-Type:text/plain

    {"millesime":"bordeaux","description":"so good so good"} < HTTP/1.1 200 OK < X-DirectMemory-SerializeSize: 58 < Content-Length: 0 > GET /dm/cache/bordeaux HTTP/1.1 > Accept:text/plain < HTTP/1.1 200 OK < Content-Type: text/plain < Content-Length: 51 {"millesime":"2003","description":"so good so good"} > DELETE /dm/cache/foo HTTP/1.1
  13. 15 Prochaines étapes • JSR 107 • Benchmarks • Intégrations

    dans des composants (Cassandra, Lucene, Tomcat, ...) • Modification dynamique de la taille du cache • Fonctionnalités de Monitoring et Management • ... • https://issues.apache.org/jira/browse/DIRECTMEMORY