web-dev-qa-db-fra.com

Comment éviter que mon système ne réponde plus lorsque je suis en train de battre (sans mémoire vive)?

J'ai 8 Go de RAM, mais parfois, j'utilise plusieurs ordinateurs virtuels et suffisamment de processus Chrome pour utiliser la plus grande partie de ma mémoire. C’est généralement bien, mais parfois mon système se met à battre très fort et il m’est difficile pour moi de récupérer sans attendre que les choses s’améliorent car l’interface utilisateur est pour la plupart gelée.

Dans tous ces cas, les programmes utilisant la plupart de mes RAM pourraient être dépriorisés. Si Chrome ou VM ne répondait plus mais que mon environnement graphique et mon terminal étaient toujours réactifs, je pouvais basculer sur un terminal, trouver le coupable et le tuer. Je pouvais imaginer quelque chose comme un "Nice" pour la mémoire (pour pouvoir utiliser Nice Chrome et ma machine virtuelle) ou pour forcer l'environnement graphique et mon terminal à rester en mémoire et à ne pas permuter.

Existe-t-il un moyen de s'assurer que l'interface utilisateur reste réactive lorsque mon système est en déroute?

Merci!

EDIT: Je cherche toujours à savoir s’il existe un Nice pour mémoire, mais je viens de découvrir que mon système n’a pas d’espace de swap. Je pense que cela s’est produit parce que j’ai commencé à utiliser un échange domestique chiffré et crypté (voir Le swap ne fonctionne pas avec une installation propre de 14.04 utilisant un serveur domestique crypté ). Donc, mon système ne répond probablement plus parce que je n'ai pas d'espace d'échange, donc mon système ne peut pas échanger des programmes inutiles lorsqu'il manque de mémoire.

11
Sam King

Je viens de découvrir que mon système ne dispose d'aucun espace d'échange

Si cela est vrai, alors cela contribue probablement au problème.

En utilisant plusieurs ordinateurs virtuels dotés d'allocations de mémoire importantes, une quantité de RAM qui serait normalement plus que suffisante pour une utilisation normale (8 Go) commence à devenir serrée, ce qui signifie que votre système ne pourra plus utiliser autant de mémoire cache. voudront échanger. Maintenant, si vous n'avez pas d'échange, la mémoire sera encore plus sollicitée et vous risquez même de perdre des tâches à la suite d'un manque de mémoire.

Swap tente d'améliorer la stabilité et les performances globales dans des situations telles que celle que vous avez décrite, en réaffectant certaines données allouées mais rarement utilisées en mémoire, libérant ainsi de la mémoire pour les données que vous utilisez. Ajouter swap, si vous n’en avez vraiment pas, vous aidera. Toutefois, en termes de performances, vous ferez beaucoup plus d’améliorations si vous achetez également plus de RAM, ou si vous en utilisez moins.

Sur un système sur lequel vous exécutez des ordinateurs virtuels mais que vous utilisez également sur un ordinateur de bureau standard sur l'hôte VM, vous ne voulez pas que vos ordinateurs virtuels utilisent toute votre mémoire vive, J'économiserais la moitié de votre RAM (jusqu'à 4 Go) pour l'hôte, étant donné que vous exécutez un logiciel sur l'hôte et que vous souhaitez qu'il soit réactif.

Notez également que les ordinateurs virtuels présentent des inefficacités inhérentes, non seulement parce que leur RAM est totalement séparée, ils ne partagent aucun cache ni aucune mémoire tampon, mais ils exécutent un système d’exploitation entièrement séparé sous plusieurs couches d’abstraction. Ainsi, vous pouvez toujours obtenir une meilleure efficacité si vous décidez d'exécuter quelque chose sur l'hôte plutôt que sur un VM - bien que si votre but d'utiliser des VM est d'utiliser d'autres systèmes d'exploitation, cela ne sera pas possible.

Existe-t-il un moyen de s'assurer que l'interface utilisateur reste réactive lorsque mon système est en déroute?

Lorsque la quantité de RAM que vous avez est un problème, tout ce que vous pouvez faire est seulement un hack - la vraie solution consiste à acheter plus de RAM (bien que dans votre cas, comme je l'ai mentionné, vous pourriez peut-être simplement allouer moins aux machines virtuelles).

Votre question est formulée en termes simples: vous souhaitez que l’interface utilisateur puisse continuer à fonctionner correctement même si IO est encombré. Cependant, c'est compliqué de répondre. Votre système déjà le fera au mieux de ses possibilités: les opérations qui ne nécessitent pas d'accès au disque ne seront pas retardées. Si votre "interface utilisateur est en train de bégayer", c'est parce que le processus particulier responsable de cette interface a besoin d'un accès au disque. Dans des situations de mémoire insuffisante et de disque dur, même quelque chose qui sera normalement trivial - comme lire une config de votre répertoire de base pour connaître vos préférences d'affichage - peut être lent en raison de l'épuisement du cache disque.

Je pouvais imaginer quelque chose comme un "Nice" pour mémoire (pour pouvoir utiliser Nice Chrome et ma machine virtuelle)

Il n'y a pas vraiment de "sympa pour mémoire". L'accès à la mémoire est si rapide que vous pouvez généralement l'ignorer pratiquement. Lorsque vous avez des problèmes, ce n'est pas la mémoire, c'est le disque, c'est le problème. Il y a un "ionice" à cause de cela. Bien que ce ne soit probablement pas ce que je recommanderais pour votre problème.

Un autre équivalent approximatif de "Nice for memory" est swap - vous ne pouvez pas contrôler la façon dont chaque processus est swappy mais le système fait un très bon travail pour déterminer quels processus vous utilisez activement et par conséquent une priorité plus élevée à respecter. RAM.

Mais comme je l'ai dit et comme règle d'or, si vous manquez de RAM, acheter plus RAM est la solution qui présente le moins de maux de tête et d'inconvénients.

2
thomasrutter