MSMQ molto lento a ricevere messaggi


8

Abbiamo una configurazione dell'ambiente MSMQ piuttosto grande che oggi ha deciso di fermarsi.

(Tutto è una macchina virtuale in vSphere 4.0 Update 1)

Esistono 8 server Web che ricevono dati dai client in rete. Tutte queste macchine hanno MSMQ installato e inviano semplicemente il messaggio MSMQ al server MSMQ principale. I messaggi sono attualmente accumulati nella coda in uscita. Queste macchine sono Windows 2008 Web Edition con 2 GB di RAM e 2 vCPU.

Abbiamo un server MSMQ cluster (Windows Cluster Server) che riceve i messaggi dagli 8 server Web. Non vi è alcun limite alla quantità di dati che possono essere nelle code. Il disco rigido è composto da 50 concerti e ci sono 46 concerti di spazio libero. Queste macchine sono Windows 2008 Enterprise Edition con 8 GB di RAM e 4 vCPU. Il cluster aveva 2 vCPU ma il carico della CPU stava raggiungendo il 100%, quindi ho aumentato entrambi i nodi del cluster di Windows a 4 vCPU.

Esistono 4 server di app che leggono i messaggi dalle code e li elaborano.

Normalmente tutto funziona perfettamente, ma non oggi.

Questa mattina tutto procede molto lentamente. Gli 8 server Web mostrano attualmente fino a 300.000 messaggi nelle code in uscita. Il server cluster mostra attualmente oltre un milione di messaggi nelle code (alcuni arrivano a 200k).

Se guardo perfmon agli 8 web server, mostra che sto calcolando in media 2 messaggi inviati al secondo. Se guardo perfmon sul cluster mostra che ~ 7 messaggi al secondo stanno arrivando nel cluster.

I computer che stanno eseguendo la lettura non ricevono molti messaggi ciascuno. I servizi più veloci ricevono 10-12 messaggi al secondo, i più lenti mostrano 0 o 1.

Le uniche modifiche recentemente sono che abbiamo modificato il numero di server Web front-end da 4 a 8. L'abbiamo fatto circa 2 settimane fa senza problemi. Martedì li abbiamo spenti per vedere come i restanti 4 potevano gestire il carico. Mercoledì abbiamo riacceso le quattro macchine più recenti.

Il disco sul cluster mostra un IO molto basso e nessun accodamento.

Per sicurezza, ho aggiornato PowerPath alla versione più recente, ma questo non ha aiutato nessuno.

Gli 8 server Web si trovano su una vLAN e i server Cluster e i server delle app si trovano su una seconda vLAN. Non ci sono firewall tra le vLAN.

E non c'è nulla di utile nell'applicazione o nei registri di sistema su nessuna delle macchine.


2
Si scopre che la causa della lettura lenta di MSMQ era in realtà un problema dell'applicazione. I servizi che leggono dalla coda poi vanno a cose su una condivisione di file. La condivisione dei file ha iniziato a richiedere sempre più tempo, il che ha rallentato i servizi, provocando il backup delle code e ora abbiamo un casino. Apparentemente la nostra base di utenti è cresciuta molto più velocemente del previsto e stiamo massimizzando uno dei gruppi RAID sulla SAN che ospita le condivisioni di file. Lunedì effettueremo un ordine urgente per più spazio SAN con il nostro fornitore.
mrdenny,

2
Non abbiamo visto questa crescita della coda in anticipo perché il nostro server di monitoraggio è un server Windows 2003 e le macchine Windows 2003 non possono monitorare le code MSMQ di Windows 2008 in cluster da remoto. Il server di monitoraggio è già programmato per un aggiornamento a marzo. <sigh>
mrdenny

Risposte:


4

Ogni volta che qualcuno dice di avere più di un milione di messaggi, i klaxon di allarme si spengono! I messaggi richiedono che la memoria del kernel (pool di paging) sia gestita. Se hai un numero così vasto di messaggi, potresti esaurire ciò che è disponibile sul server cluster. Un numero ottimale per il numero di messaggi in una coda è zero - in pratica assicurati di poter normalmente elaborare i messaggi più velocemente di quanto possano arrivare.

Consiglio di chiudere i server Web e di elaborare completamente l'arretrato di messaggi prima di riportarli nuovamente online.

Articolo di riferimento 4 di questo post del blog: http://blogs.msdn.com/johnbreakwell/archive/2006/09/18/insufficient-resources-run-away-run-away.aspx

Saluti John Breakwell (MSFT)


A questo punto ho ricevuto una chiamata al PSS e sto aspettando che mi richiamino adesso. Ho interrotto il flusso dei messaggi nella coda sui server Web. Le code in uscita sui server Web sono tutte piene a questo punto con 1 Gig di informazioni ciascuna. Le code in cluster hanno un totale di circa 4,5 milioni di messaggi ciascuna. Normalmente manteniamo un numero molto basso di messaggi nelle code man mano che i dati vengono elaborati molto rapidamente. È successo qualcosa (non so cosa) e tutto è andato all'inferno.
mrdenny,

John, grazie per avermi dato una sbirciatina. Sulla base dell'output di tmq, immagino sia il mio problema. Limitazioni dei pool (calcolate approssimativamente, in KB) Paged: limite 307.200 utilizzato per il 397% Non di paging: limite 262.144 utilizzato per il 49% Ho le code che rallentano lo scarico mentre aspetto che PSS mi richiami. Se sei a Redmond durante il Summit MVP fammi sapere, birre su di me.
mrdenny,

@utente34024 abbiamo riscontrato il problema iniziale, che ho inserito in un commento sopra. Grazie per l'aiuto.
mrdenny,

1

Ho chiesto a uno dei nostri amministratori di sistema e mi ha detto che il nostro punto magico erano 4 server Web che colpivano al massimo la scatola MSMQ su macchine virtuali, quindi si sono trasferiti nella scatola hardware per risolvere. Prova anche a acquisire pacchetti per vedere cosa sta succedendo. C'è molto nell'autenticazione anche in AD? Con quanto è loquace MSMQ, è necessario limitare i percorsi di rete e possibilmente il percorso di autenticazione.

HTH, Chuck.


Sono stati in grado di capire cosa ha causato esattamente il rallentamento quando si hanno più di 4 server Web che parlano con un singolo server MSMQ? L'archiviazione è l'archiviazione SAN diretta su iSCSI, quindi non dovrebbe essere un problema di archiviazione. Proverò a spegnere 4 degli 8 server Web e vedrò cosa mi viene in mente. Se devo dire al mio capo di acquistare nuovo hardware, avrò bisogno di una dannata buona ragione.
mrdenny,

Solo la confusione dei messaggi. Hanno anche trovato alcune configurazioni di autenticazione mancate.
SQLGuyChuck

Immagino che scaricherò WireShark e lo metterò sul server MSMQ e vedrò cosa mostra. Impossibile inserirlo nei server Web, si arresta in modo anomalo dopo circa 30 secondi a causa del carico del traffico di rete.
mrdenny,

Quindi ho avviato WireShark sulla macchina e vedo circa 3 secondi tra i messaggi dall'unico web server che sto monitorando. Inutile dire che non sembra buono.
mrdenny,

abbiamo riscontrato il problema iniziale, che ho inserito in un commento sopra. Grazie per l'aiuto.
mrdenny,

1

Facendo riferimento al tuo commento sulla mancanza di amministrazione remota, sì, non è una grande storia con MSMQ e contatori di perf. Per chiunque segua il thread e voglia sapere quali combinazioni di sistemi operativi funzionano, dai un'occhiata al blog Motley Queue:

Contatori delle prestazioni di MSMQ 4.0 e chiave di registro NetNameForPerfCounters http://blogs.msdn.com/motleyqueue/archive/2007/12/14/msmq-4-0-performance-counters-and-the-netnameforperfcounters-registry-key.aspx

Saluti John Breakwell (MSFT)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.