Quindi ogni due giorni il mio processo java su Ubuntu viene ucciso automaticamente, e non riesco a capire perché.Qualcosa continua a uccidere il mio processo Java su Ubuntu, qualcuno sa perché?
La mia scatola ha 35,84 GB di RAM, quando lancio il mio processo Java ho passato il parametro -Xmx28g, quindi dovrebbe usare meno della massima RAM disponibile.
ho corse jstat come segue:
# jstat -gccause -t `pgrep java` 60000
Le ultime righe di uscita da jstat immediatamente prima che il processo è stato ucciso sono stati:
Time S0 S1 E O P YGC YGCT FGC FGCT GCT LGCC GCC
14236.1 99.98 0.00 69.80 99.40 49.88 1011 232.305 11 171.041 403.347 unknown GCCause No GC
14296.2 93.02 0.00 65.79 99.43 49.88 1015 233.000 11 171.041 404.041 unknown GCCause No GC
14356.1 79.20 0.00 80.50 99.55 49.88 1019 233.945 11 171.041 404.986 unknown GCCause No GC
14416.2 0.00 99.98 24.32 99.64 49.88 1024 234.945 11 171.041 405.987 unknown GCCause No GC
Questo sembra essere quello che è andato giù in/var/log/syslog in questo periodo: https://gist.github.com/1369135
Non c'è davvero niente in esecuzione su questo server oltre alla mia app java. Cosa sta succedendo?
modifica: sto eseguendo java versione 1.6.0_20, gli unici parametri notevoli che sto passando a java all'avvio sono "-server -Xmx28g". Non sto utilizzando un server delle applicazioni, ma la mia app incorpora il "framework web semplice".
La RAM fisica massima non equivale a quanto può utilizzare un processo. Eric Lippert ha avuto un ottimo post su questo. So che il post è centrato su Windows/.NET, ma è anche interessante. Solo per curiosità, puoi tentare di catturare un OutOfMemoryError e registrarlo per confermare/negare che questa sia la causa? –
Sto registrando stdout e stderr, che credo sia dove andrebbe una OOM, e non vedo nulla che indichi un'eccezione di OOM ... Nella mia esperienza un OOM ha come risultato che l'app ha smesso di funzionare, non essendo stata uccisa. In questo caso, sembra che l'app sia stata uccisa dal sistema operativo. – sanity