Ajout section gestion mémoire

This commit is contained in:
whirigoyen 2022-01-26 16:14:39 +01:00
parent fa5f6b6310
commit 2bbf078b2d

View file

@ -6,7 +6,7 @@ title: Howto Java
* Documentation JAVA : <https://docs.oracle.com/javase/> * Documentation JAVA : <https://docs.oracle.com/javase/>
* Documentation OpenJDK : <http://openjdk.java.net/> * Documentation OpenJDK : <http://openjdk.java.net/>
## Installation # Installation
Sous Debian 7 et 8, c'est la version 7 d'OpenJDK que l'on installe : Sous Debian 7 et 8, c'est la version 7 d'OpenJDK que l'on installe :
@ -20,7 +20,8 @@ Sous Debian 9, on installe la version 8 :
# apt install openjdk-8-jre-headless # apt install openjdk-8-jre-headless
~~~ ~~~
### OpenJDK 8 sous Debian 8
## OpenJDK 8 sous Debian 8
On peut vouloir installer OpenJDK 8 sous Debian Jessie, on utilisera alors les backports : On peut vouloir installer OpenJDK 8 sous Debian Jessie, on utilisera alors les backports :
@ -49,7 +50,8 @@ Pin-Priority: 900
# update-alternatives --set java /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java # update-alternatives --set java /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
~~~ ~~~
### Oracle Java 8 sous Debian 7 / 8 et 9
## Oracle Java 8 sous Debian 7 / 8 et 9
Le plus simple est de créer un package automatiquement en utilisant le tar.gz du site oracle. Le plus simple est de créer un package automatiquement en utilisant le tar.gz du site oracle.
@ -95,9 +97,10 @@ $ TMPDIR=/home/utilisateur/ make-jpkg jre-8u144-linux-x64.tar.gz
# dpkg -i oracle-java8-jdk_8u51_amd64.deb # dpkg -i oracle-java8-jdk_8u51_amd64.deb
~~~ ~~~
## Sécurité
### Importer un certificat racine # Sécurité
## Importer un certificat racine
Java stocke ces certificats dans un fichier, situé dans _/etc/ssl/certs/java/cacerts_ (sous Debian). Java stocke ces certificats dans un fichier, situé dans _/etc/ssl/certs/java/cacerts_ (sous Debian).
@ -129,7 +132,8 @@ Pour supprimer un certificat (parce qu'il est expiré par exemple) :
$ keytool -delete -keystore /etc/ssl/certs/java/cacerts -alias <mykey> $ keytool -delete -keystore /etc/ssl/certs/java/cacerts -alias <mykey>
~~~ ~~~
### Java Cryptography Extension (JCE)
## Java Cryptography Extension (JCE)
<http://gcolpart.evolix.net/blog21/jce-non-limitees-sous-debian/> <http://gcolpart.evolix.net/blog21/jce-non-limitees-sous-debian/>
@ -187,3 +191,26 @@ security.provider.7=org.jcp.xml.dsig.internal.dom.XMLDSigRI
security.provider.8=sun.security.smartcardio.SunPCSC security.provider.8=sun.security.smartcardio.SunPCSC
security.provider.9=sun.security.provider.Sun security.provider.9=sun.security.provider.Sun
~~~ ~~~
# Gestion de la mémoire
Le « tas » (heap), est l'emplacement mémoire où la machine virtuelle Java stocke les objets des applications.
Ce sont les options `-Xms` et `-Xmx` de la Machine Virtuelle Java (JVM) qui permettent de définir la taille du tas. Oracle recommande que les deux valeurs soient égales, afin de réduire le travail du ramasse-miettes ([source](https://docs.oracle.com/cd/E21764_01/web.1111/e13814/jvm_tuning.htm#PERFM161)).
Par exemple :
~~~
# java -Xms 512m -Xmx 512m
# java -Xms 1g -Xmx 1g
~~~
**Il est important de préciser ces options.** Sinon, la valeur par défaut est définie à 25% de la mémoire disponible, ou 50% s'il reste moins de 2 Go disponibles ([source](https://blog.openj9.org/2020/04/30/default-java-maximum-heap-size-is-changed-for-java-8/)).
Si la taille du tas n'est pas suffisante pour allouer un nouvel objet, la JVM lance alors l'exception `OutOfMemoryError`. Si les applications Java consomment toute la mémoire d'un serveur, c'est qu'il est sous-dimensionné par rapport au besoin.
Applications courantes :
* ElasticSearch : dans `/etc/elasticsearch/jvm.options`, un paramètre par ligne, `-Xms 1g` et `-Xmx 1g`.
* Tomcat : [HowtoTomcat#installation-et-configuration-dune-instance](), options `-Xms 1g -Xmx 1g` dans la variable `JAVA_OPTS`.