2010-03-28 12 views

risposta

31

Il vantaggio è che vi è una penalità di prestazioni quando si utilizza un numero sufficiente di heap da ridimensionare. Se lo si imposta inizialmente a 64 MB ma risulta che l'applicazione ha bisogno di 250 MB di carico, quando si preme vicino a 64 MB, la JVM allocherà più spazio sull'heap e possibilmente spostarsi attorno ad alcuni oggetti e fare altre attività di conservazione dei libri. Questo naturalmente richiede tempo.

Quando la tua applicazione è sotto carico, vuoi che tutte le risorse dedicate a farlo girare, quindi questo lavoro extra può rallentare la risposta dell'applicazione, o anche in alcuni casi può bloccarsi se esaurisce la memoria prima dell'heap è ridimensionato.

A volte quando si utilizza un'applicazione Java, verranno visualizzate istruzioni come "impostare Xms e Xmx sullo stesso valore". Questo è fatto per evitare il ridimensionamento del tutto, in modo che l'applicazione si avvii con il suo heap già grande come non lo sarà mai.

+0

Dalla vostra esperienza, si consiglia di impostare solo Xms sullo stesso valore di Xmx? – SyBer

+7

Dipende dall'applicazione. Se sei un istituto finanziario con un server dedicato per un'app o un set di app, è logico. Soprattutto perché un'app che si occupa di ordini di mercato può potenzialmente gestire 100 o 1000 di messaggi al secondo, con una latenza media di 2-25 ms. Un ridimensionamento potrebbe peggiorare del 5% la latenza, per tutti gli ordini inviati in quel momento. Potresti persino cancellare gli ordini. Come sempre, però, profilo prima di tentare di ottimizzare. – Phil

+0

Va notato che per i sistemi con un numero elevato di JVM attive -Xms aumenterà l'ingombro medio della JVM, mentre consentire alla JVM di autogestire la propria diffusione dell'heap consente di utilizzare schemi di raccolta dell'impronta di memoria. – Xailor

6

L'articolo collegato spiega abbastanza chiaro:

I valori di default: -Xms 3670k -Xmx 64m [...] Grandi applicazioni server sperimentano spesso due problemi con queste impostazioni predefinite. Uno è l'avvio lento, perché l'heap iniziale è piccolo e deve essere ridimensionato su molte raccolte importanti. Un altro problema di pressione è che la dimensione massima dell'heap è irragionevolmente piccola per la maggior parte delle applicazioni server. Le regole pratiche per applicazioni server sono:

  1. A meno che non si hanno problemi con pause, provare la concessione di tanta memoria possibile alla macchina virtuale. La dimensione predefinita (64 MB) è spesso troppo piccola .
  2. Impostazione -Xms e -Xmx al stesso valore aumenta prevedibilità rimuovendo la più importante decisione dimensionamento dalla macchina virtuale. Tuttavia, la macchina virtuale non è in grado di compensare se si effettua una scelta scadente.
  3. In generale, aumentare la memoria mentre si aumenta il numero di processori poiché l'allocazione può essere parallela a .

Si può anche essere interessati a this discussion del problema.

3

Se è normale che l'applicazione richieda più di 64 MB di memoria heap, l'impostazione di Xms su un valore superiore dovrebbe migliorare le prestazioni dell'applicazione in un certo senso, poiché la VM non dovrebbe richiedere ulteriore memoria quante volte.

In un sistema di produzione, considero l'impostazione di Xms e Xmx allo stesso valore ragionevole. In pratica si dice "questa è la quantità di memoria heap che la VM può ottenere e la dedico subito".

3

Qual è il vantaggio di impostare il parametro -Xms, e avere la memoria iniziale più grande per esempio, allora il valore di default calcolato uno

Se l'heap iniziale è piccolo e deve essere ridimensionato nel corso di molti importanti collezioni, l'avvio sarà lento.

Inoltre, è utile impostare sia la memoria iniziale che quella massima alla stessa dimensione?

L'impostazione -Xms e -Xmx con lo stesso valore garantisce la prevedibilità. Ciò è particolarmente importante quando si dimensiona la JVM durante la regolazione delle prestazioni. Ma la JVM non sarà in grado di compensare alcuna decisione sbagliata.

Tendo ad utilizzare gli stessi valori per i server di produzione (che sono ottimizzati durante il test delle prestazioni).

+0

Puoi fornire le tue opinioni su stackoverflow.com/questions/39652282/... e stackoverflow.com/questions/39652282/...? Grazie in anticipo – emilly

Problemi correlati