In Java 8 Update 45, l'aggiunta di queste opzioni alla chiamata java
:Che cosa causa lunghi tempi di rotazione e sincronizzazione in Java?
-XX:+PrintGCApplicationStoppedTime
-XX:+PrintSafepointStatistics
-XX:PrintSafepointStatisticsCount=1
mi mostra le statistiche come questi:
vmop [threads: total initially_running wait_to_block] [time: spin block sync cleanup vmop] page_trap_count
3679.229: no vm operation [ 72 1 2 ] [ 6016 0 6016 0 0 ] 1
2015-05-22T11:25:27.519+0200: Total time for which application threads were stopped: 6.0168551 seconds, Stopping threads took: 6.0164099 seconds
Il problema qui è il tempo lungo per Stopping threads
. In questo esempio, è 6 secondi che è già un problema per la nostra applicazione, ma ho visto anche tempi più grandi, in un'istanza (senza registrazione completa, però) pari a quasi un minuto.
L'operazione di VM (qui: no vm operation
) è variabile. Ho anche visto, ad es. RevokeBias
, G1IncCollectionPause
o GCG_Operation
. Inoltre, lo page_trap_count
sembra irrilevante. Ho visto esempi in cui era 0, e altri in cui era 2. Coerente, tuttavia, è che l'ora si riflette sempre nei valori di spin
e sync
.
Sto cercando una spiegazione approfondita di quei valori di temporizzazione spin
e sync
, ma soprattutto sono interessato al motivo per cui ciò sta accadendo e cosa posso fare contro di esso. Non sono a conoscenza di nulla di "cattivo" nella nostra configurazione. Ci sono un sacco di core annoiati e memoria inutilizzata sulla macchina, stiamo eseguendo Java puro (senza JNI), e non siamo a conoscenza di alcuna eccessiva sincronizzazione nel nostro codice.
Puoi fornire maggiori dettagli del tuo caso d'uso specifico, in modo che le persone possano sapere come aiutarti. –
In realtà, vedo questo non solo con una delle nostre applicazioni, ma la vedo su tutta la linea. Quindi non c'è davvero un caso d'uso specifico. Se sapessi cosa cercare, potrei andare a caccia di somiglianze. Ho il sospetto, tuttavia, che molte persone abbiano lo stesso problema ma non l'abbiano ancora notato. La registrazione 'Stopping thread took:' che mi ha indicato è piuttosto nuova. – malamut