SlideShare une entreprise Scribd logo
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




                                                       1
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
                                             2
Speakers
• Olivier Lamy, Architecte@Talend, Apache
  Member & Direct Memory Committer
  – @olamy
• Benoit Perroud, Software
  Engineer@Verisign & Apache Direct
  Memory Committer
  – @killerwhile



                                            3
Avant de commencer

• Désolés d'avance pour le fran-glais que
  nous allons parler




                                            4
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
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
La Mémoire Java

• Allocation automatique de la mémoire




                                         7
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




                                          8
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




                                             9
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




                                               10
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




                                          11
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

                                                  12
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 ;)



                                               13
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




                                                           14
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


                                                       15
Questions ?


Merci pour votre attention !




                               16

Contenu connexe

PDF
SPIP et la gestion de la performance
PDF
What's Next Replay - AMQP
PPTX
Serveurs core et virtualisation
PDF
Optimiser WordPress
PDF
Optimiser wordpress
PPTX
WebSocket avec Java EE 7
PDF
Ops@viadeo : Puppet & Co... 6 mois après par Xavier Krantz
PPTX
Java virtual machine : Notions de base
SPIP et la gestion de la performance
What's Next Replay - AMQP
Serveurs core et virtualisation
Optimiser WordPress
Optimiser wordpress
WebSocket avec Java EE 7
Ops@viadeo : Puppet & Co... 6 mois après par Xavier Krantz
Java virtual machine : Notions de base

Tendances (20)

PPTX
Programmation réactive avec Spring 5 et Reactor
ODP
Nginx - Serveur HTTP haute performances
PDF
Nouveautés Veeam 2014 - Protection avancée pour le Datacenter moderne
PPT
Memcached, une solution de cache par excellence
ODP
Optimisation LAMP
PDF
PDF
Memcached: Comprendre pour mieux utiliser
PPTX
Veeam presentation v7
PPTX
Amélioration des performances eCommerce - Webinaire par aYaline
ODP
#9 Deploiement Complexe
PPTX
Veeam - Les meilleurs outils de gestion d'infrastructure VMware
PDF
Un site web rapide ?
PPTX
FinistJUG - Apache TomEE
PDF
Php dans le cloud
PDF
MongoDB day Paris 2012
PPTX
Guss webcasts Tempdb Internals - june 2013
KEY
Chef - Paris BlockCamp - Nov 09
PDF
Le flash, est-ce pour moi ?
PDF
OpenMQ François Ostyn
PPTX
Techdays 2014 - Le fermier azure (2ème partie)
Programmation réactive avec Spring 5 et Reactor
Nginx - Serveur HTTP haute performances
Nouveautés Veeam 2014 - Protection avancée pour le Datacenter moderne
Memcached, une solution de cache par excellence
Optimisation LAMP
Memcached: Comprendre pour mieux utiliser
Veeam presentation v7
Amélioration des performances eCommerce - Webinaire par aYaline
#9 Deploiement Complexe
Veeam - Les meilleurs outils de gestion d'infrastructure VMware
Un site web rapide ?
FinistJUG - Apache TomEE
Php dans le cloud
MongoDB day Paris 2012
Guss webcasts Tempdb Internals - june 2013
Chef - Paris BlockCamp - Nov 09
Le flash, est-ce pour moi ?
OpenMQ François Ostyn
Techdays 2014 - Le fermier azure (2ème partie)
Publicité

En vedette (20)

PDF
Understanding Garbage Collection
PDF
Chomage Partiel 0907
PPTX
Enseñanza del número y sus operaciones.
PDF
Gazette Du 13 Octobre Au 19 Novembre 2009
DOCX
PPTX
Bloque 2
PPT
Masa atómica, 1º, 3er. per. 2014
PDF
Blogs conceptos básicos
PDF
Tutorial de slideshare
PPTX
virus chikungunya
PDF
Decreto 1002 del 21 de mayo de 2013
PPTX
Etapas
PPTX
Fundamento del computador n.3
PDF
Wsiteam businesscase-llc-et-associes
PPTX
Side 2014
PDF
Navegadores de internet
PPTX
A la conquête de la Suisse alémanique
ODP
Taxi driver
PDF
Notification obligatoire du VIH/sida et activité de dépistage du VIH
Understanding Garbage Collection
Chomage Partiel 0907
Enseñanza del número y sus operaciones.
Gazette Du 13 Octobre Au 19 Novembre 2009
Bloque 2
Masa atómica, 1º, 3er. per. 2014
Blogs conceptos básicos
Tutorial de slideshare
virus chikungunya
Decreto 1002 del 21 de mayo de 2013
Etapas
Fundamento del computador n.3
Wsiteam businesscase-llc-et-associes
Side 2014
Navegadores de internet
A la conquête de la Suisse alémanique
Taxi driver
Notification obligatoire du VIH/sida et activité de dépistage du VIH
Publicité

Similaire à Direct memory @ devoxxfr (20)

PDF
Caching reboot: javax.cache & Ehcache 3
PDF
Meetup Drupal Lyon mars 2013 - Optimiser les performances Drupal par le cache
PPTX
Formation Google App Engine
PPTX
Perfug BOF devoxx2017.pptx
PPT
Share point 2013 distributed cache
PPTX
Plongée au cœur du Framework .NET 4.5
PPTX
La mise en cache et ses secrets
PDF
Alphorm.com Formation Microsoft Hyperconvergence
PDF
Cours SE - Gestion de la mémoire- Cours IG IPSET.pdf
PDF
Perf ug comment ne plus rajouter de ram a vos jvm sans savoir pourquoi
PDF
Présentation de Apache Zookeeper
ODP
Utiliser pleinement le navigateur et les nouveaux clients web - AFUP 2007
PDF
Ch memoires
PDF
Programmation concurrente en Java
ODP
Rex docker en production meeutp-docker-nantes
PDF
MHA : MySQL haute dispo, chez Viadeo par Olivier Dasini
PPTX
Run java vs ruby
PPTX
Au cœur du Framework .NET 4.5.1
PPTX
Présentation1
PDF
Zimbra Forum France 2016 - Beezim and Ceph
Caching reboot: javax.cache & Ehcache 3
Meetup Drupal Lyon mars 2013 - Optimiser les performances Drupal par le cache
Formation Google App Engine
Perfug BOF devoxx2017.pptx
Share point 2013 distributed cache
Plongée au cœur du Framework .NET 4.5
La mise en cache et ses secrets
Alphorm.com Formation Microsoft Hyperconvergence
Cours SE - Gestion de la mémoire- Cours IG IPSET.pdf
Perf ug comment ne plus rajouter de ram a vos jvm sans savoir pourquoi
Présentation de Apache Zookeeper
Utiliser pleinement le navigateur et les nouveaux clients web - AFUP 2007
Ch memoires
Programmation concurrente en Java
Rex docker en production meeutp-docker-nantes
MHA : MySQL haute dispo, chez Viadeo par Olivier Dasini
Run java vs ruby
Au cœur du Framework .NET 4.5.1
Présentation1
Zimbra Forum France 2016 - Beezim and Ceph

Plus de Olivier Lamy (6)

ODP
Apache sirona
ODP
Maven university-course
ODP
The Apache Way olamy
ODP
Heapoff memory wtf
ODP
Juc paris olivier lamy talk
PDF
Tomcat Maven Plugin
Apache sirona
Maven university-course
The Apache Way olamy
Heapoff memory wtf
Juc paris olivier lamy talk
Tomcat Maven Plugin

Direct memory @ devoxxfr

  • 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 1
  • 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 2
  • 3. Speakers • Olivier Lamy, Architecte@Talend, Apache Member & Direct Memory Committer – @olamy • Benoit Perroud, Software Engineer@Verisign & Apache Direct Memory Committer – @killerwhile 3
  • 4. Avant de commencer • Désolés d'avance pour le fran-glais que nous allons parler 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
  • 7. La Mémoire Java • Allocation automatique de la mémoire 7
  • 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 8
  • 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 9
  • 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 10
  • 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 11
  • 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 12
  • 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 ;) 13
  • 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 14
  • 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 15
  • 16. Questions ? Merci pour votre attention ! 16