7

Sono in esecuzione alcuni problemi di prestazioni utilizzando un gestore generico che implementa IHttpAsyncHandler. Al più semplice, il gestore riceve una richiesta GET e 20 secondi dopo termina la risposta dopo aver scritto '< timeout />' alla risposta.Errori IIS 7.0 503 con gestore generico (.ashx) che implementa IHttpAsyncHandler

Quando martella il .ashx con 10000-20000 richieste simultanee, non riesce con il server 503 non disponibile dopo esattamente 5000 richieste. Quando si passa alla modalità sincrona e termina immediatamente la richiesta, il problema scompare.

Ho armeggiato con un numero di impostazioni, tuttavia l'unica cosa che sono riuscito a ottenere è inferiore alla soglia di richiesta a cui si verifica questo errore.

Ecco una carrellata delle impostazioni che ho giocato con:

machine.config:

<configuration> 
    ... 
    <system.web> 
     ... 
     <processModel enable="true" requestQueueLimit="10000"/> 
     ... 

web.config:

<configuration> 
    ... 
    <system.web> 
     ... 
     <httpRuntime enable="true" appRequestQueueLimit="10000"/> 
     ... 

IIS Manager> ApplicationPools> Impostazioni avanzate

Queue Length : 65535 

Anche se non posso essere sicuro, sembra che queste impostazioni funzionano bene e bene se le richieste sono sincroni, ma quando asincrono, non riesco ad andare oltre esattamente 5000 le richieste prima che il server inizia a raccontare me per andare via. Se metto le cose più in basso (non ricordo esattamente quale impostazione proviene da quanto sopra, ma le ho provate tutte), allora il conteggio 503 sale di conseguenza, ma non posso mai smettere di succedere oltre 5000 se sottoposto a un carico grave .

Sembra che ci siano un certo numero di impostazioni sparse in una miriade di luoghi che potrebbero influire su questo, ma il 5000 sembra abbastanza scolpito nella pietra. Vedo here che appRequestQueueLimit non può superare 5000, ma non è possibile trovare ulteriori informazioni su questo, e mi chiedo se questa sia disinformazione.

C'è qualche tipo di "controllo delle inondazioni" impostazione in IIS che potrebbe essere limitante un singolo host a non più di 5000 richieste? Come posso ottenere che IIS gestisca più di 5000 richieste asincrone simultanee?

Modifica2: Esistono contatori o altri indicatori di quali limiti potrebbero essere superati e in che modo eseguire ulteriori accertamenti?

Edit: Ecco il codice loadgenerator:

using System; 
using System.Net; 
using System.Threading; 

namespace HammerTime 
{ 
    class Program 
    { 
     private static int counter = 0; 
     static void Main(string[] args) 
     { 
      var limit = 5000; 
      ServicePointManager.DefaultConnectionLimit=limit; 
      for (int i = 0; i < limit;++i) 
      { 
       StartWebRequest(i.ToString()); 

      } 
      Console.ReadLine(); 
     } 

     private static void StartWebRequest(string channelId) 
     { 
      string uri = "http://spender2008/test/Test.ashx?channel="+channelId; 
      HttpWebRequest request = (HttpWebRequest) WebRequest.Create(uri); 
      request.BeginGetResponse(responseHandler, request); 
     } 

     private static void responseHandler(IAsyncResult ar) 
     { 
      try 
      { 
       HttpWebRequest state = (HttpWebRequest)ar.AsyncState; 
       HttpWebResponse response = (HttpWebResponse)state.EndGetResponse(ar); 

      } 
      catch(Exception e) 
      { 
       Console.WriteLine(e.Message); 
      } 
      finally 
      { 
       Console.WriteLine(Interlocked.Increment(ref counter)); 
      } 

     } 
    } 
} 

risposta

5

OK. Risolto il problema ... molte grazie al post this per chiarire alcuni dettagli.

di eliminare gli errori 503 richiesti 3 diversi cambiamenti di configurazione:

macchina.config:

<configuration> 
    ... 
    <system.web> 
     ... 
     <processModel enable="true" requestQueueLimit="100000"/> 

IIS Manager> ApplicationPools> Impostazioni avanzate

Queue Length : 65535 

e infine (il pezzo mancante del puzzle), la riga di comando:

appcmd.exe set config /section:serverRuntime /appConcurrentRequestLimit:100000 

Il web L'impostazione di .config menzionata nel post principale era irrilevante.

10000 connessioni simultanee, nessun problema. Grazie per l'aiuto!

+0

Grazie per aver condiviso la soluzione, stavo ottenendo lo schermo bianco della morte 503 quando un sito aveva molto traffico per qualche motivo, l'appcmd lo riparava –

Problemi correlati