IIS7 Integrierte Pipeline: die Interaktion zwischen maxConcurrentRequestsPerCPU und requestsQueueLimit Einstellungen
Erstens gibt es eine tolle übersicht über die IIS7 HTTP-request-Lebenszyklus und die verschiedenen Einstellungen, die die Leistung beeinflussen hier:
ASP.NET Thread-Nutzung unter IIS 7.0 und 6.0
Sehr speziell aber in dotNet 4 die Standardwerte für maxConcurrentRequestsPerCPU und requestsQueueLimit eingestellt sind 5000. E. g. äquivalent zu: (in aspnet.Konfiguration):
<system.web>
<applicationPool
maxConcurrentRequestsPerCPU="5000"
maxConcurrentThreadsPerCPU="0"
requestQueueLimit="5000" /> (** see note below)
</system.web>
Scheint mir, dass auf multi-CPU/core-server der requestQueueLimit hier wird immer aufgerufen werden, auch bevor die "perCPU' begrenzen. Wenn also ein Maximum von 5000 Anfragen pro CPU ist, was Sie wirklich wollen dann würde ich erwarten, dass die requestQueueLimit erhöht werden muss, um zu 5000 * CPUCount oder nur vollständig deaktiviert.
Ist meine interpretation korrekt? Wenn ja, kann ich das deaktivieren requestQueueLimit? (setzen Sie ihn auf null?). Die Dokumentation dieser Einstellung nicht angezeigt wird, um auf diese Frage einzugehen (also vielleicht bin ich etwas fehlt oder verlesen?)
** Anmerkung aus dem obigen Artikel: Die requestQueueLimit ist schlecht benannt. Tatsächlich begrenzt die maximale Anzahl von Anfragen, die bearbeitet werden können, indem ASP.NET gleichzeitig. Dies gilt sowohl für Anfragen, die sind in der Warteschlange und Anforderungen, ausgeführt werden. Wenn der "Aktuelle Anforderungen" Leistungsindikator übersteigt requestQueueLimit, neu eingehende Anträge werden abgelehnt mit der Statuscode 503)
- Ich fragte Thomas (Autor von dem Beitrag, den Sie zeigen) zu kommentieren.
Du musst angemeldet sein, um einen Kommentar abzugeben.
***Ist meine interpretation korrekt?
Ja, wenn Sie ausführen möchten, mehr als 5000 Anfragen gleichzeitig, müssen Sie erhöhen die requestQueueLimit. Die requestQueueLimit schränkt die Gesamtzahl der Anfragen im system. Durch sein Vermächtnis, es ist eigentlich die Gesamtzahl der Aufträge im system, und nicht die Anzahl der Anfragen, die in irgendeiner Warteschlange. Ihr Ziel ist es, zu verhindern, dass die server von Umkippen aufgrund von Mangel an physischen Speicher, virtuellen Speicher, etc. Wenn das limit erreicht ist, werden eingehende Anfragen erhalten eine schnelle 503 "Server Too Busy" - Antwort. Übrigens, die aktuelle Anzahl der Anforderungen im system verfügbar gemacht wird, durch den "ASP.NET\Aktuelle Anforderungen" performance counter.
***kann ich das deaktivieren requestQueueLimit? (setzen Sie ihn auf null?)
Können Sie effektiv deaktivieren Sie es, indem Sie es auf einen großen Wert, wie 50000. Sie müssen den Wert in der aspnet.config Datei Zweifel Ihre server verarbeiten kann, 50000 gleichzeitige Anfragen, aber wenn das so ist, dann doppelt. Eine Einstellung von null wird man nicht deaktivieren...seltsam, es bedeutet nicht mehr als eine Anforderung kann parallel ausgeführt werden.
Durch die Art und Weise, es sieht aus wie es ist ein bug in v4. Für den integrierten Modus, es werden nur erfolgreich liest den Wert des requestQueueLimit, wenn es konfiguriert ist, in der aspnet.config-Datei als beschrieben auf der MSDN-Website. Für einige Grund, v4 war nicht Lesen Sie es von der Maschine.config, wenn ich experimentierte mit es Sie ein wenig wenig vor.
Möchten Sie vielleicht zu prüfen, diese Anwendung Quellcode. IIS-tuner ist ein open-source-Anwendung, die optimiert IIS-Einstellungen für eine bessere Leistung. Auf der anderen Seite diese Seite könnte nützlich sein für Ihre Fragen.