Etapa de solução de problemas
CAPÍTULO 9. ESTABELECENDO LIMITES PARA APLICAÇÕES
5. Opcionalmente, verifique se a funcionalidade cgroups-v2 foi montada: # mount l | grep cgroup
9.5. USANDO GRUPOS DE CONTROLE VERSÃO 1 COM SYSTEMD
As seções seguintes fornecem uma visão geral das tarefas relacionadas à criação, modificação e remoção dos grupos de controle (cgroups). As utilidades fornecidas pelo sistema systemd e pelo gerente de serviços são a forma preferida da gerência cgroups e serão suportadas no futuro.
9.5.1. Criação de grupos de controle versão 1 com systemd
Você pode usar o sistema systemd e o gerente de serviços para criar grupos de controle transientes e persistentes (cgroups) para estabelecer limites, priorizar ou controlar o acesso aos recursos de hardware para grupos de processos.
9.5.1.1. Criação de grupos de controle transientes
A cgroups estabelece limites para os recursos consumidos por uma unidade (serviço ou escopo) durante seu tempo de execução.
Procedimento
Para criar um grupo de controle transitório, use o comando systemd-run no seguinte formato: # systemd-run --unit=<name> --slice=<name>.slice <command>
Este comando cria e inicia um serviço transitório ou uma unidade de escopo e executa um comando personalizado em tal unidade.
A opção --unit=<name> dá um nome à unidade. Se --unit não for especificado, o nome é gerado automaticamente.
O --slice=<name>.slice faz de sua unidade de serviço ou escopo um membro de uma fatia especificada. Substitua <name>.slice com o nome de uma fatia existente (como mostrado na saída de systemctl -t slice), ou criar uma nova fatia passando um nome único. Por padrão, os serviços e escopos são criados como membros do system.slice.
Substitua <command> com o comando que você deseja executar no serviço ou na unidade de escopo.
A seguinte mensagem é exibida para confirmar que você criou e iniciou o serviço ou o escopo com sucesso:
# Funcionando como unidade <name>.service
Opcionalmente, manter a unidade funcionando após a conclusão de seus processos para coletar informações sobre o tempo de execução:
# systemd-run --unit=<name> --slice=<name>.slice --remain-after-exit <command> O comando cria e inicia uma unidade de serviço transitória e executa um comando
personalizado em tal unidade. A opção --remain-after-exit garante que o serviço continue funcionando após a conclusão de seus processos.
Recursos adicionais
Para mais informações sobre o conceito de grupos de controle, veja Seção 9.1, “Entendendo os grupos de controle”.
Para mais informações sobre o papel do systemd nos grupos de controle, veja Seção 9.4, “Papel do sistemad em grupos de controle versão 1”.
Para mais informações sobre systemd, arquivos de configuração de unidades e suas
localizações, e uma lista completa de systemd tipos de unidades, veja as seções relevantes em Configuring basic system settings.
Para uma descrição detalhada de systemd-run, incluindo outras opções e exemplos, consulte as páginas do manual systemd-run(1).
9.5.1.2. Criação de grupos de controle persistentes
Para atribuir um grupo de controle persistente a um serviço, é necessário editar seu arquivo de configuração de unidade. A configuração é preservada após o reinício do sistema, para que possa ser usada para gerenciar serviços que são iniciados automaticamente.
Procedimento
Para criar um grupo de controle persistente, execute: # systemctl enable <name>.service
O comando acima cria automaticamente um arquivo de configuração de unidade no diretório /usr/lib/systemd/system/ e por padrão, ele atribui <name>.service para a unidade
system.slice. Recursos adicionais
Para mais informações sobre o conceito de grupos de controle, veja Seção 9.1, “Entendendo os grupos de controle”.
Para mais informações sobre o papel do systemd nos grupos de controle, veja Seção 9.4, “Papel do sistemad em grupos de controle versão 1”.
Para mais informações sobre systemd, arquivos de configuração de unidades e suas
localizações, e uma lista completa de systemd tipos de unidades, veja as seções relevantes em Configuring basic system settings.
Para uma descrição detalhada de systemd-run, incluindo outras opções e exemplos, consulte as páginas do manual systemd-run(1).
9.5.2. Modificação de grupos de controle versão 1 com systemd
Cada unidade persistente é supervisionada pelo gerente de sistema e serviços systemd, e tem um arquivo de configuração da unidade no diretório /usr/lib/systemd/system/. Para alterar as
configurações de controle de recursos das unidades persistentes, modifique seu arquivo de configuração de unidade manualmente em um editor de texto ou a partir da interface de linha de comando.
9.5.2.1. Configuração das configurações de controle de recursos de memória na linha de
comando
A execução de comandos na interface de linha de comando é uma das formas de estabelecer limites, priorizar ou controlar o acesso aos recursos de hardware para grupos de processos.
Procedimento
Para limitar o uso de memória de um serviço, execute o seguinte: # systemctl set-property example.service MemoryLimit=1500K
O comando atribui instantaneamente o limite de memória de 1.500 kilobytes aos processos executados em um grupo de controle ao qual o serviço example.service pertence. O parâmetro MemoryLimit, nesta variante de configuração, é definido no arquivo
/etc/systemd/system.control/example.service.d/50-MemoryLimit.conf e controla o valor do arquivo /sys/fs/cgroup/memory/system.slice/example.service/memory.limit_in_bytes. Opcionalmente, para limitar temporariamente o uso de memória de um serviço, executar:
# systemctl set-property --runtime example.service MemoryLimit=1500K
O comando atribui instantaneamente o limite de memória ao serviço example.service. O parâmetro MemoryLimit é definido até a próxima reinicialização no arquivo
/run/systemd/system.control/example.service.d/50-MemoryLimit.conf. Com uma
reinicialização, todo o diretório /run/systemd/system.control/ e MemoryLimit são removidos.
NOTA
O arquivo 50-MemoryLimit.conf armazena o limite de memória como um múltiplo de 4096 bytes - um tamanho de página de kernel específico para AMD64 e Intel 64. O número real de bytes depende de uma arquitetura de CPU.
Recursos adicionais
Para mais informações sobre o conceito de grupos de controle, veja Seção 9.1, “Entendendo os grupos de controle”.
Para mais informações sobre controladores de recursos, consulte Seção 9.2, “O que são
Para mais informações sobre controladores de recursos, consulte Seção 9.2, “O que são controladores de recursos do kernel” e systemd.resource-control(5), cgroups(7) páginas do manual.
Para mais informações sobre o papel do systemd nos grupos de controle, veja Seção 9.4, “Papel do sistemad em grupos de controle versão 1”.
9.5.2.2. Configuração das configurações de controle de recursos de memória com arquivos
de unidade
A modificação manual dos arquivos da unidade é uma das formas de estabelecer limites, priorizar ou controlar o acesso aos recursos de hardware para grupos de processos.
Procedimento
1. Para limitar o uso de memória de um serviço, modifique o arquivo /usr/lib/systemd/system/example.service como segue:
… [Service]
MemoryLimit=1500K …
A configuração acima coloca um limite ao consumo máximo de memória dos processos executados em um grupo de controle, do qual faz parte example.service.
NOTA
Use os sufixos K, M, G ou T para identificar Kilobyte, Megabyte, Gigabyte ou Terabyte como uma unidade de medida.
2. Recarregar todos os arquivos de configuração da unidade: # systemctl daemon-reload
3. Reinicie o serviço:
# systemctl restart example.service 4. Reinicie o sistema.
5. Opcionalmente, verifique se as mudanças entraram em vigor:
# cat /sys/fs/cgroup/memory/system.slice/example.service/memory.limit_in_bytes 1536000
O exemplo mostra que o consumo de memória foi limitado em cerca de 1.500 Kilobytes.
NOTA
O arquivo memory.limit_in_bytes armazena o limite de memória como um múltiplo de 4096 bytes - um tamanho de página de kernel específico para AMD64 e Intel 64. O número real de bytes depende de uma arquitetura de CPU.
Recursos adicionais
Para mais informações sobre o conceito de grupos de controle, veja Seção 9.1, “Entendendo os grupos de controle”.
Para mais informações sobre controladores de recursos, consulte Seção 9.2, “O que são controladores de recursos do kernel” e systemd.resource-control(5), cgroups(7) páginas do manual.
Para mais informações sobre systemd, arquivos de configuração de unidades e suas
localizações, bem como uma lista completa de systemd tipos de unidades, consulte as seções relevantes em Configuring basic system settings.
Para mais informações sobre o papel do systemd nos grupos de controle, veja Seção 9.4, “Papel do sistemad em grupos de controle versão 1”.
9.5.3. Remoção de grupos de controle versão 1 com systemd
Você pode usar o sistema systemd e o gerente de serviços para remover grupos de controle
transientes e persistentes (cgroups) se você não precisar mais limitar, priorizar ou controlar o acesso aos recursos de hardware para grupos de processos.
9.5.3.1. Remoção de grupos de controle transientes
O cgroups transitório é liberado automaticamente quando todos os processos que uma unidade de serviço ou de escopo contém, terminam.
Procedimento
Para parar a unidade de serviço com todos os seus processos, execute: # systemctl stop <name>.service
Para encerrar um ou mais processos da unidade, execute:
# systemctl kill <name>.service --kill-who=PID,… --signal=signal
O comando acima usa a opção --kill-who para selecionar processo(s) do grupo de controle que você deseja encerrar. Para matar vários processos ao mesmo tempo, passe uma lista de PIDs separada por vírgula. A opção --signal determina o tipo de sinal POSIX a ser enviado para os processos especificados. O sinal padrão é SIGTERM.
Recursos adicionais
Para mais informações sobre o conceito de grupos de controle, veja Seção 9.1, “Entendendo os grupos de controle”.
Para mais informações sobre controladores de recursos, consulte Seção 9.2, “O que são controladores de recursos do kernel” e systemd.resource-control(5), cgroups(7) páginas do manual.
Para mais informações sobre o papel do systemd nos grupos de controle, veja Seção 9.4, “Papel do sistemad em grupos de controle versão 1”.
Para mais informações sobre systemd, arquivos de configuração de unidades e suas
Para mais informações sobre systemd, arquivos de configuração de unidades e suas
localizações, bem como uma lista completa de systemd tipos de unidades, consulte as seções relevantes em Configuring basic system settings.
9.5.3.2. Remoção de grupos de controle persistentes
Persistentes cgroups são liberados quando um serviço ou uma unidade de escopo é parada ou desativada e seu arquivo de configuração é excluído.
Procedimento
1. Parar a unidade de serviço:
# systemctl stop <name>.service 2. Desativar a unidade de serviço:
# systemctl disable <name>.service
3. Remover o arquivo de configuração da unidade relevante: # rm /usr/lib/systemd/system/<name>.service
4. Recarregar todos os arquivos de configuração da unidade para que as mudanças entrem em vigor:
# systemctl daemon-reload Recursos adicionais
Para mais informações sobre o conceito de grupos de controle, veja Seção 9.1, “Entendendo os grupos de controle”.
Para mais informações sobre controladores de recursos, consulte Seção 9.2, “O que são controladores de recursos do kernel” e systemd.resource-control(5), cgroups(7) páginas do manual.
Para mais informações sobre o papel do systemd nos grupos de controle, veja Seção 9.4, “Papel do sistemad em grupos de controle versão 1”.
Para mais informações sobre systemd, arquivos de configuração de unidades e suas
localizações, bem como uma lista completa de systemd tipos de unidades, consulte as seções relevantes em Configuring basic system settings.
Para mais informações sobre os processos de matança com systemd, consulte a página do manual systemd.kill(5).