Aumenta HeapSize in Tomcat per tutte le mie applicazioni

Sto usando un tomcat: 8 nel docker interno. Sono alcune impostazioni importnti (predefinite).

$ java -XX:+PrintFlagsFinal -version | grep -iE 'HeapSize|PermSize|ThreadStackSize' Picked up JAVA_TOOL_OPTIONS: -Duser.home=/home/jboss -Duser.name=jboss intx CompilerThreadStackSize = 0 {pd product} uintx ErgoHeapSizeLimit = 0 {product} uintx HeapSizePerGCThread = 87241520 {product} uintx InitialHeapSize := 33554432 {product} uintx LargePageHeapSizeThreshold = 134217728 {product} uintx MaxHeapSize := 524288000 {product} intx ThreadStackSize = 1024 {pd product} intx VMThreadStackSize = 1024 {pd product} 

Ora ho bisogno di aumentare il max heapsize perché ho alcuni problemi con problemi di outofmemory . (Le applicazioni sono abbastanza pesanti).

Prima che esca dalla memory, mi sta avvertendo che il max heapsize è quasi raggiunto e che il tomcat andrà fuori di memory. Pochi minuti dopo si schiantasse.

All'interno del mio tomcat sono un paio di. .war 's schierato. Le applicazioni sono in /deployments/xxx.war .

mi mostra

 app1_0.1 app1_0.1.war app2_0.1 app2_0.1.war ... 

Ora la mia domanda è la seguente. Devo aumentare il heapsize per each file war, seperatly o per l'integer tomcat nello stesso momento. Perché non trovo un command per controllare l'incisione su un'applicazione java, ma quando voglio aumentare il heapsize, sembro solo trovare un command come questo: java -Xms16m -Xmx64m ClassName (quindi su un'applicazione specifica).

Quando l'ho eseguito senza specificare un'applicazione:

 $ java -Xms16m -Xmx64m Picked up JAVA_TOOL_OPTIONS: -Duser.home=/home/jboss -Duser.name=jboss Usage: java [-options] class [args...] (to execute a class) or java [-options] -jar jarfile [args...] (to execute a jar file) where options include: -d32 use a 32-bit data model if available -d64 use a 64-bit data model if available -server to select the "server" VM The default VM is server, because you are running on a server-class machine. ... 

Date un'occhiata alla relativa domanda SE relativa alle soluzioni per gli errori di OutOfMemory

java.lang.OutOfMemoryError: spazio Java heap

MaxPermSize flag MaxPermSize è stato rimosso con JDK 1.8. È stato sostituito da Metaspace .

JDK8: Metaspace

In JDK 8, i metadati di classi sono ora memorizzati nel mucchio nativo e questo spazio è chiamato Metaspace . Ci sono alcune nuove bandiere aggiunte per Metaspace in JDK 8:

-XX:MetaspaceSize=<NNN> where è la quantità iniziale dello spazio (il valore iniziale dell'acqua alta) assegnato ai metadati di class (in byte) che potrebbero indurre una raccolta di rifiuti per scaricare classi.

-XX:MaxMetaspaceSize=<NNN> where è la quantità massima di spazio da assegnare per i metadati di class (in byte).

Date un'occhiata al blog oracle

Utilizza -d64 opzione -d64 nei parametri VM poiché si utilizza un sistema operativo a 64 bit.

I parametri VM che state impostando sono globale a istanza tomact.

Provate a aumentare anche la dimensione del perm: -XX: MaxPermSize = 256m

Questo aggiungerà 256 MB alla dimensione del tuo heap quando l'applicazione richiede.