Sto supportando un'applicazione di messaggistica Java che richiede bassa latenza (< 300 microsecondi che elaborano ciascun messaggio). Tuttavia, la nostra profilazione mostra che la Sun Java Virtual Machine funziona lentamente all'inizio e accelera dopo i primi 5.000 messaggi o giù di lì. I primi 5000 messaggi hanno una latenza di 1-4 millisecondi. Dopo circa i primi 5.000, i messaggi successivi hanno una latenza di ~ 250 microsecondi, con valori anomali occasionali.Tecnica o utilità per ridurre al minimo il tempo di "riscaldamento" di Java?
È generalmente inteso che questo è un comportamento tipico per un'applicazione Java. Tuttavia, da un punto di vista aziendale non è accettabile dire al cliente che devono aspettare che la JVM si "scaldi" prima di vedere le prestazioni che richiedono. L'applicazione deve essere "riscaldato-up" prima che il primo messaggio cliente viene elaborato
La JVM è Sun 1.6.0 aggiornamento 4.
Idee per superare questo problema:
- impostazioni JVM, come -XX: CompileThreshold =
- Aggiungi un componente per "riscaldare" l'applicazione all'avvio, ad esempio inviando "messaggi falsi" attraverso l'applicazione.
- Caricamento statico dell'applicazione e classi JDK all'avvio dell'applicazione, in modo che le classi non vengano caricate dai JAR durante l'elaborazione dei messaggi dei clienti.
- Alcuni programmi di utilità o Java che eseguono una o entrambe le due idee precedenti, in modo da non dover re-inventare la ruota.
NOTA: Ovviamente per questa soluzione sono presenti tutti i fattori, inclusi il chip arch, il tipo di disco e la configurazione e le impostazioni del sistema operativo. Tuttavia, per questa domanda voglio concentrarmi su cosa si può fare per ottimizzare l'applicazione Java e minimizzare il tempo di "riscaldamento".
Penso che dovresti esaminare la causa alla base di questo ritardo iniziale. Strumenti di profiling potrebbero aiutare. – Thomas
Invia 5000 falsi messaggi al server come parte della procedura di installazione e avvio. – Zed
5000 messaggi falsi (anche se fosse una buona idea) sembrano aggiungere 5 o 20 secondi al tempo di avvio dell'app. –