Installer cgconfig dans Ubuntu 16.04


13

Je veux créer des groupes de contrôle en utilisant cgroup.

Jusqu'à présent, j'ai fait ce qui suit:

  1. J'ai installé quelques packages:

    sudo apt-get install cgroup-bin cgroup-lite cgroup-tools cgroupfs-mount libcgroup1
    
  2. J'ai ensuite créé le /etc/cgconfig.conffichier avec le contenu suivant:

    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;
      }
    }
    

    selon le guide ici , en supposant que le fichier de configuration réside au même emplacement et utilise la même syntaxe sur Ubuntu, comme il utilise sur CentOS.

  3. Ensuite, selon ce guide, je dois commencer le cgconfig service. J'ai essayé avec:

    sudo service cgconfig restart
    

    Mais, oh non! Un fichier est manquant!:

    Failed to restart cgconfig.service: Unit cgconfig.service not found.
    
  4. Après quelques interrogations et recherches, j'ai essayé:

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

Il semble donc que je n'ai tout simplement aucun service cgconfig sur mon système!

Je l'ai recherché en utilisant:

sudo aptitude search cgconfig

Cependant, aucun cgconfign'est trouvé.

Comment installer cgconfigsur mon Ubuntu 16.04?

Réponses:


15

OK, je me suis débrouillé pour faire la même chose que vous, mais avec quelques changements:

1) J'ai installé les mêmes utilitaires:

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

2) J'ai édité des fichiers de conf comme ceci:

/etc/init/cgroup-lite.conf

description "mount available cgroup filesystems"
author "Serge Hallyn <serge.hallyn@canonical.com>"

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

Et /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

C'est un exemple, utilisez votre nom d'utilisateur au lieu de [utilisateur]. Vous pouvez ajouter les applications dont vous avez besoin pour limiter et définir si vous voulez qu'elles soient limitées en CPU, en mémoire ou les deux.

J'ai édité la GRUB_CMDLINE_LINUX_DEFAULTligne dans /etc/default/grub:

GRUB_CMDLINE_LINUX_DEFAULT="cgroup_enable=memory swapaccount=1"

Mise à jour:

sudo update-grub

3) Et enfin redémarrer pour appliquer les changements.

Et c'est comme ça que ça fonctionne. Avant cela, j'avais des MOO fréquents avec multitâche - avec navigateur chrome, clémentine, texte sublime et d'autres applications utilisant beaucoup de ressources -, maintenant ils fonctionnent bien et je peux mieux effectuer plusieurs tâches.

J'espère vraiment que cela pourra aider les autres.

Utilise actuellement Ubuntu 16.04 LTS avec Intel Dual Core 2.6 Ghz et 4 Gb. RAM.


1
Cela ressemble à la bonne approche, mais au lieu d'utiliser cgrules.conf, je trouve que cgexec est meilleur. De plus, je pense que vous vouliez nommer le fichier cgconfig.confet non cgconf.conf. Si systemd fait son travail, je ne pense pas que vous ayez besoin de la mountsection de ce fichier.
Mark

J'ai édité cette réponse en suivant la recommandation de Mark, l'ai testée et fonctionne bien.
Rdrk

@Mark, je serais intéressé par votre solution avec cgexec.
Jonathan

9

J'ai fait face au même problème. Il semble qu'il n'y ait pas de service intégré dans les distributions Ubuntu actuelles pour charger les fichiers de configuration de cgroup.

Vous trouverez des exemples de scripts d'initialisation (cassés?) Dans / usr / share / doc / cgroup-tools / examples / cgconfig et / usr / share / doc / cgroup-tools / examples / cgred .

Pour charger manuellement les fichiers de configuration, vous pouvez utiliser

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

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

En tant que solution d'un pauvre, je me suis écrit un script d'initialisation qui charge les deux fichiers au démarrage du système.

#!/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 $?

Enregistrez ce fichier dans /etc/init.d/cgconf et installez-le en utilisant

# 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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.