12
votes

Comment vous protégeez-vous de la consommation de mémoire en runaway rapportant le PC?

Tous les jours et encore je me trouve faire quelque chose de masse modéré, ce qui entraîne mon programme allouant toute la mémoire qu'il peut obtenir, puis certains.

Ce genre de chose utilisée pour que le programme meure assez rapidement avec une erreur "hors mémoire", mais ces jours-ci, les fenêtres se déplaceront de manière à donner à cette mémoire inexistante à l'application et, en fait, c'est apparemment préparé à se suicider le faire. Pas littéralement, bien sûr, mais il se primera si mal de la RAM physique utilisable que même l'exécution du responsable de la tâche nécessitera une demi-heure d'échange (après que toute l'application fuguelle affecte encore de plus en plus de mémoire tout le temps).

Cela n'arrive pas trop souvent, mais quand il fait que c'est désastreux. Je dois généralement réinitialiser ma machine, causant de temps en temps une perte de données et généralement beaucoup d'inconvénients.

Avez-vous des conseils pratiques sur la réduction des conséquences d'une telle erreur de moins? Peut-être que certains regist Tweak pour limiter la quantité maximale de mémoire virtuelle qu'une application est autorisée à allouer? Ou un drapeau CLR qui limitera ceci que pour l'application actuelle? (C'est généralement en .NET que je fais cela à moi-même.)

( "Ne manquez pas de RAM" et "Achetez plus de RAM" ne sont pas d'utilisation - le premier que je n'ai pas de contrôle, et ce dernier déjà fait.)


5 commentaires

+1, j'ai voulu poser cette question pendant un moment. C'est encore pire quand ce n'est pas mon application et je ne peux pas frapper "arrêter".


Habituellement, je suis assez rapide avec tuer mon application chaque fois que je sens quelque chose ne va pas comme ça. Cependant +1 pour penser à une solution au lieu de vivre avec ce "danger". Peut-être qu'il y a un peu de peau, ça sera grandement apprécié!


Je n'ai jamais vu que la consommation de mémoire fugue abaisse le PC, mais si cela le fait, j'espère que cela fait cela pendant le développement ou l'assurance qualité afin que nous puissions résoudre le problème; Ou si cela arrive en production, j'espère que nos opérations vont tuer / vider le processus et m'en informer.


Je l'ai eu lieu sur GNU / Linux, mais c'était avec C, pas avec l'une des langues gérées par la mémoire, les gens font toujours de la publicité pour la raison même que cela n'est jamais censé arriver (ai-je déjà entendu parler de tous? ). Et être clair, la machine (courante gnome) à geler pour que je ne puisse pas utiliser la souris ou le clavier pour interrompre le programme; la machine n'a pas désactivé ou commencée à fumer;)


+1 La prévention est meilleure que guérir.


5 Réponses :


0
votes

J'utilise habituellement le gestionnaire de tâches dans ce cas pour tuer le processus avant que la machine ne fonctionne de mémoire. Le groupe de travail fonctionne assez bien, même si la machine commence à se poser à peu près. Après que la machine récupère généralement. Les versions ultérieures de Windows (telles que 7) ont généralement plus de survie dans ces situations que les versions antérieures. En cours d'exécution sans DWM (désactiver les thèmes Aero à Vista et 7) donne généralement plus de temps à invoquer le travail du travail à surveiller et à tuer potentiellement les processus de runaway.


0 commentaires

4
votes

La réponse évidente serait d'exécuter votre programme à l'intérieur d'une machine virtuelle jusqu'à ce qu'il soit testé sur le point que vous êtes raisonnablement certain que de telles choses ne se produiront pas.

Si vous n'aimez pas cette quantité de frais générale, vous pouvez exécuter ce processus dans un objet de travail avec une limite définie sur la mémoire utilisée pour cet objet de travail.


2 commentaires

Le VM mourra de la même chose si cela se produit et, comme c'est là que je faisais du développement, je souffre presque tous les mêmes effets. Rejets d'emploi: je ne suis pas tombé sur ces choses auparavant; Est-il possible de configurer Visual Studio pour commencer à déboguer "via" un objet d'emploi, si je peux le dire?


Droite - vous devrez l'affecter à une machine virtuelle séparée pour obtenir beaucoup de bien. Je ne pense pas que VS prend en charge la mise en œuvre de travaux en matière d'emploi, bien que cela semble être une étape évidente.



1
votes

sous Windows Vous pouvez contrôler les attributs d'un processus en utilisant Objets d'emploi


0 commentaires

8
votes

Vous pouvez garder une invite de commande ouverte chaque fois que vous exécutez une application risquée. Ensuite, si cela commence à être hors de contrôle, vous n'avez pas à attendre que le gestionnaire de tâches se charge, il suffit d'utiliser:

taskkill /F /FI "MEMUSAGE ge 2000000"


2 commentaires

Une idée brillante avec la planification, cela pourrait simplement faire le tour. Je n'avais aucune idée de la tâche de Taskill avait une puissante capacité de filtrage.


+100. Cela se passe dans ma barre de lancement rapide. Après "quelques minutes", c'est généralement trop tard.



7
votes

Il y a quelque chose que vous pouvez faire: limitez la taille de votre processus de travail. Collez-la dans votre principale méthode:

#if DEBUG
      Process.GetCurrentProcess().MaxWorkingSet = new IntPtr(256 * 1024 * 1024);
#endif
  • Ajouter plus de RAM, aucune raison de ne pas avoir au moins 3 gigaoctets ces jours-ci. Li>
  • Défragez votre fichier de pagination. Cela nécessite de défrailler d'abord le disque, puis de défragmenter le fichier de pagination avec, disons, Sysinternals 'Pagedefrag utilitaire. Li> ul>

    Surtout la dernière tâche de maintenance est importante sur les anciennes machines. Un fichier de pagination fragmenté peut considérablement aggraver le comportement d'échange. Commun sur les machines XP qui n'ont jamais été défragées auparavant et ont un petit disque qui a été laissé à se remplir. La fragmentation du fichier de pagination provoque une grande recherche de la tête de disque, affectant énormément les chances qu'un autre processus peut échanger dans la RAM dans une quantité de temps raisonnable. P> P>


0 commentaires