3 votes

Existe-t-il un moyen de spécifier des limites de mémoire pour des applications spécifiques dans MacOS ?

J'ai acheté un MacBook Pro de 32 Go parce que j'enseigne un camp d'entraînement logiciel et que je dois faire tourner plusieurs applications gourmandes en mémoire (vidéoconférence, idé, chat, navigateur avec de nombreux onglets, etc...) et mon MBA de 8 Go ne pouvait pas suivre.

J'ai vite constaté que certaines applications utilisent tout l'espace disponible, ce qui ne résout pas mon problème. J'ai toujours des problèmes de mémoire parce que certaines applications sont gourmandes en mémoire.

Existe-t-il un moyen de spécifier des limites de mémoire pour des applications spécifiques dans MacOS ?

4voto

Jose Chavez Points 645

Même si vous pouvez limiter la mémoire pour des applications spécifiques sous MacOS, vous n'obtiendrez pas le résultat escompté :

Le problème est que lorsque vous limitez la quantité de mémoire dont une application peut disposer, cela signifie concrètement que les programmes vont se planter lorsqu'ils atteignent cette limite.

Vous avez donc essentiellement le choix d'avoir des programmes qui se plantent ou de les mettre en pause lorsqu'ils atteignent la limite. Pour les mettre en pause, vous devez implémenter un programme pour le faire vous-même (pas très complexe, mais vous aurez besoin d'une certaine expérience en matière de script ou de programmation).

En termes simples, les limites de mémoire ne vont pas vous aider plus que le simple fait d'abandonner un ou deux de ces porcs lorsque vous avez besoin de faire autre chose.

MISE À JOUR : Dans les commentaires, vous avez écrit que cela ne vous dérangerait pas de faire planter des applications, et que vous êtes un ingénieur logiciel accompli, donc que vous seriez capable de faire du scripting/programmation vous-même.

Dans ce cas, vous pouvez mettre en œuvre une limite de mémoire de différentes manières :

Version la plus simple

Le plus simple serait de créer un petit script qui exécute périodiquement ps x -o rss -p $PID | tail -n1 pour observer l'utilisation de la mémoire de l'ID du processus indiqué. Ceci saisit la taille de l'ensemble résident, mais vous pourriez, pour une raison étrange, vouloir utiliser vsz au lieu de rss pour obtenir la vsize à la place.

Si l'utilisation de la mémoire observée est supérieure à un seuil que vous spécifiez, vous pouvez alors mettre fin au processus. La meilleure façon de le faire est d'exécuter une commande telle que kill -15 $PID et ensuite après un certain temps kill -9 $PID . Le premier est SIGTERM ce qui indique au processus de commencer à se fermer de lui-même. Ce dernier est SIGKILL qui tue le processus s'il refuse de se fermer de lui-même.

Version avancée

Une version un peu plus avancée consiste à créer un petit programme enveloppe qui appelle setrlimit() pour fixer une limite au processus, comme par exemple RLIMIT_DATA (taille maximale du segment de données) ou RLIMIT_RSS (taille maximale de l'ensemble des résidents). Ensuite, il doit appeler execl() ou similaire pour lancer l'application pour laquelle vous souhaitez limiter l'utilisation de la mémoire.

Notez qu'il y a également la possibilité d'utiliser ulimit au lieu de rlimit Cependant, d'après mon expérience, ces limites ne sont pas respectées sur les MacOS actuels.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X