In primo luogo, solo un po 'di background:picchi di utilizzo della CPU in WebSphere 6.1
Uno dei nostri clienti sta vivendo picchi di utilizzo della CPU per le istanze di WebSphere in esecuzione una delle nostre applicazioni web (altri casi con altre applicazioni vanno bene) . Hanno un ambiente di test e un ambiente live (entrambi iSeries) che hanno entrambi riscontrato il problema - con una singola app per installazione di istanza. Abbiamo implementato questa applicazione localmente nei nostri ambienti di test e anche per molti altri clienti su iSeries senza problemi simili.
quello che succede:
ogni secondo o giù di lì, l'utilizzo della CPU per l'utilizzo della CPU processo WebSphere salta ovunque 7%
-20%
anche se non ci sono richieste in fase di elaborazione in quel momento. Il cliente ha segnalato picchi di picco fino a 30%
. Questi picchi sono mediamente pari a 1.5%
della CPU in generale - le altre istanze di WebSphere in genere utilizzano 0%
- 0.1%
quando inattivi.
mie indagini finora
Quindi, ho dato un'occhiata alle discussioni. Un thread all'interno dell'ambiente di test utilizzava i cicli di CPU ~350
al secondo. Un thread simile nel loro ambiente live utilizzava i cicli di CPU ~1500
al secondo (mostrando che ha una CPU più grande). Lo stack di chiamate per queste discussioni sembra
Type Program Statement Procedure
QLESPI QSYS 17 LE_Create_Thread2__FP12crtt >
QJVALIBJVM QSYS 7 startThread__FPv
J com/ibm/ws/util/Threa > run
J com/ibm/ws/util/Threa > run
J com/ibm/ws/util/Threa > getTask
J com/ibm/ws/util/Bound > poll
L'intero nome della classe dalla linea di fondo è com/ibm/ws/util/BoundedBuffer
. Ho chiesto al cliente di fare un dump JVM per me - l'unica ulteriori informazioni che ho ricevuto da questo era il nome del thread:
Thread: 00002F82 Deferrable Alarm : 11
Ora, per le mie domande:
- Chi di voi identificare il problema, dati questi sintomi? (Forse è una soluzione lunga!)
- Che cos'è
Deferrable Alarm
? Da JVM Dump, posso vedere 4 thread con questo nome. Gli altri tre sembrano stare bene. Effettuando il debug del mio WebSphere locale (su Windows) e aggiungendo i punti di interruzione nella classeBoundedBuffer
, vedo che loBoudedBuffer
sta eseguendo il polling e sta invocando periodicamente un listener. - Non ho accesso alla console di WebSphere per le macchine del cliente e non sono in possesso delle modifiche apportate. Posso chiedere loro di controllare la console per me però - cosa dovrei chiedere loro di guardare?
- Ho accesso telnet alle caselle cliente, c'è qualcos'altro che posso indagare qui? Guardando i file di profilo di WebSphere, ecc.? Quali file dovrei guardare?
- Poiché lo stack di chiamate e il dump JVM non fanno esplicitamente riferimento al nostro codice, è sicuro assumere che si tratta di un problema di configurazione?
È stata una lunga domanda, quindi grazie per aver letto fino a qui.
30 Aggiornamento di aprile (1)
Questa mattina ho notato che questo comportamento si verifica solo dopo la prima richiesta della giornata è stato elaborato (indipendentemente da quale servizio Web viene richiamato). Questo punta il dito verso la nostra applicazione o Apache Axis. Potrebbe essere che questo è solo un comportamento normale ?!
30 Aggiornamento di aprile (2)
Così sembra che questa attività CPU è una sorta di attività di pulizia per il web-contenitore o forse qualcosa all'interno di Apache Axis. Ora ho notato che questo accade su alcune diverse applicazioni web su alcuni server diversi. Le applicazioni prive di componente Web non subiscono lo stesso sovraccarico della CPU.
Immagino che se è un lavoro di pulizia, che "sintonizzare" in qualche modo potrebbe essere controproducente - con questo, intendo che rendere l'App Server inattivo meglio probabilmente influenzerebbe negativamente la quantità di lavoro "reale" che può fare.
Si tratta di client iSeries allo stesso livello degli altri client? Ci sono altre differenze che rendono questo unico? – Ichorus
Sì, è lo stesso livello. Succede anche su WebSphere 5.1 e 6.1 –