Citation

"La science, c'est ce que le père enseigne à son fils. La technologie, c'est ce que le fils enseigne à son papa." - Michel Serres, Philosophe

jeudi 28 février 2013

A mort le swap sous Mac OS X ou comment gérer sa mémoire vive

Un Mac peu garni en mémoire vive et utilisant des logiciels de traitement d'image (comme Adobe Photoshop) et ou de compositing (comme Adobe After Effects) aura tendance à très vite saturer ses barrettes de RAM.

Mac OS X est plutôt un bon gars, il ne se contente pas de vous limiter dans votre travail avec la seule quantité de mémoire dont vous disposez physiquement... toujours dans l'espoir de rendre votre "expérience utilisateur Apple" la plus agréable possible, il veut vous éviter à tout prix un plantage de votre application (et la perte des modifications du fichier sur lequel vous êtes en train de travailler), il préfère donc vous ralentir que de vous dire "stop" de façon brutale. Une fois les barrettes remplies, Mac OS X "dépasse les bornes" et se met à utiliser automatiquement une partie de votre disque dur système comme un réservoir de mémoire vive (que l'on va plus justement appeler mémoire virtuelle dans ce cas précis), le système se met à faire du swap ! Ça parait cool dit comme ça... ça vous fait plus de mémoire d'un coup ! Surtout qu'un disque dur a très souvent une capacité bien plus importante que celle disponible sur un petit jeu de barrettes (globalement un ordinateur est vendu avec 4 à 8 Go de mémoire vive et un disque dur en contenant 100 à 200 fois plus !)

Une barrette RAM brille par la facilité et la rapidité d'accès aux données...
mais elle souffre souvent d'une trop faible capacité !
Le problème est que cette mémoire virtuelle n'est donc plus logée sur les barrettes natives de l'ordinateur qui sont souvent bien plus véloces en terme de débit brut que le disque dur... mais surtout où les données éparpillées dans tous les coins sont accessibles de manière bien plus souple et fluide. Enfin un processeur d'ordinateur accède constamment à la mémoire vive, échange des tas de données avec les barrettes toutes les secondes... et voilà donc votre disque dur qui va devoir jouer ce rôle, lire et écrire constamment, souvent de minuscules portions de fichiers ! Si vous disposez d'un disque SSD véloce, vous pouvez être relativement tranquille et au pire ressentir un ralentissement acceptable de votre système... mais si vous disposez d'un disque dur à plateaux, les choses peuvent grandement s'envenimer et vous pouvez soudain commencer à entendre ce dernier gratter comme un malade ! Sous Mac OS X la petite roue colorée peut faire son apparition à la moindre de vos actions... et l'ordinateur devenir plus lent qu'un modèle sorti 15 ans avant lui !

Pire encore, vous pouvez risquer un crash, votre disque dur trop sollicité dans tous les sens lâche l'affaire, une des têtes de lecture/écriture s'écrase sur un des plateaux, arrache des particules magnétiques et le préjudice peut-être si important que le disque dur peut mourir sur place... ou "moindre mal", vous faire perdre des fichiers, notamment ceux essentiels au système et donc au redémarrage de la machine ! Ce n'est pas de la science-fiction, je l'ai vécu, c'est ce qui m'est arrivé il y a moins d'un an sur un Mac Pro : mémoire vive pleine, activation automatique du swap, disque dur qui s'affole, ralentissements, gel de la machine, crash du disque puis redémarrage impossible. Heureusement une sauvegarde Time Machine m'avait sauvé à l'époque et m'avait permis de me remettre en selle moins de 12 heures plus tard en ne perdant que quelques plumes... mais le mal avait bel et bien été fait !

Si vous disposez d'un peu de sous à investir dans votre évolution matérielle, il est possible que vous puissiez étendre la mémoire vive de votre ordinateur (d'autant que les offres commerciales sont à prix bas en ce moment - voir les prix chez un revendeur comme Crucial par exemple - et que le coût des barrettes risque d'augmenter dans les semaines qui viennent à cause d'un déséquilibre entre l'offre et la demande).

Si vous n'avez aucun budget pour ce type d'évolution matérielle, il vous reste des solutions logicielles (gratuites !). Pour commencer certaines applications très gourmandes vous offrent parfois la possibilité de purger la mémoire utilisée en interne alors que l'application est ouverte, c'est ce à quoi il faut penser en premier, par exemple dans After Effects il faut passer par le menu "Edition / Purger / Toute la mémoire" pour vider tous les caches qui s'accumulent lors de son utilisation... les résultats en terme de mémoire libérée peuvent être spectaculaires.

Le premier réflexe dans la gestion de votre mémoire vive est de purger
la mémoire utilisée par votre application... quand elle vous le permet !
Cette possibilité s'est avérée vitale pour moi sur des Mac disposant de peu de mémoire vive, After Effects en étant un très gros consommateur avec ses prévisualisations vidéo ! Mais toutes les applications de ne vous offre pas cette opportunité... il vous reste alors 2 solutions, plus générales :

- visualiser et prévenir l'augmentation d'utilisation de mémoire vive pour empêcher toute saturation
- désactiver le swap ou l'utilisation de mémoire virtuelle sur le disque (avec un risque de plantage)

Pour la première solution, il existe (entre une centaine d'autres) une petite application simple et gratuite sur le Mac App Store, "Memory Clean" (cliquez ici pour accéder à sa page et au lien de téléchargement). Une fois installée, une petite icône fait son apparition en haut à droite de votre barre de menu, d'un coup d'œil vous pouvez savoir combien il vous reste de mémoire libre et en un premier clic vous pouvez savoir comment votre mémoire est organisée... enfin en un second clic vous pouvez libérer la mémoire inactive de votre Mac et la rendre disponible, ce qui, si l'opération est faite avant l'amenuisement total de la mémoire libre, permettra à votre Mac d'éviter le piège du swap !

Mémoire vive libre (947 Mo) avant que Memory Clean n'intervienne...
... et mémoire vive libre juste après (9,65 Go) ! Mon Mac vient de décupler sa mémoire libre !
Bien sûr il n'y a pas de magie là-dedans, vous ne pourrez jamais obtenir plus de mémoire que vous en en possédez réellement sur vos barrettes... mais Memory Clean joue surtout sur la mémoire dite "inactive". En fait, lorsque vous lancez une application, cette dernière s'octroie une quantité de mémoire vive de manière arbitraire, dans cette quantité il n'y aura qu'une part réellement utilisée (plus ou moins importante en fonction des types de fichiers que vous allez ouvrir), la part de mémoire inutilisée sera considérée comme "inactive". Memory Clean, en lançant sa procédure de purge par le biais du bouton "Clean Memory", demande au système une quantité colossale de mémoire, Mac OS X s'exécute alors et lui en donne le plus possible, notamment en puisant dans la mémoire inactive de toutes les autres applications ouvertes... et aussitôt Memory Clean va redistribuer cette importante quantité de mémoire au système, la transformer en mémoire libre, vous mettant un peu plus à l'abris d'un éventuel swap !

Evidemment pour que ça ait un intérêt il faut toujours avoir un œil sur l'évolution de la mémoire libre pour la "remonter" à temps... mais Memory Clean offre cette possibilité puisque cette quantité est indiquée en temps réel juste derrière son icône, dans la barre de menu en haut à droite.

Memory Clean indique toujours la quantité de mémoire vive libre en temps réel
Par contre si Memory Clean devient impuissant à augmenter la mémoire vive libre malgré vos clics intempestifs sur le bouton "Clean Memory", c'est que votre Mac est vraiment tout près d'une réelle saturation... il est dans ce cas urgent de quitter une ou plusieurs applications gourmandes dont l'utilisation vous semble moins pertinente. Pour savoir quelles sont les applications les plus voraces, il vous suffit de vous rendre dans le dossier "Applications / Utilitaires" et de lancer l'application "Moniteur d'activité"... puis vous cliquez sur l'onglet "Mémoire système" en bas et enfin sur la colonne "Mémoire réelle" en veillant à ordonner les valeurs de la plus grande à la plus petite (flèche grise orientée vers le bas). Vous allez obtenir la liste des applications actuellement ouvertes et connaître pour chacune leur besoin en mémoire vive... les plus gourmandes en tête de liste.

Clin d'œil sur les applications les plus gourmandes en mémoire vive avec le Moniteur d'activité
Enfin, en dernier recours, si vous voulez absolument empêcher le swap sur votre machine (en risquant le plantage d'applications qui exigeraient plus de mémoire et se trouveraient donc face à un mur), vous pouvez passer par l'utilitaire OnyX (cliquez ici pour accéder à sa page et au lien de téléchargement). Cette application est un peu le couteau suisse qui manque à Mac OS X pour s'affranchir de certaines fonctions disponibles uniquement dans le Terminal. Ouvrez OnyX, cliquez sur l'onglet "Informations" puis sur le sous-onglet "Mémoire", tout comme dans Memory Clean vous avez un petit bouton "Purger" qui lui aussi vous permettra d'optimiser la mémoire vive libre (et si possible de l'augmenter)... mais surtout vous avez tout en bas un bouton "Désactiver" que l'on peut trouver nulle part ailleurs... qui vous permettra de désactiver la mémoire virtuelle !

Le bouton "Désactiver" en bas à droite va interdire l'usage de mémoire virtuelle à Mac OS X, adieu swap !
Cette opération est délicate, car comme l'indique OnyX très justement, "si vous avez moins de 4 Go de mémoire vive installée, il n'est pas recommandé de désactiver l'utilisation des fichiers d'échange de la mémoire virtuelle, car les applications peuvent se bloquer". Bien sûr, vous risquez une saturation à empêcher le système de prendre ses aises au-delà des barrettes de RAM, un plantage d'application est à redouter, au pire un gel de Mac OS X... mais au moins jamais votre disque dur ne sera sollicité et jamais vous ne risquerez de rentrer dans ce flot ininterrompu de lectures/écritures pouvant générer des problèmes bien plus importants... notamment un endommagement matériel.

A vous de faire les choix qui s'imposent si votre machine active son swap trop rapidement et/ou si le swap vous ralentit de manière extraordinaire. Pour ma part OnyX m'a sauvé à plusieurs reprises sur un vieux Mac Pro qui avait très mal vécu sa mise à jour vers Mac OS X Lion (qui fait un usage beaucoup plus important de la mémoire vive et ne purge pas assez vite la mémoire inactive). Il existe des tas d'autres applications pour bien gérer la mémoire vive de son Mac et tout ce que nous avons vu ici est réalisable via des commandes dans le Terminal... mais voilà une manière d'aborder le problème de manière simple... et gratuite !

5 commentaires:

  1. Ou, pour ne pas installer d'appli tierce, un petit 'purge' en ligne de commande fera l'affaire. À mettre dans un cron ou un watch pour rigoler un peu :-)

    RépondreSupprimer
    Réponses
    1. Tout à fait d'accord ! :) Mais j'ai essayé d'éviter l'usage du Terminal... il fait peur à plein de monde ! ^^

      Supprimer
    2. Sans dire de bêtise, pour avoir purge, il faut avoir installer Xcode auparavant (pas auparavent !).

      Signé : un ancien zarfilmiques ! Olivier :D

      Supprimer
  2. Contrairement à une idée reçue, la mémoire libre ça ne sert strictement à rien, autant qu'elle soit occupée à quelque chose: du cache disque, du cache géré par l'application, swapper des processus qui ne font rien et serait bien mieux dans le swap que dans la mémoire centrale...

    Il me semble que quand l'application fourni à l'utilisateur un moyen de purger la mémoire qu'elle utilise c'est qu'elle est mal faite. La question qui vient immédiatement c'est: "si l'application fourni un moyen de purger la mémoire manuellement, pourquoi elle ne le fait pas elle même automatiquement quand elle sens qu'elle est en train de dépasser les bornes en terme d'utilisation de la mémoire virtuelle ?".

    Ce bouton de purge c'est un peu un aveu d'échec des développeurs !

    My 2 euros cents

    RépondreSupprimer