Durante la creazione di profili di un'applicazione Java a 64 bit che presenta alcuni problemi, noto che lo stesso profiler (YourKit) utilizza quantità di memoria veramente colossali. Quello che ho nello script di lancio YourKit è:Stima della dimensione heap massima JVM sicura in Java a 64 bit
JAVA_HEAP_LIMIT="-Xmx3072m -XX:PermSize=256m -XX:MaxPermSize=768m"
Ingenuamente, assumendo un certo overhead, questo mi portano a immaginare che YourKit sta per utilizzare un massimo di qualcosa forse un po 'più di quattro GB. Tuttavia, ciò che ho fatto vedere in PS è:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
dmoles 31379 4.4 68.2 14440032 8321396 ? Sl 11:47 10:42 java -Xmx3072m -XX:PermSize=256m -XX:MaxPermSize=768m -XX:+HeapDumpOnOutOfMemoryError -Dyjp.probe.table.length.limit=20000 -Xbootclasspath/a:/home/dmoles/Applications/yjp-9.5.6/bin/../lib/tools.jar -jar /home/dmoles/Applications/yjp-9.5.6/bin/../lib/yjp.jar
Questa è una dimensione virtuale di quasi il 14 GB e una dimensione residente di quasi l'8 GB - quasi 3 volte il heap Java.
Ora, ho abbastanza memoria sul mio box di sviluppo per eseguire questo, ma tornando al problema di memoria originale che sto cercando di diagnosticare: come faccio a sapere quanto mucchio di Java devo giocare?
Chiaramente, se il cliente ha, ad esempio, 16 GB di RAM fisica, non è una buona idea per me dire loro di impostare -Xmx
su 16 GB.
Quindi cosa è un numero ragionevole? 12 GB? 8 GB?
E come posso stimarlo?
+1 per dire che è una buona idea stimare quanto heap l'applicazione richiede e passare da lì. La domanda "come faccio a stimarla" mi ricorda il post di Eric Lippert su [la tragedia della felicità del filo] (http://blogs.msdn.com/b/ericlippert/archive/2004/02/15/the-tragedy- di-thread-felicità-disease.aspx). –
@AdamMihalcin Ouch. :) –
@AdamMihalcin È un buon consiglio, ma ci sono due lati della medaglia.Heads (stimando quanto l'applicazione ha bisogno) è "ecco quanti utenti ci aspettiamo, quanto server dovremmo comprare?" Tails è, "ecco quanti server abbiamo, quanti utenti dovremmo aspettarci di essere in grado di gestire prima che finisca la memoria?" –