Un phénomène courant dans mon utilisation quotidienne (et plusieurs autres selon divers messages publiés sur Internet) d'OS X, le système semble devenir lent chaque fois qu'il n'y a plus de mémoire "libre" disponible. Soi-disant, cela est dû à un échange, car une activité de disque intense est apparente et que vm_stat rapporte de nombreuses pages invisibles. (Corrigez-moi de mal)
Cependant, la quantité de mémoire RAM "inactive" représente généralement environ 12,5% à 25% de toute la mémoire disponible (^ 1.) Lorsque la permutation commence / se produit / se termine.
Selon http://support.apple.com/kb/ht1342 :
Mémoire inactive
Cette information en mémoire n'est pas utilisée activement, mais a été utilisée récemment.
Par exemple, si vous utilisez Mail et que vous le quittez, la RAM utilisée par Mail est marquée comme mémoire inactive. Cette mémoire inactive est disponible pour ê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 charger Mail à partir du disque dur le plus lent.
La liste inactive contient des pages qui résident actuellement dans la mémoire physique mais n'ont pas été consultées récemment. Ces pages contiennent des données valides mais peuvent être libérées de la mémoire à tout moment .
Donc, fondamentalement: lorsqu'un programme a cessé, sa mémoire devient marquée comme inactive et devrait pouvoir être réclamée à tout moment. Néanmoins, OS X préférera commencer à extraire la mémoire du fichier d’échange plutôt que de réclamer simplement cette mémoire, à condition que la mémoire "Libre" devienne trop basse.
Pourquoi? Quel est l’avantage de ce comportement par rapport à, par exemple, la libération instantanée de la mémoire inactive sans même toucher le fichier d'échange? Certaines sources (^ 2.) indiquent qu'OS X rechercherait la mémoire "inactive" à permuter avant de la relâcher, mais cela n'a pas de sens maintenant de le faire si la mémoire peut être libérée de la mémoire à un moment donné ? L'échange est coûteux, la libération est bon marché, non?
Ce comportement peut-il être modifié en utilisant une préférence ou un hack connu? (De préférence, cela n'inclut pas la désactivation de swap / dynamic_pager et le redémarrage ...)
J'apprécie la commande de purge , ainsi que le concept de réparation des autorisations de disque pour forcer une partie de la mémoire libre, mais ce sont des moyens de forcer péniblement plus de mémoire libre que de réparer la logique de décision d'échange / de libération ...
Une question similaire a été posée ici: http://forums.macnn.com/90/mac-os-x/434650/why-does-os-x-swap-when/ et ici: http: //hintsforums.macworld .com / showthread.php? t = 87688 mais même si les points opérationnels ont été redemandés à la question principale, aucune des réponses n’y a répondu ...
^ 1. MISE À JOUR 17 mars 2012 Depuis que j'ai posté cette question pour la première fois, je suis passé de 4 Go à 8 Go de RAM installé et le problème persiste. La quantité de "Inactif" poinçon était de 0.5gb-1.0gb avant et est maintenant typiquement autour de 1.0-2.0GB quand permuter commence / se produit / se termine, c’est-à-dire qu’il semble qu’environ 12.5% -25% du ram soit conservé comme inactif par OSX la logique du noyau.
^ 2. Par exemple, https://apple.stackexchange.com/questions/4288/what-does-it-mean-if-i-have-lots-of-inactive-memory-at-the-end-of-a-workwork- jour :
Une fois que toute votre mémoire est utilisée (la mémoire disponible est égale à 0), le système d'exploitation écrit la mémoire inactive dans le fichier d'échange pour libérer de l'espace dans la mémoire active.
MISE À JOUR 17 mars 2012
Voici un aperçu des méthodes suggérées pour vous aider jusqu'à présent:
La commande de purge
"Utilisé pour rapprocher les conditions de démarrage initiales avec un cache de disque froid pour l’analyse des performances. Il n’affecte pas la mémoire anonyme allouée via malloc, vm_allocate, etc.".
Ceci est utile pour empêcher osx de permuter le cache disque (ce qui est ridicule de le faire en premier lieu), mais avec l'inconvénient que le cache disque est libéré, ce qui signifie que si le cache disque n'était pas sur le point d'être échangé, on se retrouverait simplement avec un cache de disque froid, affectant probablement les performances.
L' application FreeMemory et / ou la réparation des autorisations de disque pour imposer de la mémoire libre
N'aide pas à libérer de la mémoire, ne déplace que quelques gigaoctets de contenu de la mémoire de la mémoire vive au disque dur. En fin de compte, cela provoque de nombreux swap-ins lorsque j'essaie d'utiliser les applications ouvertes tout en libérant de la mémoire, car une grande partie de sa machine virtuelle est maintenant en swap.
Accélération de l' allocation d'échange à l'aide de dynamicpagerwrapper
Cela semble être une bonne chose à faire pour accélérer l'utilisation de swap, mais ne résout pas le problème du swap osx en premier lieu tant que la mémoire est inactive.
Désactiver le swap en désactivant dynamicpager et en redémarrant
Cela forcera osx à ne pas utiliser la permutation sur le prix du système suspendu lorsque toute la mémoire est utilisée. Pas une alternative viable ...
Désactiver l'échange à l'aide d' un DynamicPager piraté
Semblable à la désactivation de dynamicpager ci-dessus, certains extraits des commentaires du billet de blog indiquent qu'il ne s'agit pas d'une solution viable: "La mémoire inactive est élevée, comme d'habitude". "lorsque votre système manque de mémoire, tout le système se bloque ...", "si vous utilisez toute la mémoire du Mac, la machine se bloquera probablement"
En résumé, je ne connais toujours pas de moyen d'empêcher Mac OS X d'utiliser le swap lorsqu'il existe encore de la mémoire "inactive". Si ce n'est pas possible, peut-être au moins une explication explique-t-elle pourquoi osx préfère échanger la mémoire qui peut être libérée de la mémoire à tout moment ?