it-swarm.com.de

Festlegen des Speicherlimits für Windows-Prozesse (oder Benutzer)

Gibt es eine Möglichkeit, eine systemweite Speicherbeschränkung festzulegen, die ein Prozess in Windows XP verwenden kann? Ich habe ein paar instabile Apps, die die meiste Zeit in Ordnung sind, aber einen Fehler aufweisen können, der dazu führt, dass in Sekundenschnelle der gesamte Speicher verbraucht wird (oder zumindest denke ich, dass es das ist). Dies führt zu einem Hard-Reset, da Windows nicht mehr reagiert und ich meine Arbeit verliere.

Ich möchte in der Lage sein, etwas wie die/etc/limits unter Linux zu tun - zum Beispiel die Einstellung von M90 (um 90% des maximalen Arbeitsspeichers für einen einzelnen Benutzer zuzuweisen). So erhält das System die restlichen 10%, egal was passiert.

45
Mike Minicki

Verwenden Sie Windows Job Objects . Jobs sind wie Prozessgruppen und können die Speichernutzung und die Prozesspriorität einschränken.

36
Adam Mitz

Verwenden Sie das Tool Application Verifier (AppVerifier) von Microsoft.

In meinem Fall muss ich simulieren, dass Speicher nicht mehr verfügbar ist, und habe im Tool Folgendes ausgeführt:

  1. Meine Bewerbung hinzugefügt
  2. Deaktiviert Basic
  3. Checked Low Resource Simulation
    • TimeOut wurde in 120000 geändert. Meine Anwendung wird 2 Minuten lang normal ausgeführt, bevor etwas in Kraft tritt.
    • HeapAlloc wurde auf 100 - 100% Wahrscheinlichkeit eines Heap-Zuweisungsfehlers geändert
    • Stacks auf true setzen - der Stack kann nicht größer werden
  4. Speichern
  5. Starte meine Bewerbung

Nach 2 Minuten konnte mein Programm keinen neuen Speicher mehr zuweisen und ich konnte sehen, wie alles gehandhabt wurde.

23
Jesse Vogt

Abhängig von Ihren Anwendungen ist es möglicherweise einfacher, den vom Sprachinterpreter verwendeten Speicher einzuschränken. Zum Beispiel können Sie mit Java die Menge von RAM= der JVM zuweisen.

Andernfalls kann es mit der Windows-API für jeden Prozess einmalig festgelegt werden

SetProcessWorkingSetSize-Funktion

4
Eric

Keine Möglichkeit, dies zu tun, die ich kenne, obwohl ich sehr neugierig bin zu lesen, ob jemand eine gute Antwort hat. Ich habe darüber nachgedacht, einer der Apps, die mein Unternehmen erstellt, so etwas hinzuzufügen, habe aber keine gute Möglichkeit gefunden, dies zu tun.

Das einzige, woran ich denken kann (obwohl nicht direkt auf den Punkt), ist, dass ich glaube, dass Sie die Gesamtspeicherbelegung für eine COM + -Anwendung in Windows begrenzen können. Es würde natürlich erfordern, dass die App für die Ausführung in COM + geschrieben ist, aber es ist die beste Methode, die ich kenne.

Die Arbeitssätze sind gut (Job-Objekte steuern auch Arbeitssätze), aber das ist nicht die gesamte Speicherauslastung, sondern nur die tatsächliche Speicherauslastung (ausgelagert) zu einem bestimmten Zeitpunkt. Möglicherweise funktioniert es für das, was Sie möchten, aber afaik beschränkt es den insgesamt zugewiesenen Speicher nicht.

3
Nick