1 Introdução
Completa CGroup Linux Grupo Controlo Linux, o núcleo Linux é uma função de limitação, que controla um grupo de recursos processo de separação (por exemplo, CPU, memória, disco de entrada e de saída, etc). O projeto foi iniciado pela primeira vez por engenheiros do Google em 2006 (principalmente Paul Menage e Rohit Seth), o mais antigo nome para o recipiente do processo (recipientes de processo). Em 2007, como no kernel do Linux, o recipiente (container) o termo é muito grande, a fim de evitar confusão, é cgroup renomeado, e está incorporada na versão do kernel para 2.6.24. Em seguida, o outro começou seu desenvolvimento.
Linux CGroupCgroup o sistema pode alocar recursos para a execução de tarefas (processos) grupos definidos pelo usuário - tal como uma combinação de tempo de CPU, memória do sistema, a largura de banda de rede, ou esses recursos. Cgroup pode monitorar a configuração, cgroup recusado o acesso a certos recursos, mesmo em um sistema executando configurado dinamicamente cgroup.
1.1 A principal função
(1) limitar o uso de recursos, tais como restrições de cache de memória limitar os sistemas de uso e arquivo.
(2) de controlo de prioridade, a utilização da CPU e IO de disco aproveitamento.
(3) alguns da auditoria ou algumas das estatísticas, o principal objetivo do faturamento.
(4) Suspende-se o processo retoma o processo de execução.
1,2 cgroups subsistema
Cgroups (grupos de controlo) com base no processo de restrição, em vez do utilizador , de modo que o processo é o mesmo para o funcionamento de super-utilizador;
cgroups subsistema:
limite 1.blkio por entrada de bloco e um dispositivo de controlo de saída. Por exemplo: discos, CDs e USB.
2.CPU restringir o uso de cpu proporção
recursos 3.cpuacct CPU para gerar relatórios cgroup tarefa.
Quando 4.cpuset multi-core tarefas cpu cgroup atribuído a cpu cpu separada e processo de vinculação de memória e reduzir o contexto de memória de comutação disponível na memória de acesso mais próximo
5.devices permitir ou negar o acesso ao dispositivo.
pausa 6.freezer e tarefa currículo cgroup.
limites de memória conjunto 7.memory e recursos de memória para produzir o relatório.
8.net_cls pacotes de rede cgroups pode ser marcado no processo, o módulo pode depois ser usado tc (controlo do tráfego) pacotes de dados de controlo.
9.net_prio - Este subsistema é usado para projetar a prioridade de tráfego de rede.
10.ns pode fazer diferentes cgroups seguinte processo usa um namespace diferente.
11.hugetlb - Este subsistema são direcionados principalmente no limite do sistema hugetlb, que é um sistema de arquivo de página grande.
2 ligam-se a um processo específico CPU auditoria
#yum montagem #yum a instalação libcgroup libcgroup Ferramentas numactl Y- # obter o número da linha CPU # grep 'processador' / proc / cpuinfo | Classificar -u | WC -l nó de memória # NUMA adquire informações CPU #numactl --hardware ou #lscpu | NUMA grep
# 4 Criar uma configuração nuclear pequena Diretiva de Grupo cgcreate -g cpuset: pequena cgset -r cpuset.cpus = 0-3 pequena cgset -r cpuset.mems = 0 pequeno # Criar uma política de grupo definição grande 8-core cgcreate -g cpuset: grande cgset - Grande cpuset.cpus = 0-7 P & lt cgset -R & lt cpuset.mems = 0 grande
# Padrão cpuset.cpus e cpuset.mems estão vazias; necessidade de fixar estes dois valores, em que o valor de referência de número do nó MEMS NUMA, o acima é encontrado por numactl --hardware 0
Nota :
1.cpuset subsistema são dois parâmetros obrigatórios são definidos, cpuset.cpus e cpuset.mems.
cpuset.cpus (obrigatório)
Isso permite que a CPU para especificar cgroup acesso tarefas. Esta é uma lista separada por vírgulas com o formato ASCII, usar traços ( "-") em nome do intervalo.
cpuset.mems (obrigatório)
Isso permite que as tarefas cgroup memória nó especificado acessível. Esta é uma lista separada por vírgulas com o formato ASCII, usar traços ( "-") em nome do intervalo.
2. Para o programa multi-threaded, o que não terá efeito;
3. configurou in / SYS / FS / cgroup / cpuset diretório aparecerá smal diretório, grande.
# Execute o comando
#cgexec -g cpuset: pequena comando execução do programa #cgexec -g cpuset: grande programa execute o comando
exemplo #
# Escrever um consumo roteiro cpu
vi t1.sh #! / bin / bash x = 0 enquanto [verdadeiro]; fazer x = $ x + 1 feito;
# Limite o programa para ser executado em um número fixo de núcleo da CPU
#cgexec -g cpuset: pequena sh t1.sh &
# Execute o topo de comando, e depois pressione 1 , você pode ver o número de casos por núcleo de CPU
3 restrições de uso processo de cpu
3.1 Exemplo 1
#yum montagem #yum a instalação libcgroup libcgroup Ferramentas numactl Y- #systemctl Estado cgconfig.service #systemctl Iniciar cgconfig.service # vista CGroup pontos de montagem (centos7.7), veja aqui cgroups subsistema #lssubsys -am
# Criar grupo de isolamento #cd / SYS / FS / cgroup / o CPU #mkdir cpu_test Descrição : O diretório é criado automaticamente gera os seguintes arquivos (Nota: O diretório não pode apagados manualmente, se você não se juntar a bota de Kai, irá desaparecer após a reinicialização ) #ls cpu_test /
# Execução de um script cpu consumo #vi t1.sh #! / Bin / bash X = 0 o tempo [verdadeiro]; fazer X = X + $ 1. FEITO; #chmod + X t1.sh #sh & t1.sh
# modificar o parâmetro # echo 20000> /sys/fs/cgroup/cpu/cpu_test/cpu.cfs_quota_us Nota: O padrão -1 não limita, agora em 20.000, é cpu.cfs_quota_us a 20000, cpu.cfs_period_us 100.000 em relação ao 20%; uso da CPU compreensível é limitado a 20%; # encontrar o número do processo aumentou tarefas da CPU dentro, olhando para cima, a utilização da CPU para baixo rapidamente #echo 2938 >> / sys / fs / cgroup / cpu / cpu_test / tarefas
Descrição : No caso acima, se os três são escritos para as tarefas de processo PID, haverá três casos, o processo de compartilhamento de 20% da CPU;
3.2 Exemplo 2
Descrição : Esta parte suplementar Exemplo 1, utilizando o comando para criar um grupo de controlo;
#创建控制群组 #cgcreate -g cpu:/g1 说明:这个命令会创建/sys/fs/cgroup/cpu/g1目录出来,在这个目录下有各种cgroup cpu的配置文件; #设置CPU限制参数 #cgset -r cpu.cfs_quota_us=20000 g1 #查看是否设置成功 #cgget -r cpu.cfs_quota_us g1 #启动进程,通过top可以看到cpu占用100%,同时拿到进程pid:2231 #cat t1.sh #/bin/bash x=0 while [ True ];do x=$x+1 done; #sh /tmp/t1.sh & #将此进程加入控制群组g1 #cgclassify -g cpu:/g1 2231 #cat /sys/fs/cgroup/cpu/g1/tasks 通过top看,cpu消耗变成了20% 注意:最好将一个进程写在一个控制组内;将多个进程写在一个控制组会共享cpu限制; 如:在一个控制组内写入3个进程,cpu限制使用为20%,每个进程大概会占6%左右;
4 限制内存使用量
#创建控制群组g2 #cgcreate -g memory:g2 #查看默认内存是没有限制的 cgget -r memory.limit_in_bytes g2 #限制内存只有1GB cgset -r memory.limit_in_bytes=1073741824 g2 #执行/tmp/highmemory.sh,进程号是21127 #vi /tmp/highmem.sh #/bin/bash x="a" while [ True ];do x=$x$x done; #将highmemory.sh进程加入g2的控制 #cgclassify -g memory:g2 21127
5 限制磁盘读取速度
#要控制/dev/sdb的磁盘,通过下述命令查到磁盘驱动号8,16 #ls -l /dev/sdb
#创建控制组,设定8,16磁盘有1MB的读取限制 #cgcreate -g blkio:g1 #cgset -r blkio.throttle.read_bps_device='8:16 10485760' g1 #启动读取测试命令,拿到pid 14468 #dd if=/dev/sdb of=/dev/null #通过命令可以看到对磁盘读写速度的消耗 #iotop #将进程加入g1控制组后,读取速度被限制 #cgclassify -g blkio:g1 14468
-------------------------------------------------------------------------------------------------------------------------
参考链接:
https://www.cnblogs.com/menkeyi/p/10941843.html
https://www.jianshu.com/p/dc3140699e79
https://blog.csdn.net/micklf/article/details/60868649
https://blog.csdn.net/kwame211/article/details/78730705