Instale o cgconfig no Ubuntu 16.04

7

Eu quero criar alguns grupos de controle usando cgroup .

Até agora, fiz o seguinte:

  1. Eu instalei alguns pacotes:

    sudo apt-get install cgroup-bin cgroup-lite cgroup-tools cgroupfs-mount libcgroup1
    
  2. Em seguida, criei o arquivo /etc/cgconfig.conf com o seguinte conteúdo:

    mount {
      cpuset  = /cgroup/cpuset;
      cpu     = /cgroup/cpu;
      cpuacct = /cgroup/cpuacct;
      memory  = /cgroup/memory;
      devices = /cgroup/devices;
      freezer = /cgroup/freezer;
      net_cls = /cgroup/net_cls;
      ns      = /cgroup/ns;
      blkio   = /cgroup/blkio;
    }
    
    group limitcpu{
      cpu {
        cpu.shares = 400;
      }
    }
    
    group limitmem{
      memory {
        memory.limit_in_bytes = 512m;
      }
    }
    
    group limitio{
      blkio {
        blkio.throttle.read_bps_device = "252:0         2097152";
      }
    }
    
    group browsers{
      cpu {
        cpu.shares = 200;
      }
      memory {
        memory.limit_in_bytes = 128m;
      }
    }
    

    de acordo com o guia aqui , assumindo, que o arquivo de configuração reside no mesmo local e usa a mesma sintaxe no Ubuntu, como ele usa no CentOS.

  3. Então, de acordo com esse guia, preciso iniciar o cgconfig service . Eu tentei com:

    sudo service cgconfig restart
    

    Mas, oh não! Um arquivo está faltando!:

    Failed to restart cgconfig.service: Unit cgconfig.service not found.
    
  4. Depois de alguns questionamentos e pesquisas, tentei:

    ● cgconfig.service
       Loaded: not-found (Reason: No such file or directory)
       Active: inactive (dead)
    

Então parece que eu simplesmente não estou tendo nenhum serviço cgconfig no meu sistema!

Eu procurei por ele usando:

sudo aptitude search cgconfig

No entanto, não é possível encontrar cgconfig .

Como posso instalar o cgconfig no meu Ubuntu 16.04?

    
por Zelphir 13.10.2016 / 13:23

2 respostas

9

OK, consegui fazer o mesmo que você fez, mas com algumas alterações:

1) Eu instalei os mesmos utilitários:

sudo apt-get install cgroup-bin cgroup-lite cgroup-tools cgroupfs-mount libcgroup1

2) Eu editei arquivos conf como este:

/etc/init/cgroup-lite.conf

description "mount available cgroup filesystems"
author "Serge Hallyn <[email protected]>"

start on mounted MOUNTPOINT=/sys/fs/cgroup

pre-start script
test -x /bin/cgroups-mount || { stop; exit 0; }
test -d /sys/fs/cgroup || { stop; exit 0; }
/bin/cgroups-mount
cgconfigparser -l /etc/cgconfig.conf
end script

post-stop script
if [ -x /bin/cgroups-umount ]
then
    /bin/cgroups-umount
fi
end script

/etc/cgconfig.conf

# Since systemd is working well, this section may not be necessary.
# Uncomment if you need it
#
# mount {
# cpuacct = /cgroup/cpuacct;
# memory = /cgroup/memory;
# devices = /cgroup/devices;
# freezer = /cgroup/freezer;
# net_cls = /cgroup/net_cls;
# blkio = /cgroup/blkio;
# cpuset = /cgroup/cpuset;
# cpu = /cgroup/cpu;
# }

group limitcpu{
  cpu {
    cpu.shares = 400;
  }
}

group limitmem{
  memory {
    memory.limit_in_bytes = 512m;
  }
}

group limitio{
  blkio {
    blkio.throttle.read_bps_device = "252:0         2097152";
  }
}

group browsers {
    cpu {
#       Set the relative share of CPU resources equal to 25%
    cpu.shares = "256";
}
memory {
#       Allocate at most 512M of memory to tasks
        memory.limit_in_bytes = "512m";
#       Apply a soft limit of 512 MB to tasks
        memory.soft_limit_in_bytes = "384m";
    }
}

group media-players {
    cpu {
#       Set the relative share of CPU resources equal to 25%
        cpu.shares = "256";
    }
    memory {
#       Allocate at most 256M of memory to tasks
        memory.limit_in_bytes = "256m";
#       Apply a soft limit of 196 MB to tasks
        memory.soft_limit_in_bytes = "128m";
    }
}

cgconfigparser -l /etc/cgconfig.conf

e /etc/cgrules.conf

user:process                                         subsystems   group
[user]:/usr/lib/chromium-browser/chromium-browser   cpu,memory      browsers
[user]:/usr/bin/clementine                        cpu,memory     media-players

Esse é um exemplo, use seu nome de usuário em vez de [usuário]. Você pode adicionar os aplicativos necessários para limitar e definir se deseja que eles sejam limitados à CPU, à memória ou a ambos.

Eu editei a linha GRUB_CMDLINE_LINUX_DEFAULT em /etc/default/grub :

GRUB_CMDLINE_LINUX_DEFAULT="cgroup_enable=memory swapaccount=1"

Atualizando:

sudo update-grub

3) E finalmente reiniciando para aplicar as alterações.

E é assim que eu tenho esse trabalho. Antes disso, eu estava tendo OOMs frequentes com multitarefa - com navegador cromo, clementine, texto sublime e outros aplicativos usando muitos recursos -, agora eles estão funcionando perfeitamente e eu posso executar multitarefas melhor.

Eu realmente espero que isso possa ajudar os outros.

Atualmente usando o Ubuntu 16.04 LTS com Intel Dual Core de 2.6 Ghz e 4 Gb. RAM.

    
por Rdrk 01.04.2017 / 23:22
2

Eu enfrentei o mesmo problema. Parece que não há serviço embutido nas distribuições atuais do Ubuntu para carregar os arquivos de configuração do cgroup.

Você encontrará alguns exemplos de scripts de inicialização (quebrados?) em / usr / share / doc / cgroup-tools / exemplos / cgconfig e / usr / share / doc / cgroup-tools / exemplos / cgred .

Para carregar manualmente os arquivos de configuração, você pode usar

# Loads /etc/cgconfig.conf 
cgconfigparser -l /etc/cgconfig.conf

# Loads /etc/cgrules.conf
cgrulesengd -vvv --logfile=/var/log/cgrulesengd.log

Como solução de um homem pobre, escrevi para mim mesmo um script de inicialização que carrega os dois arquivos na inicialização do sistema.

#!/bin/sh
### BEGIN INIT INFO
# Provides:          cgconf
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Should-Start:
# Should-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Configures CGroups
### END INIT INFO

start_service() {
  if is_running; then
    echo "cgrulesengd is running already!"
    return 1
  else
    echo "Processing /etc/cgconfig.conf..."
    cgconfigparser -l /etc/cgconfig.conf
    echo "Processing /etc/cgrules.conf..."
    cgrulesengd -vvv --logfile=/var/log/cgrulesengd.log
    return 0
  fi
}

stop_service() {
  if is_running; then
    echo "Stopping cgrulesengd..."
    pkill cgrulesengd
  else
    echo "cgrulesengd is not running!"
    return 1
  fi
}

status() {
  if pgrep cgrulesengd > /dev/null; then
    echo "cgrulesengd is running"
    return 0
  else
    echo "cgrulesengd is not running!"
    return 3
  fi
}

is_running() {
  status >/dev/null 2>&1
}

case "${1:-}" in
  start)
    start_service
    ;;
  stop)
    stop_service
    ;;
  status)
    status
    ;;
  *)
    echo "Usage: /etc/init.d/cgconf {start|stop|restart|status}"
    exit 2
    ;;
esac

exit $?

Salve este arquivo em /etc/init.d/cgconf e instale-o usando

# make the script executable
chmod 755 /etc/init.d/cgconf

# register the service
update-rc.d cgconf defaults

# start the service
service cgconf start

# check the status
service cgconf status
    
por sebthom 11.11.2016 / 00:59

Tags