2017-10-30 3 views
0

Wir haben einen asp.net Core 2 Server. In Leistungstests, wenn einige (z. B. mehrere) ausstehende Anforderungen bestehen, bleiben neue CORS-Preflight-Anforderungen ausstehend.Asp.net Core 2 Langsame Antwort auf CORS Preflight-Anfragen

Es scheint, dass asp.net Kern eine bestimmte Grenze für die Anzahl der gleichzeitigen Anforderungen in der Pipeline hat, und der Standardwert für dieses Limit ist sehr niedrig.

Gibt es Ressourcen zu diesen leistungsbezogenen Themen? Gibt es eine Möglichkeit, Anforderungen zu priorisieren?

Natürlich, nachdem wir die anderen Anfragen optimiert haben, wird dieses Problem schwieriger zu reproduzieren, also wollen wir es gut genug verstehen.

+1

Refreshing mein Gedächtnis, die [default Turmfalke Optionen] (https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?tabs=aspnetcore2x) verlassen die max. gleichzeitige Verbindungen unbegrenzt, und der CLR-Pool erhält einen [default max] (https://github.com/dotnet/corefx/issues/15990#issuecomment-279023245) 32K-Threads, obwohl [via config] geändert werden kann (https: //github.com/dotnet/cli/issues/889) in Ihrer spezifischen Anwendung. Wie hosten und testen Sie die App? Wie sehen Ihre Anfrage-Pipeline und Middleware aus? –

+0

@ DanielJ.G. Meist ist alles Standard. Wir haben eine Protokollierungs-Middleware (benutzerdefinierte Implementierung) und eine JWT-Validierungs-Middleware hinzugefügt. Danke für die Hilfe, ich denke, ich sollte sie abmelden, um zu sehen, ob einer von ihnen die Ursache ist. – Alireza

Antwort

1

Ich hatte eine similar question im Zusammenhang mit Benchmarking-Leistung für ASP.NET Core Kestrel here beantwortet.

Kurz gesagt, Sie könnten die Middleware entfernen, die die Engpässe verursacht, oder zumindest das könnte Ihnen helfen, den Täter zu diagnostizieren.


Bestellinformation
Die Reihenfolge, in den Middleware-Komponenten in Configure Verfahren hinzugefügt werden definiert die Reihenfolge, in der sie auf Anfragen aufgerufen werden, und die umgekehrte Reihenfolge für die Antwort. Diese Reihenfolge ist entscheidend für Sicherheit, Leistung und Funktionalität.

------ Quelle: Microsoft Docs: ASP.NET Core Middleware


Kurzschließset

Sie können Kurzschluss die Anfrage Pipeline Performance-Optimierungen (oder Tests) zu handhaben, indem nicht Aufruf des next Parameters. Zum Beispiel:

public class Startup 
{ 
    public void Configure(IApplicationBuilder app) 
    { 
     // make sure you place this at the top 
     // the request pipeline will go in sequence 
     app.Use(async (context, next) => 
     { 
      // do work for your special case, performance tests, etc 

      // in order to short-circuit the pipeline, do NOT call the next parameter 
      // so, you could place some kind of conditional here that will allow only 
      // specific requests to continue down/up the pipeline 
      if (!true) 
      { 
       await next.Invoke(); 
      } 
     }); 

     // the rest of the pipeline 
    } 
} 
+0

Ich profile eine echte Anwendung. Wir brauchen alle unteren Ebenen, bis hin zur Datenbank. – Alireza

+1

@Alireza - Ich habe gerade die Antwort aktualisiert, um mehr Kontext zu Ihrer Anforderung zu geben. Ich hoffe es macht Sinn. – Svek

+0

Danke für die Antwort. Es ist eine sehr nützliche Möglichkeit, die Pipeline zu modifizieren, um einige Messungen durchzuführen. Ich sehe nur nicht, wie ich es in meinem Szenario verwenden kann. Wir möchten, dass der Leistungstest den gesamten Dienst von den Netzwerkverbindungen bis zu den Datenbankplatten testet. Wir wollen nichts umgehen. – Alireza