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 OpenJDK : <http://openjdk.java.net/>
## Installation
# Installation
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
~~~
### OpenJDK 8 sous Debian 8
## OpenJDK 8 sous Debian 8
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
~~~
### 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.
@ -95,9 +97,10 @@ $ TMPDIR=/home/utilisateur/ make-jpkg jre-8u144-linux-x64.tar.gz
# 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).
@ -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>
~~~
### Java Cryptography Extension (JCE)
## Java Cryptography Extension (JCE)
<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.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`.