Modo per limitare quanta RAM può richiedere un processo arbitrario?


12

Diciamo che abbiamo una macchina OS X in esecuzione con 4 GB di RAM. È possibile configurarlo in modo che nessun singolo processo possa richiedere più di 3 GB, quindi, indipendentemente dalla memoria che registra un processo, rimane sempre un po 'di memoria per mantenere il sistema reattivo?


6
No. E questo sarebbe controproducente. L'allocazione della RAM di micromanage non è qualcosa su cui sono progettati i sistemi operativi. La RAM libera è RAM sprecata. Troppo è fatto dalla presunta scarsa gestione della RAM di OS X. Chiudere Activity Monitor e andare avanti con la tua vita sembra essere il miglior rimedio.

8
@cksum Nel tuo commento c'è una serie enorme di ipotesi, molte delle quali sbagliate. Non sto cercando di gestire la memoria di OS X sul sedile posteriore. Quello che sto effettivamente facendo è cercare di scoprire se c'è un modo per conservare una funzionalità sufficiente del sistema durante il test di un codice che piuttosto facilmente si trasforma in un processo in fuga. Perché la RAM libera non è spreco di RAM se è ciò che ti consente di correggere gli errori.
Fomite,

3
Siamo spiacenti, ma se la tua domanda riguarda la programmazione, (sviluppo e test) di applicazioni, è fuori tema per questo forum. Dai

10
FFS, questa non è una domanda di programmazione. È una domanda del sistema operativo. Limitare la memoria che un processo arbitrario può usare - Safari, Matlab, Call of Duty, qualunque cosa - a livello di sistema operativo è inequivocabilmente una domanda del sistema operativo.
Fomite,

7
Essere un sito per "gli appassionati di Apple e gli utenti esperti" domande che in sostanza riguardano la memoria virtuale sono chiaramente nei limiti e sull'argomento. Anche se lo sviluppo è correlato, ciò sarebbe valido per problemi di ottimizzazione o prestazioni.
bmike

Risposte:


9

Una domanda simile a questa è qui annotata Come posso limitare la quantità di RAM che può utilizzare un'applicazione Mac OS?

Si consiglia di utilizzare il comando ulimit , ma non sono stati in grado di limitare correttamente l'importo a quello desiderato. Penso che il problema che hanno riscontrato sia stato il fatto che l'opzione impostata -u o -v non stava tenendo conto del sistema di paging della memoria, ad esempio è possibile allocare solo una quantità X di spazio per il processo nella RAM reale, ma possiamo pagina alla memoria virtuale per tutto il giorno.

Nota che questa potrebbe essere la disabilitazione della memoria virtuale pericolosa, potrebbe causare il blocco del Mac, ecc. Quando si esegue la RAM.

Prova a eseguire ulimit con argomenti -l, -m o -v comunque, come indicato nella pagina man di ulimit, fino al sistema operativo se presterà attenzione a queste impostazioni o meno come indicato.

ulimit: ulimit [-SHacdefilmnpqrstuvx] [limite]

Modifica i limiti delle risorse della shell.

Fornisce il controllo sulle risorse disponibili per la shell e sui processi che crea, sui sistemi che consentono tale controllo.

Non riesco davvero a trovare alcuna fonte definita che confermi se OS X ignora ulimit o no, ma dopo che l'ulimit referenziato fallisce

Se riesci a far funzionare ulimit per le tue esigenze da solo, provalo, se non una combinazione di ulimit e / o disabilitazione della memoria virtuale potrebbe essere in grado di impostare quel limite di 3 GB su determinati processi. Cordiali saluti qui è un buon collegamento per ulteriori informazioni su Disabilita completamente la memoria virtuale in Snow Leopard System 10.6

sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist

Questa sembra la risposta probabilmente corretta - la proverò alla prossima esecuzione. Per ora, accettando la risposta.
Fomite,

5

Se stai eseguendo Lion (o più recente OSX) Server sul tuo Mac, potresti essere in grado di eseguire OSX all'interno di una VM (VirtualBox, Parallels o VMWare, et.al.) su quel Mac. Limitare la VM a 3 GB di RAM fisica e anche qualsiasi app o processo all'interno della VM sarà così limitato. Il sistema che ospita la VM dovrebbe rimanere reattivo anche se il sistema operativo nella VM è limitato o si blocca.

Se stai eseguendo il debug di un processo potenzialmente in fuga, potresti essere in grado di accedere alla VM per eseguire il debugger o un nub di debug dalla riga di comando e registrare le cose fino a quando le cose non si bloccano.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.