Comment limiter la quantité de RAM qu'un processus arbitraire peut prendre?

12

Disons que nous avons une machine OS X fonctionnant avec 4 Go de RAM. Est-il possible de le configurer de sorte qu'aucun processus ne puisse prendre plus de 3 Go, donc peu importe la façon dont la mémoire occupe un processus, il reste toujours de la mémoire pour que le système réponde?

Fomite
la source
6
Et ce serait contre-productif. L'allocation de RAM de microgestion n'est pas quelque chose autour duquel les OS sont conçus. La RAM libre est de la RAM gaspillée. Trop de choses proviennent de la mauvaise gestion supposée de la RAM d'OS X. La fermeture du moniteur d'activité et la poursuite de votre vie semblent être le meilleur remède.
8
@cksum Votre commentaire contient une énorme série d'hypothèses, dont la plupart sont fausses. Je n'essaye pas de soutenir la gestion de la mémoire du lecteur OS X. Ce que je suis en fait faire est d' essayer de savoir s'il y a un moyen de conserver suffisamment de fonctionnalités du système tout en testant un code qui se assez facilement dans un processus d' emballement. Parce que la RAM libre n'est pas de la RAM gaspillée si c'est ce qui vous permet de corriger les erreurs.
Fomite
3
Désolé, mais si votre question concerne la programmation (développement et test) d'applications, elle est hors sujet pour ce forum. Veuillez consulter la FAQ pour plus d'informations sur le type de questions ici: apple.stackexchange.com/faq
10
FFS, ce n'est pas une question de programmation. C'est une question de système d'exploitation. Limiter la mémoire qu'un processus arbitraire peut utiliser - Safari, Matlab, Call of Duty, peu importe - au niveau du système d'exploitation est sans équivoque une question de système d'exploitation.
Fomite
7
Être un site pour les "passionnés d'Apple et les utilisateurs expérimentés", qui concernent essentiellement la mémoire virtuelle, est clairement dans les limites et sur le sujet. Même si le développement est lié, cela serait valable pour les problèmes de réglage ou de performances.
bmike

Réponses:

9

Une question similaire à celle-ci est notée ici Comment puis-je limiter la quantité de RAM qu'une application Mac OS peut utiliser?

Ils recommandent d'utiliser la commande ulimit , mais ils n'ont pas réussi à limiter le montant à ce qu'ils voulaient. Je pense que le problème qu'ils ont rencontré était le fait que l'option définie -u ou -v ne tenait pas compte du système de pagination de la mémoire, par exemple, vous ne pouvez allouer que X quantité d'espace pour votre processus dans de la RAM réelle, mais nous pouvons paginer vous à la mémoire virtuelle toute la journée.

Notez que cela peut être dangereux de désactiver la mémoire virtuelle, cela pourrait entraîner le blocage de votre Mac, etc. lorsqu'il court de RAM.

Essayez d'exécuter ulimit avec les arguments -l, -m ou -v, cependant, comme indiqué dans la page de manuel ulimit, placez-le sur le système d'exploitation s'il prêtera attention à ces paramètres ou non comme indiqué.

ulimit: ulimit [-SHacdefilmnpqrstuvx] [limite]

Modifiez les limites des ressources du shell.

Fournit un contrôle sur les ressources disponibles pour le shell et les processus qu'il crée, sur les systèmes qui permettent un tel contrôle.

Impossible de trouver une source précise qui confirme si OS X ignore ou non ulimit, mais après l'échec de l'ulimit référencé

Si vous pouvez faire en sorte qu'ulimit réponde à vos besoins, essayez-le, sinon une combinaison d'ulimit et / ou de désactivation de la mémoire virtuelle peut vous permettre de configurer cette limite de 3 Go sur certains processus. Pour info, voici un bon lien pour plus d'informations sur la désactivation complète de la mémoire virtuelle dans Snow Leopard System 10.6

sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist
MrDaniel
la source
Cela ressemble à la réponse probablement correcte - je vais l'essayer la prochaine fois que je lance ceci. Pour l'instant, j'accepte la réponse.
Fomite
5

Si vous exécutez Lion (ou un OSX plus récent) sur votre Mac, vous pourrez peut-être exécuter OSX dans une VM (VirtualBox, Parallels ou VMWare, et.al.) sur ce Mac. Limitez la machine virtuelle à 3 Go de RAM physique, et toute application ou processus à l'intérieur de la machine virtuelle sera également limité. Le système hébergeant la machine virtuelle doit rester réactif même si le système d'exploitation de la machine virtuelle est limité par le disque d'échange de sauvegarde ou tombe en panne.

Si vous déboguez un processus potentiellement incontrôlable, vous pourrez peut-être accéder à la machine virtuelle pour exécuter le débogueur ou un nœud de débogage à partir de la ligne de commande et vous connecter jusqu'à ce que les choses se bloquent.

hotpaw2
la source