Come controllare costantemente il massimo consumo di risorse di sistema su Mac?


85

Prima di Mavericks, potevo usare il /etc/launchd.conffile per modificare il consumo massimo di risorse di sistema, ad esempio:

limit maxfiles 16384 unlimited
limit maxproc 16384 unlimited

Non funziona più in Mavericks.

Qual è il modo corretto di farlo nella recente versione di OS X?


I tuoi limiti sono al di sopra del massimo per OS X. il numero massimo di file supera 10240 e il limite maxproc è 1064. Se la risposta approvata fissasse i limiti, darei un pollice in su .. ma è rimasto lì sbagliato e non corretto per un buon anno + ora ..
Joey T,

@atmosx: dovrebbe essere /etc/sysctl.conf, no /etc/sysctrl.conf.
Siu Ching Pong -Asuka Kenji-

1
@JoeyT: In effetti puoi impostarlo su un limite superiore! Ma devi prima acquistare "OS X Server" da "App Store" se sei su Mac OS X 10.8 (Mountain Lion) o 10.9 (Mavericks). (Sì, è necessario pagare $ 19,99 USD per modificare un'impostazione!) In breve, è necessario eseguire sudo serverinfo --setperfmode trueuna volta per mettere la macchina in "Modalità prestazioni server". Quindi, hai un "massimo massimo", a seconda della configurazione della tua macchina. Per i dettagli, consultare il mio post su dibattiti.apple.com/it/thread/5166397 . Per 10.10 (Yosemite), la modalità è attiva di default (almeno sulla mia macchina!). Vedi la mia risposta qui sotto.
Siu Ching Pong -Asuka Kenji-

Risposte:


87

Limite sessione shell

I limiti impostati tramite ulimitinfluiscono solo sui processi creati dalla sessione di shell corrente.

  • Il "limite soft" è il limite effettivo utilizzato. Potrebbe essere impostato, nella misura in cui non sia superiore al "limite rigido".
  • Il "limite limite" potrebbe anche essere impostato, ma solo su un valore inferiore a quello corrente e solo su un valore non inferiore al "limite limite".
  • Il "limite rigido", così come i limiti a livello di sistema, potrebbero essere aumentati rootdall'amministratore eseguendo i comandi di configurazione del sistema o modificando i file di configurazione del sistema.

Dopo aver terminato la sessione della shell (con Ctrl+ D, exito chiuso la Terminal.appfinestra, ecc.), Le impostazioni scompaiono. Se si desidera la stessa impostazione nella prossima sessione della shell, aggiungere l'impostazione allo script di avvio della shell.

NOTA: se si utilizza bash, allora dovrebbe essere ~/.bash_proileo ~/.bash_login. Se stai usando altre shell, probabilmente dovrebbe esserlo ~/.profile.

Limite di sistema (richiede il riavvio per avere effetto)

Per 10.9 (Mavericks), 10.10 (Yosemite), 10.11 (El Capitan) e 10.12 (Sierra):

Devi creare un file su /Library/LaunchDaemons/limit.maxfiles.plist(proprietario:, root:wheelmodalità:) 0644:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
        "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>Label</key>
    <string>limit.maxfiles</string>
    <key>ProgramArguments</key>
    <array>
      <string>launchctl</string>
      <string>limit</string>
      <string>maxfiles</string>
      <string>262144</string>
      <string>524288</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>ServiceIPC</key>
    <false/>
  </dict>
</plist>

È necessario modificare i numeri in base alle proprie esigenze. Sono rispettivamente il "limite morbido" ( 262144) e il "limite limite" ( 524288). Per ulteriori informazioni, consultare la pagina del manuale eseguendo man launchd.plist.

Per 10.8 (Mountain Lion):

È possibile aggiungere le seguenti righe a /etc/sysctl.conf(proprietario:, root:wheelmodalità:) 0644:

kern.maxfiles=524288
kern.maxfilesperproc=262144

È necessario modificare i numeri in base alle proprie esigenze. Sono rispettivamente il "limite a livello di sistema" ( kern.maxfiles) e il "limite per processo" ( kern.maxfilesperproc). Per ulteriori impostazioni, consultare la pagina del manuale eseguendo man sysctlo leggere il codice sorgente all'indirizzo /usr/include/sys/sysctl.h.

Per Mac OS X precedente (suppongo che funzioni su 10.7 (Lion) o precedente):

È possibile aggiungere la seguente riga a /etc/launchd.conf(proprietario:, root:wheelmodalità:) 0644:

limit maxfiles 262144 524288

È necessario modificare i numeri in base alle proprie esigenze. Sono rispettivamente il "limite morbido" ( 262144) e il "limite limite" ( 524288).

Se il sistema non ti consente di impostare i limiti sopra un determinato valore ...

Il sistema non consente di impostare un valore superiore a un "massimo massimo" (proposto da Apple). Per aumentare questo "massimo", è necessario acquistare "OS X Server" da "App Store", quindi eseguire una volta il comando seguente:

sudo serverinfo --setperfmode true

Ciò attiva la "modalità prestazioni server" sul tuo computer. È quindi possibile impostare il massimo in base alla configurazione della macchina (vedere questo) . L'ho provato prima (su Mountain e Mavericks) e funziona! Si prega di consultare il mio post ( qui ) per ulteriori informazioni.

Riferimenti


1
Grazie; Sto usando Yosemite e la tecnica del plist LaunchDaemon ha funzionato per me. Credo che sia l'unico che lo fa. Per chiunque ne abbia bisogno, si ricorda che è necessario un riavvio affinché abbia effetto .
nc.

1
@nc. : Aggiunto "Richiedi il riavvio per rendere effettive" la mia risposta. Ho lavorato troppo a lungo sul campo, quindi non ero consapevole che alcune persone non lo sapessero. Grazie per averlo ricordato!
Siu Ching Pong -Asuka Kenji-

2
Sto usando 10.9.5 ma solo l' /etc/launchd.confapproccio mostra alcun effetto quando corro ulimit -n. Qualcuno potrebbe aggiornare le istruzioni se questo è significativo?
Sridhar Sarnobat,

1
Il metodo Yosemite 10.10 funziona anche in 10.11 El Capitan. Anche se non sono riuscito a impostarlo su "illimitato", quindi ho dovuto usare solo un numero molto alto
antriver

1
@aolszowka: vedi questo per aumentare il limite tramite /etc/sysctl.conf: superuser.com/questions/827984/…
Rob Johansen,

11

Sembra che creare il file /etc/launchd.confe inserire il tuo comando al suo interno dovrebbe fare il trucco.


Se non funziona, puoi probabilmente modificare o creare il /etc/rc.localfile e aggiungere il tuo comando al suo interno in quanto ci sono poche possibilità che Apple eliminerà mai il supporto per il limite sulla riga di comando.


Modifica 1 :
dovrei iniziare con quello, la launchd pagina man fa riferimento ai seguenti file:

  ~/Library/LaunchAgents         Per-user agents provided by the user.
  /Library/LaunchAgents          Per-user agents provided by the administrator.
  /Library/LaunchDaemons         System-wide daemons provided by the administrator.
  /System/Library/LaunchAgents   Per-user agents provided by Mac OS X.
  /System/Library/LaunchDaemons  System-wide daemons provided by Mac OS X.

La mia scommessa è che ora è necessario inserire il comando in ~/Library/LaunchAgentso in /Library/LaunchDaemons.
Dovresti provare entrambi.

Modifica 2 :
Essere consapevoli del fatto che launchd richiede file XML e non solo script. un gui è stato progettato per aiutare in tale compito, uno non libero è Lingon . Forse esistono altri prodotti gratuiti.


dato che ci sono molte informazioni nel mio post, puoi dire qual è stata quella buona?
Kiwy,

vedi la mia risposta qui sotto.
Howard,

Entrambi /etc/launchd.confe /etc/rc.localvengono ignorati in 10.10 e versioni successive, poiché in 10.10 launchd è stato riprogettato e SystemStarter è stato rimosso.
nisetama,

@nise sentiti libero di aggiornare la mia risposta se qualcosa di nuovo è venuto fuori nella recente versione di Mac OS
Kiwy,

10

Ho appena aggiunto queste due righe nei miei .bash_profile
lavori come un incantesimo

ulimit -n 1024
ulimit -u 1024

2
Non influenza i limiti del sistema.
not2savvy,

1
Tuttavia, ciò potrebbe andare bene se i limiti del tuo sistema sono abbastanza alti. Per controllare cosa sono, puoi semplicemente eseguire ulimit -n -H. Su macOS High Sierra stava unlimitedcambiando così il limite "soft" dell'utente nel .bash_profilefare il trucco.
Joshua Pinter,

9

Limiti di sistema

La modifica dei limiti in /etc/launchd.confo /etc/rc.localnon è più supportata per macOS recente. Vedi: Vecchi sistemi e tecnologia .

Invece, è necessario creare un nuovo agente di avvio .

Ecco l'esempio di comando utilizzando PlistBuddyil comando (vedi: man PlistBuddy):

sudo /usr/libexec/PlistBuddy /Library/LaunchAgents/com.launchd.maxfiles.plist \
-c "add Label string com.launchd.maxfiles" \
-c "add ProgramArguments array" \
-c "add ProgramArguments: string launchctl" \
-c "add ProgramArguments: string limit" \
-c "add ProgramArguments: string maxfiles" \
-c "add ProgramArguments: string 10240" \
-c "add ProgramArguments: string unlimited" \
-c "add RunAtLoad bool true"

E simile per maxproclimite:

sudo /usr/libexec/PlistBuddy /Library/LaunchAgents/com.launchd.maxproc.plist \
-c "add Label string com.launchd.maxproc" \
-c "add ProgramArguments array" \
-c "add ProgramArguments: string launchctl" \
-c "add ProgramArguments: string limit" \
-c "add ProgramArguments: string maxproc" \
-c "add ProgramArguments: string 2000" \
-c "add ProgramArguments: string unlimited" \
-c "add RunAtLoad bool true"

Per caricare i file di cui sopra, eseguire: sudo launchctl load /Library/LaunchAgents/com.launchd.*.plist.

Appunti:

  • Per stampare il file, eseguire: cato PlistBuddy -x -c Print /Library/LaunchAgents/com.launchd.maxfiles.plist.
  • Per controllare il registro di eventuali errori durante il caricamento, eseguire: tail -f /var/log/system.log.
  • Per vedere gli attuali launchdlimiti, eseguire: launchctl limit.
  • Il .plistfile può essere inserito nella cartella dell'agente per utente o dell'intero sistema ( LaunchAgents). Vedi: man launchde man launchd.plist, o questa o quella risposta per maggiori dettagli.

Limiti del kernel

Si noti che sopra i limiti di sistema di Launchd sono ancora limitati dal kernel, quindi non è possibile impostarli più alti dei limiti effettivi impostati nelle variabili di stato del kernel (consultare: man sysctlper assistenza).

Per vedere i limiti attuali del kernel, eseguire: sysctl -a | grep ^kern.max.

Per aumentare il maxfileslimite, eseguire: sudo sysctl -w kern.maxfiles=20480.

Per farli persistere, utilizzare il metodo simile per creare un .plistfile di avvio , ad es

sudo /usr/libexec/PlistBuddy /Library/LaunchAgents/com.kern.maxfiles.plist \
-c "add Label string com.kern.maxfiles" \
-c "add ProgramArguments array" \
-c "add ProgramArguments: string sysctl" \
-c "add ProgramArguments: string -w" \
-c "add ProgramArguments: string kern.maxfiles=20480" \
-c "add RunAtLoad bool true"

Limiti di shell

Per i limiti della shell, aggiungere il ulimitcomando pertinente nel file di avvio ~/.bashrco ~/.bash_profileper il singolo utente o /etc/bashrcper tutti gli utenti. Vedi: Come aggiungere le impostazioni persist ullim shell su Mac?

Linee suggerite da aggiungere:

# Changes the ulimit limits.
ulimit -Sn 4096      # Increase open files.
ulimit -Sl unlimited # Increase max locked memory.

1
Prestare particolare attenzione maxprocperché, per impostazione predefinita, il limite del kernel rigido per quel parametro è 1064, il che significa che impostarlo su 2000 o "illimitato" in realtà lo imposta solo su 1064. Sfortunatamente, il kernel non lo impone maxprocperuid < maxproce le impostazioni suggerite lasceranno il sistema con maxprocperuid=2000e maxproc=1064che è pericoloso. Leggi di più qui .
Vecchio professionista il

0

Se hai un singolo programma che sta colpendo un ulimit(un limite morbido al numero di file che un singolo processo può aprire), la regolazione ulimitsu un numero più alto va bene, specialmente se puoi semplicemente inserire il ulimitcomando nel tuo .bash_profile. Oltre a ciò, sconsiglio vivamente di modificare file come /etc/launchd.confo /etc/sysctl.confo aggiungere file plist /Library/LaunchDaemons/per alcuni motivi.

  • Le modifiche a tali file persistono nei backup e vengono trasferite alle nuove versioni di macOS e ai nuovi computer durante l'aggiornamento.

  • Se tali modifiche causano problemi (che è una possibilità reale), è necessario ricordare che sono state apportate le modifiche e quali sono le modifiche, quindi modificare nuovamente i file per annullarli. Questo può succedere anni dopo.

  • Dopo alcuni anni di aggiornamento, potresti scoprire che quello che era un aumento di un limite è ora una diminuzione di un limite. Ma probabilmente non lo saprai perché (a) non ricorderai di aver apportato la modifica e (b) non vedrai i nuovi limiti perché li hai annullati dall'inizio.

Un'opzione molto migliore

In generale, anziché sintonizzare i singoli parametri sul sistema e disequilibrare il sistema (e potenzialmente lasciare che un singolo programma blocchi il sistema assorbendo tutte le risorse), se i limiti di sistema predefiniti non sono sufficienti per le tue esigenze, ti consiglio di turing su "Modalità prestazioni server", o almeno provandolo. Tutto ciò che serve per questo è OS X / macOS 10.8 Mountain Lion o successivo e almeno 16 GiB di memoria installati. All'inizio dovevi pagare per questo, ma a partire da OS X 10.8 Mountain Lion, è gratuito e ufficialmente supportato da Apple con il sistema operativo standard.

L'attivazione di questa modalità aumenta notevolmente i limiti di sistema, in particolare il numero di processi che è possibile eseguire e il numero di file che è possibile aprire, a scapito dell'allocazione di più memoria nel kernel di sistema. Puoi leggere in dettaglio cosa viene modificato dalla modalità prestazioni del server nella risposta alla domanda "Cosa fa effettivamente serverperfmode = 1 su macOS?" .

Questa modalità presenta numerosi vantaggi rispetto alla modifica dei file di configurazione, come suggerito da altre risposte.

  • È una modifica di un singolo parametro, facile da annullare.
  • Si traduce in un insieme equilibrato di limiti più alti, preservando le protezioni contro i processi canaglia che provocano l'arresto anomalo del sistema.
  • Nella maggior parte dei casi, fornisce limiti più elevati rispetto a quelli altrimenti consentiti dal kernel, anche con la modifica dei file di configurazione.
  • Aumenta i limiti predefiniti per tutti i processi senza ulteriori modifiche alla configurazione.
  • A partire da OS X 10.11 El Capitan, la modifica della configurazione viene memorizzata in NVRAM, il che significa che se sta causando problemi, si tornerà alla modalità normale quando si esegue la procedura di risoluzione dei problemi di ripristino di NVRAM. Non devi ricordarlo.
  • Poiché è in NVRAM, non cambierà accidentalmente lo stato durante il ripristino dai backup.
  • Poiché è in NVRAM, non si accenderà automaticamente quando clonerai la configurazione del tuo Mac su un nuovo hardware.
  • Poiché è ufficialmente supportato da Apple, "funziona" e non riceverai lamentele da Apple Geniuses riguardo alla modifica impropria del sistema quando chiedi supporto.
  • Poiché si tratta di una modifica di un singolo parametro, è possibile attivarlo e disattivarlo facilmente per la risoluzione dei problemi o il confronto tra un'impostazione e l'altra.

Attiva o disattiva la Modalità prestazioni server

Per attivare la Modalità prestazioni server, utilizzare il Terminale per eseguire uno di questi comandi, quindi riavviare affinché abbia effetto:

  • Per OS X 10.11 El Capitan o versioni successive, accendilo con
sudo nvram boot-args="serverperfmode=1 $(nvram boot-args 2>/dev/null | cut -f 2-)"

e spegnilo con

sudo nvram boot-args="$(nvram boot-args 2>/dev/null | sed -e $'s/boot-args\t//;s/serverperfmode=1//')"

I comandi precedenti sono ciò che Apple consiglia ufficialmente, ma in realtà c'è un problema con loro, che è che se si esegue il comando "accendi" due volte, è necessario eseguire il comando "spegni" due volte per disattivarlo. Quindi controlla se è acceso o spento dopo aver apportato una modifica eseguendo

nvram boot-args

Se l'output include "serverperfmode = 1", l'impostazione è attiva e, in caso contrario, l'impostazione è disattivata.

  • Per OS X 10.8 Mountain Lion, OS X 10.9 Mavericks e OS X 10.10 Yosemite, attiva la modalità prestazioni server con
serverinfo --setperfmode 1

e spegnilo con

serverinfo --setperfmode 0

Controllare l'impostazione con

serverinfo --perfmode

L'impostazione non avrà effetto fino a dopo il riavvio del sistema.

Verifica se il computer è attualmente in esecuzione in modalità prestazioni server

Il controllo dell'impostazione ti dirà se è impostato per avere effetto (o meno) dopo il riavvio. Per verificare se è attualmente attivo (supponendo che tu abbia seguito il mio consiglio e non abbia modificato i file di configurazione che cambiano le impostazioni), esegui

sysctl kern.maxproc

Ti darà un numero che è il numero massimo di processi consentiti dal sistema. Se quel numero è un multiplo di 532 , la modalità prestazioni del server è disattivata. Se si tratta di un numero tondo (un multiplo di 2500), la modalità delle prestazioni del server è attiva per il sistema attualmente in esecuzione.

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.