web-dev-qa-db-fra.com

Comment définir la taille de segment minimale et maximale de Java à l'aide de variables d'environnement?

Comment définir la taille de segment minimale et maximale de Java à l'aide de variables d'environnement?

Je sais que les tailles de tas peuvent être définies lors du lancement de Java, mais j'aimerais que cela soit ajusté à l'aide de variables d'environnement sur mon serveur.

66
Jeff Thompson

Vous ne pouvez pas le faire en utilisant directement des variables d'environnement. Vous devez utiliser l'ensemble d'options "non standard" transmises à la commande Java. Exécutez: Java -X pour plus de détails. Les options que vous ' re-cherche sont -Xmx et -Xms (c’est la taille "initiale" du tas, donc probablement ce que vous cherchez.)

Certains produits tels que Ant ou Tomcat peuvent être livrés avec un script de traitement par lots qui recherche la variable d’environnement Java_OPTS, mais ne faisant pas partie du moteur d’exécution Java. Si vous utilisez l’un de ces produits, capable de définir la variable comme:

set Java_OPTS="-Xms128m -Xmx256m"  

Vous pouvez également prendre cette approche avec votre propre ligne de commande comme:

set Java_OPTS="-Xms128m -Xmx256m"  
Java ${Java_OPTS} MyClass
72
Todd

Si vous voulez que n'importe quel processus Java, pas seulement ant ou Tomcat, récupère des options comme -Xmx utilise la variable d'environnement _Java_OPTIONS.

En bash: export _Java_OPTIONS="-Xmx1g"

50
wmli

En réalité, il existe un moyen de définir des valeurs globales par défaut pour la machine virtuelle Java de Sun via des variables d'environnement.

Voir Comment définir une propriété système Java afin qu'elle soit effective à chaque démarrage de la machine virtuelle Java sans l'ajouter aux arguments de ligne de commande .

14
Vadzim

Vous ne pouvez pas le faire en utilisant des variables d'environnement. Cela se fait via des options "non standard". Courir: Java -X pour plus de détails. Les options que vous recherchez sont -Xmx et -Xms _ (c'est la taille "initiale" du tas, donc probablement ce que vous cherchez.)

10
a2800276

Je pense que votre seule option est d’envelopper Java dans un script qui substitue les variables d’environnement à la ligne de commande

4
frankodwyer

Quelques notes:

  1. Apache ant ne connaît rien de Java_OPTS, contrairement aux scripts de démarrage de Tomcat. Pour Apache ant, utilisez ANT_OPTS pour affecter l'environnement de la machine virtuelle Java exécutant/ant /, mais pas pour les éléments pouvant être lancés par ant.

  2. La taille de segment de mémoire maximale que vous pouvez définir dépend entièrement de l'environnement: pour la plupart des systèmes 32 bits, la quantité maximale d'espace de segment de mémoire que vous pouvez demander, quelle que soit la mémoire disponible, est comprise dans la plage de 2 Go. Le plus gros tas sur un système 64 bits est "vraiment gros". En outre, vous êtes également pratiquement limité par la mémoire physique, car le segment de mémoire est géré par la machine virtuelle Java et vous ne souhaitez pas beaucoup de permutation sur le disque.

  3. Pour les environnements de serveur, vous voulez généralement définir -Xms et -Xmx sur la même valeur: cela fixera la taille du segment de mémoire à une certaine taille et le récupérateur de mémoire aura moins de travail à faire, car le segment de mémoire ne devra jamais être restauré. taille.

3
Christopher Schultz