2009-07-24 9 views
21

Sto utilizzando Rational Application Developer v7.0 fornito con un ambiente di test integrato. Quando riesco a eseguire il debug della mia webapp, il tempo di avvio del server in modalità debug è vicino a 5-6 minuti: tempo sufficiente per fare una pausa caffè!Websphere Application Server - Cosa diavolo ci vorrà per iniziare in fretta?

A volte, quindi mi fa incazzare che mi metto maledicendo IBM per la costruzione di un sistema operativo al posto di un server app! Generazione di 20+ processi e servizi inutili senza alcuna configurazione documentata per l'ottimizzazione, per l'avvio più veloce.

Sono sicuro che ci sono molti sviluppatori Java là fuori che sarebbero d'accordo con me su questo. Ho provato a disattivare le app predefinite e un set di servizi tramite la mia console di amministrazione, tuttavia questo non ha aiutato molto.

Non ho webservices, nessun bean enterprise, niente code, solo una semplice applicazione web che richiede un pool di connessioni. Hai fatto qualcosa in passato per rendere il tuo ambiente di test integrato, iniziare velocemente in modalità di debug e consumare meno RAM?

AGGIORNAMENTO: Ho provato a disabilitare alcuni servizi (internazionalizzazione, app predefinite ecc.) E ora il server WebSphere è andato di male in peggio. Non solo non richiede tempi di avvio orribili, ma continua a congelarsi di tanto in tanto fino a 2 minuti. :-(Sembra che l'ottimizzazione non sia una cosa tanto buona, sempre!

+1

Vuoi dire che stai avviando il server in un IDE in modalità di debug o che stai avviando il server in modalità di debug remota? –

+0

che inizia in un IDE in modalità di debug – Jay

+0

Quanto tempo è necessario per avviare la modalità normale? – Jesse

risposta

8

Il modo migliore per eseguire il debug del codice del server è quello di utilizzare il debug remoto

Per prima cosa è necessario aggiungere quanto segue ai parametri JVM nello script di avvio del server:

Ciò farà sì che JVM ascolti sulla porta specificata, quindi dall'IDE si può avviare una sessione di debug remota su quella porta e eseguire il debug come se il codice fosse in esecuzione nello stesso processo.

Lavorando in questo modo si impedisce il riavvio del server in modo frequente e, quindi, passi laterali tuo problema con il tempo di start-up di Websphere.

è possibile ottenere alcuni risultati strani se i binari sul server e la sorgente nell'IDE ottenere fuori sincrono ma nel complesso che non è un problema.

+1

Come mantenere la sorgente nell'IDE in sincronia con quella nel debugger remoto? – Jay

+0

Ciao Jay, semplicemente ridistribuisci quando apporti modifiche alla tua fonte. Questo può sembrare ovvio, ma se stai facendo TDD, di tanto in tanto ti dimentichi (e lo faccio) di distribuirmi e ti ritrovi a rintracciare i commenti o lo spazio bianco nell'IDE. –

+0

È necessario installare il plug-in per amministrare WebSphere Application Server dal proprio IDE Eclipse. Per il mio WAS 7.0 è chiamato "Strumenti di WebSphere Application Server 7.0". È possibile aggiungere il server alla vista "Server" e avviarlo da lì. Lì troverai anche una "Avvia in modalità di debug" - quindi non è necessario impostare da solo gli argomenti di avvio della VM. –

1

Se il pool di connessioni è davvero l'unica funzione di appserver che usi allora perché non usi semplicemente apache commons dbcp (http://commons.apache.org/dbcp/) elimina tutto il webfear e utilizzare invece il molo.Questo dovrebbe ridurre il tempo di avvio a circa 5 secondi.Poi in seguito puoi facilmente tornare a Websphere di nuovo per il tuo ambiente di produzione se dovresti sentirne il bisogno.

+0

ci sono pochi servizi che vorrei usare - JAAS per esempio. Non sono sicuro se sarei in grado di farlo sul molo. E, è solo una scommessa sicura: ti stai salvando problemi relativi alla migrazione. – Jay

4

Ci sono alcuni suggerimenti e consigli per la sintonizzazione RAD 6 on developerworks che può aiutare, molti di questi si applicano anche per RAD 7.

ho visto una lista simile per RAD 7, invierò se riesco a trovarlo.

ho trovato un po 'tuning tips for Portal on RAD 7.

Direi che la mia esperienza con l'ambiente di test non è ottimale. Ora tendo a utilizzare Tomcat/Pluto configurato per remote debugging with an External launch configuration per gestirlo dall'interno di Eclipse e fare affidamento su configurazioni JNDI appropriate per l'astrazione del server sottostante.

Se si sta codificando per le API pertinenti, non dovrebbe essere rilevante per scopi di sviluppo che non si è su Websphere.Se si dispone di un problema specifico di Webpshere, è sempre possibile avviare la bestia per eseguirne il debug.

+0

+1 questo sembra promettente –

5

da 5 a 6 minuti non è normale. Uso RAD e WAS tutti i giorni e ottengo tempi di avvio decenti. Quale versione di WAS stai eseguendo e quanta RAM hai?

Se si condividono più spazi di lavoro e progetti per lo stesso profilo WAS, prendere in considerazione la creazione di un nuovo profilo WAS per il proprio spazio di lavoro.

Probabilmente ci hai provato, ma ecco una semplice lista di cose da provare in prima persona. Assicurarsi che le impostazioni del server in RAD ha le seguenti opzioni abilitate:

  • Ottimizzare server per testare e sviluppare
  • Server Run con le risorse sul lavoro
  • Minimizza i file delle applicazioni copiati sul server

Deseleziona "Abilita client di test universale" se non ne hai bisogno.

Nella console di amministrazione è possibile verificare alcune impostazioni del server come

  • l'esecuzione in modalità di sviluppo
  • inizio parallelo
  • componenti di avvio, se necessario

È anche possibile disinstallare l'IVT app che viene installata di default durante la creazione di un nuovo profilo WAS. Quindi le solite cose come un'unità non troppo frammentata e una dimensione del file di paging che è impostata correttamente.

E un'ultima cosa che probabilmente già sai, ripubblicare sul server invece di riavviarlo.

3

Se non si dispone di EJB, JMS, ecc., Basta installarli sotto un contenitore servlet indipendente come Tomcat o Jetty, sarete sorpresi di quanto sia veloce :-), essere ironici qui ma è vero!

5

Questa è una delle ragioni per cui è nata la primavera.

Non devi nemmeno dare tutte le sfumature come JMS, servizi remoti, ecc. Faresti meglio a usare Tomcat, ActiveMQ e OpenEJB.

Qualsiasi cosa ma WebSphere.

1

WAS V7 risolve alcuni di questi problemi consentendo di configurare ciò che viene avviato all'avvio del server dell'app.

Quindi, se e quando si esegue la migrazione a WAS V7, potrebbero sembrare alcuni miglioramenti in questo spazio.

+3

Davvero potresti spiegare dove questo viene configurato e cosa è sicuro disattivare che sai? – branchgabriel

7

Uno dei motivi principali è che si dispone di un'applicazione di grandi dimensioni con molti moduli, classi, manifesti, descrittori XML così via e il fatto che il processo di avvio del server di applicazioni Websphere è di per sé (quindi ciascuna applicazione può essere iniziato in un thread separato se hanno lo stesso peso). Un altro motivo è che i framework Eclipse EMF e JST sono molto intensi di I/O durante l'avvio e la pubblicazione/distribuzione.

Un altro motivo per l'avvio noioso è la scansione delle annotazioni che si verificherà durante la pubblicazione/distribuzione.Questa scansione delle annotazioni può essere controllata e modificata in vari modi. Guarda questo sito: http://wasdynacache.blogspot.se/2012/05/how-to-speed-up-annotation-processing.html

Prima di tutto, esamina e valuta il tuo hardware, sia la CPU, la memoria e l'HDD. Il tuo processore/i è in esecuzione al 100% per un lungo periodo durante l'avvio? In tal caso, il processore potrebbe essere troppo debole. Si verifica il paging? allora potresti dover inserire più RAM. I framework Js ed EMF di Websphere/eclipse sono molto intensi all'I/O, quindi è consigliabile considerare di investire in un disco SSD. È inoltre necessario assicurarsi che altri processi sulla macchina (software di protezione antivirus ecc.) Non rubino risorse hardware dai processi java di Websphere.

Così, per l'hardware: 1. Processore - uno abbastanza veloce, dal momento che il pubblicare e l'avvio è in gran parte singlethreaded non è necessario che molti core della CPU 2. Memoria - avrete almeno bisogno 512Mb di RAM fisica questo dipende ovviamente dalle dimensioni della tua applicazione. 3. Archiviazione: farei sicuramente un SSD veloce poiché il framework eclipse sottostante è ad alta intensità di I/O.

Ecco alcuni suggerimenti per ridurre l'ingombro della fase di avvio. Prima di applicare queste impostazioni, assicurati di registrare un avvio di base in modo da poter osservare la differenza all'avvio, ovvero il tempo di avvio ridotto.

  1. args JVM: -Xverify: nessuno -Xquickstart -Xnoclassgc -XX: + UseNUMA -XtlhPrefetch -Xgcthreads4 (ho ottenuto 4 processori virtuali installati sulla mia macchina)
  2. estendere la dimensione heap per soddisfare le esigenze della vostra applicazione.
  3. Disabilitare l'avvio automatico dell'applicazione per ridurre il tempo di pubblicazione.
  4. Disabilita PMI e traccia non necessaria.
  5. Esegui il profilo dell'applicazione durante l'avvio e correggi i colli di bottiglia, se presenti.

Altri argomenti JVM che possono ottenere le prestazioni:

  • com.ibm.cacheLocalHost = true
  • com.ibm.ws.classloader.zipFileCacheSize = 512
  • com.ibm.ws. classloader.resourceRequestCacheSize = 1024
  • com.ibm.ws.management.event.pull_notification_timeout = 20000
  • com.ibm.ws.amm.scan.context.filter.packages = true
  • org.eclipse.jst.j2ee.commonarchivecore.disableZip = true

argomenti JVM che renderanno l'application server Websphere per fermare immediatamente:

  • com.ibm.ejs.sm.server .quiesceTimeout = 0
  • proprietà com.ibm.ejs.sm.server.quiesceInactiveRequestTime = 1000

WebContainer:

  • com.ibm.wsspi.jsp.disableTldSearch = true
  • com.ibm.wsspi.jsp.disableResourceInjection = true

argomenti JVM che possono essere specificate eclipse.ini (Si noti che i parametri heap è configurato secondo le condizioni del mio ambiente)

  • -Dcom.ibm.ws.management.event .max_polling_interval = 5000
  • -Xquickstart
  • -Xverify: nessuno
  • -Xmxcl25000
  • -Xjit: dataTotal = 65536
  • -Xcodecache64m
  • -Xscmx48m
  • -Xnolinenumbers
  • -Xverify: nessuno
  • -Xmnx64m
  • -Xmx1446m
  • -Xmnx64m
  • -XX: + UseCompressedOops
  • -XX : + UseNUMA