2009-04-29 16 views
5

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 classe BoundedBuffer, vedo che lo BoudedBuffer 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.

+0

Si tratta di client iSeries allo stesso livello degli altri client? Ci sono altre differenze che rendono questo unico? – Ichorus

+0

Sì, è lo stesso livello. Succede anche su WebSphere 5.1 e 6.1 –

risposta

0

Molto istintivamente (non avendo familiarità con le piattaforme iSeries) vorrei esaminare i problemi relativi all'IO su disco. Puoi descrivere il sottosistema del disco? Riesci a vedere se la tua app trascorre una quantità insolitamente grande di tempo in iowait?

+0

Grazie per il suggerimento. Ho guardato I/O, ma quando il server è inattivo, ci sono ancora picchi della CPU, ma nessuna chiamata I/O. –

0

La mia ipotesi migliore è che si tratti di un tipo di monitoraggio sull'istanza, come Tivioli, ecc. Avete escluso qualsiasi attività di GC?

HTH Tom

+0

Grazie per il commento Tom. Tivioli è stata una delle cose che abbiamo visto per la prima volta. Ma non il colpevole. Sono riuscito a soddisfare il cliente con la teoria della "pulizia", ​​quindi speriamo che sia finita ora: P –

1

Si potrebbe provare al profilo e fare dump heap dell'applicazione, che potrebbe rispondere ad alcune domande relative alla memoria e CPU.

0

La maggior parte dei server di applicazioni sono implementati in java e quindi WebSphere. Questi server oltre a servire le richieste dei client devono fare altri lavori periodici come dire gestione del pool di risorse. L'esecuzione di questi lavori creerà alcuni oggetti temporanei che devono essere raccolti.

A seconda della quantità di heap a cui sono state assegnate le impostazioni di utilizzo e di garbage collector, verrà richiamato il garbage collector. Direi di provare a vedere se si tratta di un garbage collector thread che sta occupando la tua CPU. Per questo, connettere l'utilità jconsole al processo websphere remoto per un giorno e verificare se esiste una correlazione tra l'utilizzo dell'heap e l'utilizzo della CPU.

1

Si consiglia di seguire il necessario per raccogliere documentation fornito da IBM e di generare un PMR insieme alle proprie indagini. Le cose si potrebbe sospettare:

  • Garbage Collection (improbabile sul basso utilizzo dell'applicazione)
  • temporizzatori o compiti (ad esempio java.util.Timer o commonj direttore di lavoro)
  • connessione Pretest che ha una query complessa SQL (in proprietà dell'origine dati di WebSphere Application Server del DataSource)

Vorrei inoltre consiglia di utilizzare il profiler per determinare la causa, YourKit profiler è un grazioso decente.

0

Sto anche sperimentando questo stesso problema, [Allarme Deferrable: x] usando con BoundedBuffer. L'unica differenza che ho è che questo è su una macchina Windows 7 a 64 bit. Non c'è assolutamente nessun Tivioli o altro processo in esecuzione, nessuna richiesta viene fatta, la singola istanza è semplicemente inattiva.

Posso eseguire l'applicazione in modalità DEBUG e mettere in pausa il thread di Allarme Deferrable e gli spike della CPU si fermano, riprendono e ricominciano.

Ho controllato l'attività del disco, l'attività di rete e il loro non succede nulla.

Sto eseguendo WebSphere 6.1.0.27.

Problemi correlati