La mémoire inactive n'est-elle pas un gaspillage de ressources?

87

Je cherche des explications sur l'utilisation de la mémoire sur ma machine, en particulier à la lumière de l'exemple de la capture d'écran ci-dessous:

Utilisation de la mémoire

Je comprends ce qui est Freeet Activesignifie
Mais quelles sont les significations de Wiredet Inactive?

Surtout inactive, pourquoi utilise-t-il autant de mémoire pour quelque chose que nous n'utilisons pas?

GusDeCooL
la source

Réponses:

142

La mémoire inactive a un horrible rap en raison d'un nom de merde. Il aurait dû s'appeler quelque chose du genre "fais ton Mac vraiment rapide la deuxième, troisième et quatrième fois qu'il fait la même tâche" mémoire, sauf que c'est un nom affreux, aussi.

Apple a réécrit le moniteur d'activité lorsqu'il a introduit plusieurs nouvelles fonctionnalités et ajouté de la mémoire compressée, de sorte que certaines de ces mesures ne s'appliquent plus aux macOS qui n'affichent pas «Mémoire inactive», mais cela s'applique également à la gestion de la mémoire Mac OS X, comme indiqué dans la documentation correspondante. version du moniteur d'activité: https://support.apple.com/fr-fr/HT201538

Voici comment j'ai expliqué les choses à quelqu'un de nouveau sur le concept de mémoire virtuelle sous OS X:

  • Wired : le système ne peut pas fonctionner sans cette quantité de RAM (jamais permutée)
  • Actif: les programmes utilisent réellement cette mémoire maintenant ou dans les dernières secondes
  • Inactif: choses que les programmes ont lues sur le disque lent ou ailleurs et qui disent ne plus jamais avoir besoin. Les ingénieurs le savent mieux, vous reviendrez sur Facebook dans quelques minutes ou relancerez Word après l'avoir quitté. Les mêmes choses se produisent encore et encore sur des ordinateurs.
  • Free: RAM totalement gaspillée - le système n'a besoin que d'un ou deux Mo d'espace libre pour répondre aux demandes d'allocation à court terme. Pour les allocations les plus importantes, il utilise simplement une partie de la RAM inactive en l’affectant à actif / câblé et en supprimant les informations sur ce qu’elle conservait auparavant.

Le problème se pose lorsque Free + Inactive est inférieur à environ 1/3 du total, ce qui peut ralentir considérablement les choses.

La mémoire inactive est un bonus de vitesse / RAM double usage. Il sert gratuitement à tout moment, mais rend également les tâches répétitives beaucoup plus rapides si le système devine correctement et conserve quelque chose dans la RAM que vous ferez de nouveau. C'est plus rapide que la mémoire échangée puisqu'elle est déjà chargée dans la RAM et accélère les choses lorsque le système de mémoire virtuelle fait de bonnes suppositions.

Lorsque vous vous demandez si la RAM pose problème, plutôt que de regarder chacune des 4 catégories (5 si vous comptez l'échange actif), vous pouvez associer W + A au ralentissement d'un nouveau programme / tâche et à F + I pour accélérer une nouveau programme / tâche. Plus vous avez de F + I, plus vous pouvez lancer de nouveaux programmes avant que la RAM ne doive compter sur l’échange pour jongler avec la mémoire allouée.

Vous n'avez pas vraiment besoin de savoir comment fonctionne le swap puisque je l'ai mentionné ci-dessus. Fondamentalement, lorsqu'un programme est inactif et n'a pas été utilisé pendant des jours (ou des heures), le système écrira cette RAM sur le disque dur plutôt que de tuer le programme. Cela permet au système de mélanger et de gérer toutes sortes de choses liées à la gestion de la mémoire et évite à chaque programme d'avoir à se parler pour décider qui utilisera moins de mémoire lorsque le système sera épuisé.

Voici un exemple concret d'utilisation de la RAM inactive.

  1. Fermez toutes les applications et assurez-vous que les deux applications que nous testons ne sont pas configurées pour démarrer automatiquement lorsque vous vous connectez.
  2. Redémarrez votre Mac
  3. Allumez votre moniteur d'activité et observez la mémoire vive
  4. Temps de démarrage de l'application A (MS Word serait un bon choix)
  5. Quitter A
  6. Temps nécessaire au démarrage de l'application B (quelque chose d'Adobe serait également bon)
  7. Quittez B
  8. Temps combien de temps le deuxième lancement de A prend
  9. Quitter A
  10. Deuxième lancement de Time B.
  11. L'heure A commence pour la troisième fois avec B en cours d'exécution.

Vous devriez voir des accélérations spectaculaires pour le deuxième / troisième lancement car le système apprend à garder en RAM inactive ce que ces deux applications doivent exécuter.


Dans votre cas, le total de Wired et d'Active signifie qu'un échange sur disque est probable et que votre Mac n'est pas aussi rapide qu'il pourrait l'être car votre RAM inactive n'est pas assez grande pour stocker tout ce que vous pourriez avoir besoin de réutiliser. . Si vous avez un lecteur SSD rapide, cette allocation de mémoire vive est correcte et au lieu de commencer à ralentir une fois que moins de la moitié de votre mémoire vive est égale à F + I, vous pouvez réduire le résultat à 1/4 de la mémoire totale de la mémoire vive. + I avant de voir la lenteur notable. Ces instructions sont générales et vous aurez intérêt à regarder vm_stat 15ou à un intervalle similaire pour vous assurer que l’échange de volume continu et moyen ne ralentit pas votre Mac.

bmike
la source
9
Wow réponse très complète pour le nouveau venu comme moi. Merci beaucoup, très apprécié :)
GusDeCooL
6
Yup - Je réponds pour tout le monde - une fois pour toutes, les gens peuvent le modifier pour le rendre meilleur et vous obtenez votre réponse. Idée plutôt cool pour un site Web où les gens peuvent venir et poser des questions intéressantes. :-)
bmike
3
Hou la la! Belle réponse!
duci9y
3
Je souhaite qu'ils l'expliquent comme ça dans ma classe de système d'exploitation.
Styfle
2
@cvsguimaraes la purge n’est pas instantanée; chat.stackexchange.com/transcript/message/12107920#12107920
Graham Perrin
6

Le chiffre qui est le plus important pour déterminer si votre Mac est «stressé» en mémoire est le chiffre «Page outs». Dans Activity Monitor, dans Mavericks, ceci n'est plus affiché, ils affichent maintenant les informations dans 'Swap Used:'.

Les sorties de page signifient que le système d'exploitation a déterminé qu'il n'y avait pas assez de RAM disponible pour exécuter toutes les applications et tous les processus demandés. Ce qu’il fait alors, c’est que les pages sont insérées sur des parties de la mémoire qui ne sont pas activement utilisées. Cela signifie que la mémoire RAM (rapide) est remplacée par la mémoire du disque dur (lente). Si cela se produit souvent parce que de nombreuses applications sont en cours d'exécution et que l'utilisateur passe d'une application à une autre, il y aura beaucoup de sorties de page et de pages d'entrée.

Si vous constatez une augmentation des pertes de pages, vous devez prendre des mesures.

FromOZ
la source
4

Le problème sur mon Mac est que la mémoire "inactive" ne semble jamais être purgée à moins que je ne fasse une purge manuelle dans la fenêtre de commande. Cela s'accumule et s'accumule jusqu'à ce qu'une fenêtre contextuelle me demande de tuer les applications. Même après avoir détruit toutes mes applications, j'ai toujours trop de mémoire inactive pour exécuter quoi que ce soit. Ainsi, sur mon Mac exécutant la dernière version de Mountain Lion, il n’est PAS vrai que la mémoire inactive soit récupérée lorsque la mémoire disponible est faible. Soit j'ai une application quelque part qui a verrouillé une partie de la mémoire inactive qui n'est jamais libérée, ou l'iOS contient un bogue. (J'ai 8 Go de mémoire physique ... ça devrait suffire!)

Ernie
la source
2
Je suis avec vous, Ernie ... sous Mac OS 10.6 et 10.7 sur MacBook Pro et Mac Pro, une mémoire inactive va se loger, et le système d'exploitation va commencer à permuter (en fonction de "Page Ins" et "Page Outs") et le système va s'arrêter. La mémoire inactive ne semble jamais être récupérée. Je dois utiliser «purge» pour récupérer la mémoire inactive et réactiver mon système.
Eric
2
D'où vient cette fenêtre popup? Quelle est la situation de mémoire telle que rapportée par vm_statquand cela se produit? Qu'est-ce qui vous rend tellement sûr qu'il peut y avoir "trop" de mémoire inactive "pour exécuter quoi que ce soit"? En ce qui me concerne, ce sont tous des ouï-dire qui n'ont aucun fondement dans le code, vous le savez, ils fonctionnent dans le noyau.
Kuba Ober
2
Votre allocation de mémoire ressemble-t-elle à ce que Gus a présenté? Nous parlons ici d'un gigaoctet câblé et d'un gigaoctet et demi actif. La ration inactive / libre me semble bien dans cette situation. Peut-être pourriez-vous poser une deuxième question détaillant votre situation dans laquelle les choses se détériorent?
bmike
2

Merci à toutes les affiches et commentateurs, cela a été un fil instructif et utile pour moi. Ma récente expérience pourrait être utile à quelqu'un. J'utilise mon Mac Mini avec OS X10.8.1 et avec une RAM de 16 Go entièrement pour des logiciels de prototypage qui seront exécutés ailleurs. Je peux vous assurer que je ne "reviendrai pas sur Facebook dans quelques minutes ou ne relancera pas Word après l'avoir quitté". Je le fais plutôt sur mon macbook.

Ma tâche consistait à rassembler une grande quantité de données, les entrées / sorties prenant beaucoup de temps, l'idée était donc de lire un bloc de données aussi grand que possible en un seul coup, de le traiter ensuite, puis de l'écrire sur le disque. , puis répétez le processus jusqu'à la fin, ce qui prend quelques heures. Ce que je vois, c’est que chaque fois que je lis dans un nouveau bloc de données, la mémoire inactive saute - je suppose que l’intelligence artificielle du système suppose que je pourrais vouloir utiliser le vieux bloc à nouveau, ce que je ne fais pas - et le disque libre. la mémoire tombe.

Après quelques itérations de ce processus, la mémoire disponible est réduite à quelques Mo, la mémoire inactive libère quelques Mo supplémentaires, puis, après quelques minutes de conversation entre mémoire libre et inactive, la mémoire inactive est libérée. quelques Go à la fois. Tout est comme décrit par @bmike, et vm_stat 15 et Activity Monitor affichent 0 sortie de page.

Sauf peut-être pas tout à fait. Plusieurs fois, les choses se sont déroulées sans encombre, je me suis mis à boire un café ou à dîner, mais je ne surveille pas le processus. Ce qui ne devrait pas arriver se produit. Le processus élimine soudainement une tonne de pages-pages et ralentit considérablement. Déterminez que c'est probablement mon code de merde qui est à l'origine du problème, mais j'aimerais pouvoir désactiver la mémoire inactive, simplement pour éliminer cette source de variabilité. Est-ce brisé? Je ne dirais pas du tout, mais je dirais que je suppose que la gestion de la mémoire n'est pas optimisée pour mon cas d'utilisation.

utilisateur100345
la source
0

Mémoire inactive utilisée par les applications récemment actives et fermées. OS X la garde réservée au cas où l'utilisateur voudrait ouvrir le programme à nouveau. Dans ce cas, OS X n'a ​​pas besoin de déplacer la mémoire qui accélère les performances. Si vous ne rouvrez pas le programme, après un certain temps, la mémoire des inactifs sera libérée ou déplacée. (C)

Cette fonctionnalité est intéressante lorsque vous disposez de beaucoup de RAM, mais lorsque ce n’est pas le cas, c’est assez ennuyeux. En fait, tout est une affaire de pomme. Lorsque vous avez un gadget puissant ou un Mac, tout est cool, mais lorsque votre appareil vieillit, toutes les fonctionnalités le ralentissent.

Donc, vous devez utiliser des astuces spéciales pour le gérer.

Pour la mémoire inactive, il existe une commande purgepour la libérer.

A. Shulev
la source
-3

En gros c'est cassé. La RAM inactive doit être "purgée" automatiquement lorsque la RAM libre est faible. A quoi sert de retenir la RAM pour les applications précédemment ouvertes en espérant que l'utilisateur l'ouvrira à nouveau? Le fait que la RAM libre soit faible indique que les applications ACTIVE existantes risquent de ne pas disposer de suffisamment de RAM et sont en train de permuter MAINTENANT. Conserver des Go de RAM pour des applications fermées est tout simplement stupide. Selon la propre description d'Apple, la RAM inactive doit être purgée ou empruntée automatiquement lorsque la mémoire RAM disponible est faible. Ce n'est clairement pas le cas.

éveillé
la source
3
Les systèmes de mémoire virtuelle génèrent de grandes quantités de RAM libre. Lorsqu'un programme demande une allocation de mémoire, le noyau crée plus de mémoire virtuelle et la transmet comme un bonbon. Ce n'est que lorsqu'un programme remplit cette mémoire avec des données réelles que le système doit libérer de la mémoire vive pour cette opération. Cette "pièce" tire de la mémoire libre puis inactive - et le délai de libération de la mémoire inactive est extrêmement petit. La purge que vous décrivez correspond exactement à ce qui se passe. Cela signifie simplement que le système doit effectuer le travail de purge dès le début lorsque le système est paresseux et ne fonctionne que si nécessaire.
bmike
@bmike Mais cela ne signifie-t-il pas que, lorsqu'il ne reste plus de RAM libre et que je lance une nouvelle application, la partie inactive de la RAM diminue et qu'active augmente? Ce n’est clairement pas le cas et d’après mon expérience, le système devient extrêmement lent chaque fois qu’il n’ya plus de bélier libre, bien qu’il y ait des giga-octets de bélier inactif. Le système semble préférer échanger un disque avant d’envisager de réutiliser un ordinateur RAM inactif.
codingFriend1
4
@ codingFriend1 Soyons précis - combien de pages libres vm_statconsidérez-vous comme "plus de RAM libre"? Lorsque le Mac est "lent", à quoi servent les comptes de pages entrantes et sortantes vm_stat 1? Chaque fois que je regarde ceci sur un système à problème, j'aime bien avoir à vm_stat 15courir dans une fenêtre de terminal (ou à me connecter au système de fichiers) afin de savoir exactement quelle est l'activité de pagination pour décider si / quand je vais ajuster des choses comme téléavertisseur Cet exemple a 100 Mo de RAM libre, il est donc peu probable que ce soit même sous une pression de pagination.
bmike
-4

La mémoire inactive, par essence, accélère l’ouverture des processus précédemment fermés. Si vous constatez que le système d'exploitation Mac prend trop de mémoire, vous n'avez pas vraiment besoin de la douzaine d'onglets que vous avez ouverts sous Safari ou Chrome, utilisez simplement la commande "purge" du terminal. Sous OS X, Mavericks utilise à la place «sudo purge» (vous devrez entrer votre mot de passe). Cela vous permet de gagner de précieuses secondes lorsque vous avez besoin d'ouvrir à nouveau quelque chose, mais si vous voulez jouer à un jeu exigeant en RAM ou ouvrir une application gourmande en RAM, je vous suggère d'utiliser la commande purge.

Kaness K
la source
2
Comment cela diffère-t-il des autres réponses?
user151019