web-dev-qa-db-fra.com

Définir la limite de mémoire du processus Windows (ou utilisateur)

Existe-t-il un moyen de définir une limite de mémoire à l'échelle du système qu'un processus peut utiliser dans Windows XP? J'ai quelques applications instables qui fonctionnent bien la plupart du temps, mais peuvent frapper un bug qui entraîne la consommation de toute la mémoire en quelques secondes (ou du moins je suppose que c'est tout). Cela entraîne une réinitialisation matérielle car Windows ne répond plus du tout et je perds mon travail.

Je voudrais pouvoir faire quelque chose comme/etc/limits sur Linux - paramétrer M90, par exemple (pour définir 90% de mémoire max pour un seul utilisateur à allouer). Ainsi, le système obtient les 10% restants, quoi qu'il arrive.

45
Mike Minicki

Utilisez Windows Job Objects . Les travaux sont comme des groupes de processus et peuvent limiter l'utilisation de la mémoire et la priorité des processus.

36
Adam Mitz

Utilisez l'outil Application Verifier (AppVerifier) de Microsoft.

Dans mon cas, je dois simuler la mémoire n'étant plus disponible, j'ai donc fait ce qui suit dans l'outil:

  1. Ajout de mon application
  2. Basique non cochée
  3. Vérification de la simulation des faibles ressources
    • Changé TimeOut à 120000 - mon application fonctionnera normalement pendant 2 minutes avant que quoi que ce soit entre en vigueur.
    • HeapAlloc modifié à 100 - 100% de chances d'erreur d'allocation de tas
    • Définissez Stacks sur true - la pile ne pourra plus grossir
  4. Sauver
  5. Lancer ma candidature

Au bout de 2 minutes, mon programme ne pouvait plus allouer de nouvelle mémoire et j'ai pu voir comment tout était géré.

23
Jesse Vogt

Selon vos applications, il peut être plus facile de limiter la mémoire utilisée par l'interpréteur de langue. Par exemple, avec Java vous pouvez définir le montant de RAM la JVM sera allouée).

Sinon, il est possible de le définir une fois pour chaque processus avec l'API Windows

fonction SetProcessWorkingSetSize

4
Eric

Aucun moyen de faire cela que je sache, bien que je sois très curieux de lire si quelqu'un a une bonne réponse. J'ai pensé à ajouter quelque chose comme ça à l'une des applications que ma société construit, mais je n'ai trouvé aucun bon moyen de le faire.

La seule chose à laquelle je peux penser (bien que pas directement sur le point) est que je pense que vous pouvez limiter l'utilisation totale de la mémoire pour une application COM + dans Windows. Il faudrait que l'application soit écrite pour s'exécuter dans COM +, bien sûr, mais c'est le moyen le plus proche que je connaisse.

Le contenu de l'ensemble de travail est bon (les objets de travail contrôlent également les ensembles de travail), mais ce n'est pas l'utilisation totale de la mémoire, mais uniquement l'utilisation réelle de la mémoire (paginée) à un moment donné. Cela peut fonctionner pour ce que vous voulez, mais afaik cela ne limite pas la mémoire totale allouée.

3
Nick