2010-02-13 4 views
5

In un nostro cliente, i candidati effettuano test con il nostro software. Se il test è terminato, alcuni calcoli vengono eseguiti sul server. Ora, a volte, 200 candidati possono terminare il test allo stesso tempo, quindi 200 calcoli vengono eseguiti simultaneamente. I calcoli tutti sembrano andare bene, ma alcune chiamate al server IIS7 tornare un errore di http ...Quando si carica troppo per IIS7?

In Flex, questo è l'errore:

code = "NetConnection.Call.Failed" 
description = "HTTP: Status 200" 
details = "http://servername/weborb.aspx" 
level = "error" 

Non è stato 200 OK? Quindi cosa c'è di sbagliato qui? È anche un problema con IIS7? Dei 200 candidati 20 hanno ricevuto questo messaggio. Al riavvio del test, tutto ha funzionato bene.

Ho trovato this sull'argomento, ma mi chiedo se questo ha qualcosa a che fare con il mio problema (la prossima settimana il nostro cliente farà alcuni stresstests e ho già chiesto loro di testare se la soluzione in questo post funziona) .

Alcune domande:

  • Può essere che blocca IIS7 determinate chiamate HTTP quando il carico è di troppo?
  • Come si può sapere che IIS7 ha bloccato quelle chiamate a causa di un carico eccessivo?
  • È possibile configurare queste cose?

Tecnicamente, in futuro vorrei accodare i calcoli, ma per ora non c'è tempo né budget per questo.

Applicazione: Flex, WebORB, ASP.NET, IIS7 e SQLSERVER2008. Server è Windows Server 2008.

+0

Quale errore stanno ottenendo, 500 del server, 404, altro? Ciò aiuterebbe a diagnosticare il problema. –

+0

Ho appena modificato il mio post. grazie. –

+0

Non avrei mai pensato di dirlo, ma questo è un problema hardware! Il numero di connessioni e la velocità effettiva del sistema dipendono dalle specifiche del server e dalla larghezza di banda n/w. Penso che dovresti chiedere al venditore del server alcuni numeri e quindi mettere in correlazione i risultati. E hai ragione quando i server rilasciano connessioni quando si verificano elevati carichi e latenze – questzen

risposta

1

Questo problema mi sembra molto familiare. Abbiamo un sacco di widget flessibili collegati a un server e talvolta restituisce anche "Netconnection.Call.Failed". Per noi, sembra che IIS (e MSSql dietro) non possano elaborare tutte le richieste in tempo, quindi alcune di esse sono scadute. Cerca di verificare quanto tempo ogni richiesta/tutte le richieste richiedono, quindi controlla le impostazioni del timeout.

0

Technically, in the future I would like to queue the calculations, but for now, there isn't time nor budget for that.

Una coda non è così difficile da mettere insieme con uno script batch-processing scappare le operazioni pianificate di Windows'. È sufficiente scaricare i risultati in un DB SQL o, se si è veramente pigri, inserire le righe in SQL con un array serializzato, quindi chiedere loro "torna indietro" per vedere i loro risultati. "Attendi, i tuoi risultati sono ancora in fase di elaborazione."

Ci vorrebbe meno tempo di aspettare in giro per SO per una risposta pallottola d'argento secondo me.

1

Ci sono molte cose che puoi fare per mettere a punto le prestazioni del tuo server e di IIS.

per rispondere alle vostre domande:

Un limite massimo di connessioni simultanee (più altre impostazioni) in IIS 7 possono essere configurate selezionando il tuo sito web in Gestione IIS e selezionando 'Impostazioni avanzate' nel riquadro Azioni sulla destra. Anche se di default questo è un numero molto più superiore a 200.

Looking in the IIS log files, in particolare i codici di stato di ritorno possono dare un indicazione di cosa è andato storto. Allo stesso modo il registro eventi di Windows dovrebbe anche indicare eventuali eccezioni che si sono verificate.

1

Suggerisco di attivare il bilanciamento del carico tra istanze di IIS o di utilizzare nginx per il bilanciamento del carico.

impostare anche il limite di 200 Utente più alto. Poiché in IIS, ogni utente si connette alla tua applicazione conta come 1 istanza di utente, a un certo punto utilizzerai fino a 200 slot utente. Questa è l'impostazione predefinita e puoi impostarla su un numero molto più alto.

Impostare anche il timeout su un numero più alto.

Anche guardare Comet, se si cerca di chiamare risultato coerente come dati in tempo reale (magazzino, meteo, chat, UrloBox)