Wir haben einige Win32-Konsole-Anwendungen auf Windows Server 2003 Service Pack 2, die regelmäßig mit dieser fehlschlagen:Gibt Windows Server 2003 SP2 die Wahrheit über freie Systempage-Tabelleneinträge?
Fehler 1450 (
ERROR_NO_SYSTEM_RESOURCES
): "Nicht genügend Systemressourcen, um den angeforderten Dienst auszuführen"
Die gesamte Dokumentation wir gefunden haben, deutet darauf hin, es auf die Anzahl der Freie Seitentabelleneinträge knapp verknüpft ist. Wir haben 16GB RAM in diesen Maschinen und verwenden den Betriebssystem-Schalter, um den Windows-Kernel in 1 GB zu komprimieren und unseren Prozessen Zugriff auf 3 GB Adressraum zu gewähren. Dies reduziert drastisch die Gesamtzahl der freien System-Seitentabelleneinträge, so ist es in Kombination mit unserer starken Verwendung von MapViewOfFile() vielleicht nicht überraschend, dass die Einträge in der Kernelseitentabelle zu Ende gehen.
Wenn jedoch der Systemmonitor zum Anzeigen des Zählers für freie Systemseiten-Tabelleneinträge verwendet wird, ist der Wert beim Neustart auf etwa 36.000 und wird nicht zurückgesetzt, wenn die Anwendung gestartet wird. Ich kann es kaum glauben, dass unsere Anwendung, die viele große Speicher-Mapped-Dateien öffnet, keine Auswirkungen auf die Kernel-Seitentabelle hat. Wenn wir den Zähler nicht glauben können, ist es viel schwieriger, die Auswirkungen von Systemänderungen, die wir vornehmen, zu testen.
Es ist ein vielversprechender Knowledge Base-Artikel, The Performance tool does not accurately show the available Free System Page Table entries in Windows Server 2003, aber es sagt, das Problem in Service Pack 1 behoben worden, und wir sind bereits auf Service Pack 2.
Hat jemand anderes kämpft mit oder diesem Problem gelöst?
Update: Ich habe überprüft! Sysptes in Windbg (Debuggen des Kernels) und der Wert entspricht dem Leistungsindikator, etwa 36.000. Ich nehme an, dass dies wahrscheinlich bedeutet, dass es wirklich so viele freie Seitentabelleneinträge gibt und dass Windows die Wahrheit sagt. Es bleibt die Frage, warum wir 1450 Fehler bekommen, wenn die PTEs nicht ausgehen.
Weitere Aktualisierung: Wir sind nie auf den Grund gegangen, warum die 1450 Fehler aufgetreten sind. Allerdings, stattdessen aktualisierten wir das Betriebssystem auf diesen Servern auf 64-Bit-Windows. Dadurch können die vorhandenen 32-Bit-Anwendungen (ohne Neukompilierung) auf volle 4 GB virtuellen Adressraum zugreifen, und der Kernel-Speicherbereich mit diesen lästigen Seitentabelleneinträgen kann ebenfalls so groß werden, wie er möchte. Ich glaube nicht, dass wir seit 1450 einen Fehler hatten.
Wir untersuchen haben einen Kernel-Debugger Arbeits bekommen, und ich _think_ wir haben so weit wie zu tun, entweder die! Sysptes oder! Vm Befehl. Wenn ich mich richtig erinnere, stimmten die Zahlen mit dem Leistungsindikator überein (was ein bisschen enttäuschend war), aber ich bin unklar in den Details. Danke für die Antwort. –
Kein Problem, danke für die Kommentare .. –