Como persistentemente controlar o consumo máximo de recursos do sistema no Mac?

81

Antes do Mavericks, eu poderia usar o arquivo /etc/launchd.conf para alterar o consumo máximo de recursos do sistema, por exemplo:

limit maxfiles 16384 unlimited
limit maxproc 16384 unlimited

Não funciona mais no Mavericks.

Qual é a maneira correta de fazer isso na versão recente do OS X?

    
por Howard 07.01.2014 / 10:09

4 respostas

81

Limite de Sessão do Shell

Os limites definidos via ulimit afetam apenas os processos criados pela sessão atual do shell.

  • O "limite flexível" é o limite real usado. Pode ser definido, desde que não seja maior que o "limite rígido".
  • O "limite rígido" também pode ser definido, mas apenas para um valor menor que o atual, e somente para um valor não inferior ao "limite flexível".
  • O "limite rígido", bem como os limites para todo o sistema, podem ser aumentados por root (o administrador), executando comandos de configuração do sistema ou modificando os arquivos de configuração do sistema.

Depois que você terminar a sessão de shell (por Ctrl + D , exit , ou fechando a janela Terminal.app , etc.), as configurações se foram. Se você quiser a mesma configuração na próxima sessão de shell, adicione a configuração ao script de inicialização do shell.

OBSERVAÇÃO: Se você estiver usando bash , ele deverá ser ~/.bash_proile ou ~/.bash_login . Se você estiver usando outros shells, provavelmente deve ser ~/.profile .

Limite do sistema (requer reinicialização para ter efeito)

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

Você precisa criar um arquivo em /Library/LaunchDaemons/limit.maxfiles.plist (proprietário: root:wheel , modo: 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>

Você deve alterar os números de acordo com suas necessidades. Eles são o "limite flexível" ( 262144 ) e o "limite rígido" ( 524288 ) respectivamente. Para mais informações, consulte a página de manual executando man launchd.plist .

Para 10.8 (Leão da montanha):

Você pode adicionar as seguintes linhas a /etc/sysctl.conf (proprietário: root:wheel , modo: 0644 ):

kern.maxfiles=524288
kern.maxfilesperproc=262144

Você deve alterar os números de acordo com suas necessidades. Eles são o "limite de todo o sistema" ( kern.maxfiles ) e "limite por processo" ( kern.maxfilesperproc ) respectivamente. Para mais configurações, consulte a página de manual executando man sysctl ou leia o código-fonte em /usr/include/sys/sysctl.h .

Para o Mac OS X antigo (acho que funciona no 10.7 (Lion) ou anterior):

Você pode adicionar a seguinte linha a /etc/launchd.conf (proprietário: root:wheel , modo: 0644 ):

limit maxfiles 262144 524288

Você deve alterar os números de acordo com suas necessidades. Eles são o "limite flexível" ( 262144 ) e o "limite rígido" ( 524288 ) respectivamente.

Se o sistema não permitir que você defina os limites acima de um determinado valor ...

O sistema não permite que você defina um valor superior a um "máximo rígido" (proposto pela Apple). Para aumentar este "hard maximo", você tem que comprar "OS X Server" da "App Store", então você tem que executar o seguinte comando uma vez:

sudo serverinfo --setperfmode true

Isso ativa o "modo de desempenho do servidor" em sua máquina. Você pode definir o máximo de acordo com a configuração de sua máquina (veja isto) . Eu tentei isso antes (em Mountain e Mavericks) e funciona! Por favor, veja o meu post ( aqui ) para mais informações.

Referências

por 08.08.2015 / 18:52
11

Parece que criar o arquivo /etc/launchd.conf e colocar seu comando dentro dele deve funcionar.

Se não funcionar, você provavelmente poderá editar ou criar o arquivo /etc/rc.local e adicionar seu comando dentro dele, pois há poucas chances de a Apple excluir o suporte para limite na linha de comando.

Editar 1 :
Eu deveria ter começado com isso, a página de manual launchd faça referência aos seguintes arquivos:

  ~/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.

Minha aposta é que agora você precisa colocar seu comando em ~/Library/LaunchAgents ou em /Library/LaunchDaemons .
Você deveria tentar os dois.

Editar 2 :
Esteja ciente também de que o launchd precisa de arquivos xml e não apenas de scripts. um gui foi deisgn para ajudar em tal tarefa que um não livre é Lingon . Talvez existam outros produtos gratuitos.

    
por 13.01.2014 / 11:27
10

Acabei de adicionar essas duas linhas no meu .bash_profile
funciona como um encanto

ulimit -n 1024
ulimit -u 1024
    
por 06.04.2014 / 16:42
8

Limites do sistema

Alterando os limites em /etc/launchd.conf ou /etc/rc.local não é mais suportado pelo macOS recente. Veja: Sistemas Antigos e Tecnologia .

Em vez disso, você deve criar um novo agente de inicialização .

Aqui está o exemplo do comando usando o comando PlistBuddy (consulte: 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 semelhante para maxproc limit:

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"

Para carregar os arquivos acima, execute: sudo launchctl load /Library/LaunchAgents/com.launchd.*.plist .

Notas:

  • Para imprimir o arquivo, execute: cat ou PlistBuddy -x -c Print /Library/LaunchAgents/com.launchd.maxfiles.plist .
  • Para verificar o log em busca de erros durante o carregamento, execute: tail -f /var/log/system.log .
  • Para ver os limites atuais de launchd , execute: launchctl limit .
  • O .plist file pode ser colocado na pasta do agente por usuário ou por todo o sistema ( LaunchAgents ). Consulte: man launchd e man launchd.plist , ou este ou que responda para mais detalhes.

Limites do Kernel

Por favor, note que os limites do sistema Launchd acima ainda são limitados pelo kernel, então você não pode defini-los acima de os limites reais definidos nas variáveis de estado do kernel (veja: man sysctl para ajuda).

Para ver os limites atuais do kernel, execute: sysctl -a | grep ^kern.max .

Para aumentar o limite de maxfiles , execute: sudo sysctl -w kern.maxfiles=20480 .

Para fazê-los persistir, use o método semelhante para criar um arquivo .plist de inicialização, por exemplo

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"

Limites da shell

Para limites de shell, adicione o comando ulimit relevante ao arquivo de inicialização ~/.bashrc ou ~/.bash_profile para usuário individual ou /etc/bashrc para todos os usuários. Veja: Como adicionar configurações ulimit do shell persist no Mac?

Linhas sugeridas para adicionar:

# Changes the ulimit limits.
ulimit -Sn 4096      # Increase open files.
ulimit -Sl unlimited # Increase max locked memory.
    
por 30.06.2016 / 12:07