Come è l'impostazione di memoria JVM 6 per JBOSS AS 5?
Domanda
Sto usando un'applicazione ICEFaces che funziona su JBOSS, il mio heapsize attualmente è impostato su
-Xms1024m –Xmx1024m -XX: MaxPermSize = 256m
qual è il tuo consiglio per regolare i parametri di memoria per JBOSS AS 5 (5.0.1 GA) JVM 6?
Soluzione
Secondo questo articolo :
AS 5 è noto per essere avido quando si tratta di PermGen . All'avvio, genera spesso
OutOfMemoryException: errore PermGen
.
Questo può essere particolarmente fastidioso durante lo sviluppo quando si esegue la distribuzione a caldo di frequente un'applicazione. In questo caso, JBoss QA consiglia di aumentare la dimensione del permgen, consentire lo scarico delle classi e lo sweep del permgen :
-XX:PermSize=512m -XX:MaxPermSize=1024 -XX:+UseConcMarkSweepGC -XX:+CMSPermGenSweepingEnabled -XX:+CMSClassUnloadingEnabled
Ma questo è più FYI, non sto suggerendo di applicare questa configurazione alla cieca (come la gente ha scritto nei commenti, "se non è rotta, non aggiustarla").
Per quanto riguarda le dimensioni dell'heap, tieni sempre presente: più grande è l'heap, più lungo è il GC principale . Ora, quando dici "era decisamente troppo piccolo", non so davvero cosa significhi (quali errori, sintomi, ecc.). Per quanto ne sappia, un heap di 1024 m è in realtà piuttosto grande per una webapp e dovrebbe essere davvero più che sufficiente per la maggior parte di essi. Fai attenzione alla durata principale del GC.
Altri suggerimenti
Heap: inizia con 512 MB, imposta il limite su dove ritieni che la tua app non dovrebbe mai arrivare e non far iniziare lo scambio del tuo server.
Permgen: di solito è abbastanza stabile, una volta che l'app legge tutte le classi utilizzate nell'app. Se hai testato l'app e funziona con 256 MB, lasciala così.
@wds: non è sicuramente una buona idea impostare il massimo heap il più alto possibile per due motivi:
- I grandi cumuli richiedono più tempo per il GC completo. Se hai abilitato la scansione PermGen, anche un grande spazio PermGen impiegherà più tempo a GC.
- JBoss AS su Linux può lasciare le maniglie di I / O inutilizzate aperte abbastanza a lungo da consentire a Linux di pulirle forzatamente, bloccando tutti i processi sulla macchina fino al completamento (potrebbe richiedere più di 1 minuto!). Se si dimentica di disattivare lo scanner hot deploy, ciò accadrà molto più frequentemente.
Ciò accadrebbe forse una volta alla settimana nella mia domanda fino a quando:
- ridotto -Xms a un punto in cui l'avvio di JBoss AS stava iniziando a rallentare
- ridotto -Xmx a un punto in cui i GC completi si sono verificati più frequentemente, quindi la gestione degli I / O di Linux è stata interrotta
Per gli sviluppatori penso che sia giusto aumentare PermGen, ma in produzione probabilmente si desidera utilizzare solo ciò che è necessario per evitare lunghe pause GC.