Maison > Questions et réponses > le corps du texte
我以前跑tomcat的JVM一般都设2G的内存,但是最近我看了一下Solr的服务器,JVM给了6G,通过-Xms6000M -Xmx6000M设置的。而且有人建议只要服务器有内存,JVM的内存还可以再给。
64位的JVM的内存是不是可以随便设?内存有多少一般怎么确定,有什么利弊?
ringa_lee2017-04-18 09:55:19
Analyse de la mémoire maximale des différentes versions de JVM de plusieurs entreprises populaires, et les résultats sont les suivants :
Mémoire maximale de la version JVM de l'entreprise (mégaoctets) mémoire maximale du client (mégaoctets) du serveur
SUN 1.5. x 1492 1520
SUN 1.5.5(Linux) 2634 2660
SUN 1.4.2 1564 1564
SUN 1.4.2(Linux) 1900 1260
IBM 1.4.2(Linux) 2047 N/A
BEA JRockit 1.5 (U3) 1909 1902
Sauf indication contraire, toutes les versions de JVM fonctionnent sous le système d'exploitation Windows
Ce que je souhaite illustrer à travers ce tableau, c'est que si votre machine a trop de mémoire, seul Vous peut augmenter l'utilisation de la machine en exécutant plusieurs instances supplémentaires. Par exemple, si vous exécutez Tomcat, vous pouvez installer plusieurs Tomcats supplémentaires et créer un cluster, et ainsi de suite.
Mémoire tas et non tas Selon la déclaration officielle : "La machine virtuelle Java a un tas. Le tas est la zone de données d'exécution, et la mémoire de toutes les instances de classe et des tableaux est allouée à partir d'ici. Le tas est créé lorsque la machine virtuelle Java démarre. "La mémoire en dehors du tas dans la JVM est appelée mémoire non tas." On constate que la JVM gère principalement deux types de mémoire : tas et non tas. En termes simples, le tas est la mémoire accessible au code Java et est réservée aux développeurs ; le non-heap est la mémoire réservée à la JVM pour son propre usage, donc la mémoire requise pour la zone de méthode et le traitement ou l'optimisation interne de la JVM (comme cache de code compilé JIT), chaque structure de classe (telle que le pool de constantes d'exécution, les données de champ et de méthode) et le code des méthodes et des constructeurs sont tous dans la mémoire hors tas. Allocation de mémoire de tas La mémoire initiale allouée par la JVM est spécifiée par -Xms et la valeur par défaut est 1/64 de la mémoire physique ; la mémoire maximale allouée par la JVM est spécifiée par -Xmx et la valeur par défaut est 1/4 de la mémoire physique ; mémoire physique. Par défaut, lorsque la mémoire du tas libre est inférieure à 40 %, la JVM augmentera le tas jusqu'à la limite maximale de -Xmx ; lorsque la mémoire du tas libre est supérieure à 70 %, la JVM réduira le tas jusqu'à la limite minimale de -Xms. Par conséquent, le serveur définit généralement -Xms et -Xmx comme étant égaux pour éviter d'ajuster la taille du tas après chaque GC. Allocation de mémoire non tas JVM utilise -XX:PermSize pour définir la valeur initiale de la mémoire non tas, la valeur par défaut est 1/64 de la mémoire physique XX:MaxPermSize définit la taille maximale de la mémoire non tas, la valeur par défaut est ; 1/4 de la mémoire physique. Limite de mémoire JVM (valeur maximale) Tout d'abord, la mémoire JVM est limitée à la mémoire physique maximale réelle (absurdité ! Haha). En supposant que la mémoire physique soit infinie, la valeur maximale de la mémoire JVM a beaucoup à voir avec le système d'exploitation. . Pour faire simple, bien que l'espace mémoire contrôlable d'un processeur 32 bits soit de 4 Go, le système d'exploitation spécifique fixera une limite. Cette limite est généralement de 2 Go à 3 Go (en général, elle est de 1,5G-2G sous les systèmes Windows et de 1,5). G-2G sous les systèmes Linux). 2G-3G), et il n'y aura aucune restriction sur les processeurs supérieurs à 64 bits.
Donc, les principales raisons pour lesquelles le programme ne peut pas être démarré en raison de la définition des paramètres de la VM sont les suivantes :
1) La valeur de -Xms dans le paramètre est supérieure à -Xmx, ou la valeur de -XX:PermSize est supérieur à -XX:MaxPermSize ; 2) - La somme des valeurs de Xmx et -XX:MaxPermSize dépasse la limite maximale de la mémoire JVM, telle que la limite maximale de mémoire du système d'exploitation actuel, ou la mémoire physique réelle, etc.
大家讲道理2017-04-18 09:55:19
1. Cela dépend de la situation de chaque application, comme le volume moyen des requêtes quotidiennes, la taille moyenne de la mémoire après fullgc, etc.
2. Il est recommandé que le maximum ne dépasse pas les 3/4 du. mémoire du système d'exploitation