AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 494843
Accepted
Caleb
Caleb
Asked: 2019-01-17 06:17:57 +0800 CST2019-01-17 06:17:57 +0800 CST 2019-01-17 06:17:57 +0800 CST

Como limitar um serviço systemd para "jogar bem" com a CPU?

  • 772

Eu tenho um serviço systemd (um executor de CI) que tende a atolar o sistema com trabalhos muito intensivos da CPU. Eu peguei a média de carga voando acima de 100 agora e quero acabar com essa bobagem.

Nada mais no sistema é limitado de forma alguma, então o negócio é que eu quero que todo o resto continue como seria executado agora, mas também:

  • (a) todos os processos executados como o usuário único que os jobs de CI executam ou
  • (b) qualquer processo filho instanciado pelo daemon de serviço systemd

... para ficar em segundo plano em relação a todo o resto do sistema. Na verdade, eu gostaria que eles tivessem algo como um limite absoluto de 90%, mesmo quando nada mais no sistema precisa dos 10% restantes dos ciclos de CPU, mas se qualquer outra coisa solicitar tempo de CPU, eu gostaria que eles obtivessem tanto quanto eles querem primeiro.

Qual é a melhor maneira de configurar isso? Estou executando o Arch Linux no EC2 e tenho cgroups disponíveis (incluindo cgmanager), mas nunca os usei.

systemd services
  • 1 1 respostas
  • 15664 Views

1 respostas

  • Voted
  1. Best Answer
    Caleb
    2019-01-18T02:22:39+08:002019-01-18T02:22:39+08:00

    Em primeiro lugar, a maior parte do que aparece na pesquisa na web foi preterida. Por exemplo cgmanager, não há mais suporte em novas versões do systemd. Não siga 99% do que aparece em buscas na web quanto ao uso cuplimitde , nice, cgsetou outras ferramentas para este trabalho. Eles não funcionarão como anunciado (como no caso de ferramentas de gerenciamento de cgroup que esperam que você crie sua própria hierarquia) ou não farão o trabalho sem recorrer a muitos hacks (como no caso de usar ' nice' para gerenciar grupos inteiros de processos).

    A boa notícia é que, juntamente com essas deprecações (e perseguindo o modus operandi tradicional de monstro polvo devorador de tudo do systemd), uma configuração padrão está em vigor para tudo no sistema, e ajustá-la para serviços systemd é trivial. Basta adicionar uma configuração de sobreposição ao serviço que você deseja limitar:

    $ sudo systemctl edit <servicename>
    

    Adicione uma seção com os valores de controle de recursos que você deseja substituir. No meu caso cheguei a isso:

    [Service]
    CPUWeight=20
    CPUQuota=85%
    IOWeight=20
    MemorySwapMax=0
    

    Esses valores não são todos necessários, mas os dois primeiros respondem à pergunta feita:

    • CPUWeighto padrão é 100 para todos os processos no sistema. Definir um valor baixo ainda permite que o processo use a CPU se nada mais estiver efetivamente mantendo o sistema responsivo para outras tarefas, sem diminuir muito os resultados. Este é um número inteiro de peso arbitrário.
    • CPUQuotaé um limite absoluto de quanto tempo de CPU é concedido, mesmo que nada mais esteja acontecendo. Este é um valor percentual. No meu caso, não era realmente necessário definir isso para corrigir o problema de monopolização de recursos. Acabei configurando-o de qualquer maneira para manter a temperatura da CPU baixa quando muitos trabalhos de CI se acumulam.
    • IOWeighté praticamente o mesmo que CPUWeight, neste caso, usado para manter os discos livres para tarefas do sistema e apenas mantê-los ocupados com trabalhos de CI quando nada mais estiver acontecendo.
    • MemorySwapMaxtambém não está no escopo da pergunta, no meu caso acabei adicionando-o porque o ray trar ( povray) em execução em alguns dos trabalhos de CI parece pensar em usar 30+ Gigs de swap além dos 30+ Gigs de RAM em este sistema é uma boa ideia só porque está lá. Ele corre mais rápido se você não o deixar usá-lo. Isso provavelmente é algo melhor configurado no povray, mas dessa forma não preciso policiar o que acontece dentro dos trabalhos de CI e não preciso desabilitar a troca do sistema.

    Por fim, esses valores podem ser alterados rapidamente sem reiniciar os serviços executando systemctl daemon-reload. Isso é bastante útil para observar o efeito das alterações imediatamente.

    • 52

relate perguntas

  • Altere o editor padrão para vim para _ sudo systemctl edit [unit-file] _

  • systemd: como posso executar um script no início de um serviço, sem editar a definição do serviço

  • Use o suporte de watchdog do systemd para reiniciar o aplicativo

  • resultados inesperados de `service | grep`

  • Inicie/pare o serviço systemd usando o atalho de teclado [fechado]

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve