Pourquoi OS X utilise le swap alors qu'il y a beaucoup de «mémoire inactive»?


22

J'utilise OS X depuis quelques mois (Lion et maintenant Mountain Lion). J'ai 8 Go sur ma mini et presque tous les jours maintenant ça se rapproche de ça. Sur une machine Windows 7 avec 8 Go, je n'ai jamais eu ce genre de problème. Quoi qu'il en soit, j'ai lu sur le net, que la mémoire inactive est le cache d'application des programmes récemment fermés et peut être utilisée pour une réouverture plus rapide.Et cette mémoire inactive peut être libérée dans une nouvelle application si nécessaire. Il n'est pas publié. Au lieu de cela, OS X commence à échanger. Donc ma question est pourquoi OS X utilise le swap quand il y a beaucoup de "mémoire inactive"? Voici un écran qui montre ce que je veux dire:

entrez la description de l'image ici

J'espère vraiment qu'il y a un moyen de faire OS X pour utiliser ces 2,69 Go avant de commencer à échanger.


Oui, c'est étrange. S'agit-il d'une seule application occupant toute la RAM? Peut-être qu'OSX limite les applications à ne pas utiliser plus de 80% de RAM à la fois. Inactif ne signifie pas pour autant qu'il soit gratuit. Il est réservé à quelque chose.
Piotr Kula

Non - de nombreuses applications, navigateurs, Eclipse et etc. D'après ce que j'ai lu, il est gratuit car il s'agit d'un cache d'applications récemment fermé.Il devrait y avoir un moyen de faire en sorte qu'OS X ne
permute

Je peux le reproduire à tout moment et faire un écran du moniteur d'activité si nécessaire
Balchev

2
La mémoire inactive n'est pas de la mémoire disponible.
kinokijuf

2
@kinokijuf, il doit cependant agir comme mémoire libre lorsqu'il n'y a plus de mémoire libre. Si la mémoire inactive est toujours permutée sur le disque de toute façon, il n'y a aucun intérêt à faire la distinction active - inactive.
Pieter

Réponses:


18

L'échange s'est apparemment produit lorsque les pages RAM inactives étaient réellement actives.

( Mise à jour: comme cela a été clarifié dans un commentaire, ce n'est pas votre cas. Les personnes ayant le même problème peuvent donc passer à la règle horizontale .)

C'est-à-dire que vous aviez de nombreux programmes en cours d'exécution et que le noyau a échangé quelques pages. Ensuite, vous avez quitté certains programmes. Le noyau marque leurs pages RAM comme inactives. Mais il ne remettra pas les pages dans la RAM tant que ces pages ne seront pas nécessaires. Il en résulte des pages inactives et permutées.

Pourquoi ne pas échanger les pages de manière préventive? Parce que ce serait parier contre toute attente: à long terme, vous perdez. Pensons à un exemple simplifié: deux programmes A et B qui ne tiennent pas en même temps dans la RAM. Le programme A est toujours en cours d'exécution et toutes les pages permutées appartiennent à A. Le programme B a quitté et toutes les pages inactives appartiennent à B.

Si le noyau échange de manière préventive les pages de A et immédiatement après:

  • le programme A doit accéder à ses pages -> Vous gagnez - les pages sont déjà dans la RAM.
  • vous lancez à nouveau B -> Vous perdez - vous avez "payé" le coût pour ramener les pages en RAM et maintenant vous devez les renvoyer.
  • vous lancez un autre programme C -> Vous perdez si A et C ne rentrent pas dans la RAM en même temps. S'ils correspondent, vous êtes égal.

Tenez également compte du fait que la permutation (écriture sur le disque) est plus coûteuse que la permutation (lecture à partir du disque). Ce qui rend ce "pari" encore plus peu attrayant.

En bref: faites confiance à votre noyau et n'essayez pas de le déjouer.


Mise à jour: il s'avère que la mémoire inactive ne fonctionne pas car l'article Utilisation du moniteur d'activité pour lire la mémoire système a conduit de nombreuses personnes à croire que cela fonctionne. La définition donnée dans l'article pour la mémoire inactive est correcte:

Ces informations sont dans la RAM mais elles ne sont pas activement utilisées, elles ont été récemment utilisées.

Mais l'exemple suivant est totalement trompeur et trop simplifié (comme mon exemple pour être franc):

Par exemple, si vous avez utilisé Mail puis l'avez quitté, la RAM que Mail utilisait est marquée comme mémoire inactive. La mémoire inactive peut être utilisée par une autre application, tout comme la mémoire libre. Toutefois, si vous ouvrez Mail avant que sa mémoire inactive ne soit utilisée par une autre application, Mail s'ouvrira plus rapidement car sa mémoire inactive est convertie en mémoire active, au lieu de la charger à partir du lecteur plus lent.

J'ai cherché plus de ressources en ligne et je suis arrivé à ce fil dans la liste de diffusion du noyau darwin qui est assez informatif. Citant Jim Magee (de l'équipe Darwin - je pense):

En bref, le système VM du noyau lorsqu'il traite les analyses de pression de la mémoire à travers les pages en cours d'utilisation et essaie de les maintenir dans un équilibre entre les marquages ​​actifs et inactifs. Les pages inactives sont analysées pour être réutilisées lorsqu'elles sont marquées comme inactives. S'ils ont été réutilisés, ils sont marqués comme actifs et une autre page doit passer de l'état actif à l'état inactif pour détecter si elle est en cours d'utilisation. Donc, inactif est un terme impropre. C'est un raccourci pour "éventuellement inactif, essayons de vérifier cela."

Comme vous l'avez découvert, l'équilibre interne que nous recherchons (actuellement) est d'environ 2/3 actif contre 1/3 inactif ...

Cela explique le comportement que vous observez. C'est-à-dire que les pages inactives que vous voyez appartiennent à des programmes en cours d'exécution qui n'ont pas été récemment utilisés. Ainsi, lorsque vous lancez un nouveau programme, les pages inactives sont permutées. En même temps, les pages d'autres programmes sont marquées comme inactives pour maintenir le rapport 2/1 entre actif et inactif.

Le fil contient également quelques suggestions pour en savoir plus sur les internes de Darwin. Il y a aussi quelques suggestions au cas où vous commenceriez à étudier l'utilisation de la mémoire à cause de problèmes de beachball (qui n'ont généralement pas grand-chose à voir avec cela).

La conclusion reste la même: faites confiance à votre noyau et n'essayez pas de le déjouer. :-)


1
Salut, je ne suis pas sûr que vous me compreniez - je parle pour le moment où vous avez comme 100-200 Mo de mémoire libre, 2,6 Go "inactif" et démarrez un autre programme, disons eclipse, xcode et etc. Ce qui se passe c'est qu'il n'utilise pas ceux 2,6 Go et à la place échanger de la mémoire active. Je ne sais pas si vous comprenez ce que je veux dire. Quoi qu'il en soit, merci pour votre réponse
Balchev

C'est clair maintenant. Vous devriez peut-être ajouter l'exemple de ce commentaire à votre question. J'ai ajouté des informations supplémentaires qui, je pense, fournissent une explication adéquate de ce que vous observez.
m000

Je ne sais pas si je modifierai ma réponse d'origine. Cela explique un cas différent (car je n'ai pas reçu votre question juste avant votre commentaire) et peut dérouter les gens.
m000

Ainsi que Radoo le dit dans son commentaire - "OS X est une bête affamée". Je ne m'attendais pas à ce qu'OS X ait autant de mémoire (Lion et maintenant Mountain Lion) et c'est pourquoi je pensais qu'il y avait quelque chose de louche ici.Merci pour votre réponse mise à jour.
Balchev

6

Vous pouvez désactiver la pagination en toute sécurité si vous avez suffisamment de RAM.

Essayez ces commandes.

sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist
sudo rm /private/var/vm/swapfile*

Redémarrez ensuite et vérifiez que le processus dynamic_pager n'est plus en cours d'exécution.

Assurez-vous qu'aucun fichier d'échange n'a été créé dans /private/var/vm/.

Pour réactiver, essayez les commandes suivantes:

sudo launchctl load -wF /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist

Vous pouvez également désactiver Spotlight pour libérer plus de RAM et réduire l'activité du disque. Les commandes suivantes sont utilisées pour désactiver et activer Spotlight.

sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.metadata.mds.plist
sudo launchctl load -wF /System/Library/LaunchDaemons/com.apple.metadata.mds.plist

J'ai lu sur le net que la désactivation du swap sur OSX peut entraîner un comportement inattendu du système et des plantages. Est-ce vrai?
Balchev

Lorsque votre mémoire est faible, elle le fera. Mais si vous avez suffisamment de mémoire, comme 8 Go, cela ne causera aucun problème.
arundevma

2
"Assez de mémoire, comme 8 Go" - désolé, c'est trop mignon… :)
Bombe

0

Vous ne pouvez pas faire grand-chose. Pourquoi ça fait ça? Parce que c'est comme ça que fonctionne OS X. La partie intéressante est de savoir comment la mémoire occupée s'agrandit à chaque sommeil du Mac.

Que pouvez-vous faire:

  1. Mettez à niveau la RAM.
  2. Exécutez la commande sacrée " purge " pour effacer la plupart de la mémoire inactive, chaque fois que cela est nécessaire.
  3. Désactiver le swap http://osxdaily.com/2010/10/08/mac-virtual-memory-swap/

Salut, j'ai utilisé la commande de purge, mais la plupart du temps, elle libère moins de la moitié de la mémoire "inactive". J'ai lu que la désactivation du swap sur OSX peut entraîner un comportement inattendu du système et des plantages. Je suis donc allé avec 1) Maintenant, ça va avec 16 Go :) Juste cette quantité de mémoire utilisée pour les serveurs, pas pour les ordinateurs de bureau :) Merci pour votre réponse
Balchev

J'ai 16 Go sur mon Macbook pro, ce n'est pas un serveur. :) Il est bien connu que OS X est une bête affamée en matière de mémoire, en particulier lorsque plusieurs applications moyennes / grandes sont utilisées en même temps. J'ai réussi à remplir tous ces 16 Go sans ouvrir de logiciel d'édition d'image / vidéo, juste quelques jeux et petites applications. La mémoire inactive était d'environ 4 Go ...

Vous devez également prendre en compte que de nombreuses applications OS X sont déjà en 64 bits. Les applications 64 bits allouent plus de mémoire que les applications 32 bits, en raison de l'augmentation de l'espace d'adressage.

0

Le système fonctionne comme prévu. Même lorsqu'il n'y a pas de pression mémoire, il peut être judicieux d'écrire des pages qui ne peuvent pas être supprimées mais qui n'ont pas été récemment utilisées pour permuter lorsque le système n'est pas occupé. De cette façon, s'il y a une pression de mémoire plus tard, ces pages peuvent être supprimées de la RAM sans avoir à les écrire d'abord pour les échanger pendant que le système est occupé.


1
c'est mal conçu alors. il est trop agressif dans l'allocation et l'utilisation de l'espace de swap.
mendota

Pourquoi est-ce important? S'il y a beaucoup de swap gratuit, l'allocation d'espace de swap est inoffensive. Cela est particulièrement vrai lorsque le swap ne contient pas les données nécessaires, car la suppression des allocations est gratuite. C'est une bonne conception - faire un travail acharné quand il est presque gratuit plutôt que de le reporter plus tard lorsque le système est sous pression.
David Schwartz

2
c'est une mauvaise conception quand il est trop agressif et provoque des bégaiements ou des blocages dans les programmes qu'il marque par erreur comme inactifs et commence à passer au swap. en attendant, il y a encore huit concerts gratuits en RAM: /
mendota

Je suis d'accord avec mendota. Une fois que j'ai complètement désactivé le swap, mon système fonctionne correctement sans aucun bégaiement.
Anton Kuzmin

@AntonKuzmin Cela n'a vraiment rien à voir avec le sujet de cette question. Si vous lisez cette question, elle ne dit rien du tout sur le bégaiement ni sur aucun problème.
David Schwartz
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.