Work on TP3
This commit is contained in:
parent
d3abdfa1d1
commit
1aa9530f3a
8 changed files with 130 additions and 103 deletions
|
|
@ -11,7 +11,7 @@ de ressources ou altérer leurs priorités.
|
|||
|
||||
## Premiers tests
|
||||
|
||||
Nous allons commencer par faire quelques tests avec le *cgroup* freezer, qui
|
||||
Nous allons commencer par faire quelques tests avec le *cgroup* *freezer*, qui
|
||||
permet d'interrompre l'exécution d'un groupe de processus et de la reprendre.
|
||||
|
||||
|
||||
|
|
@ -30,17 +30,16 @@ mount -t cgroup -o freezer none /sys/fs/cgroup/freezer/
|
|||
</div>
|
||||
|
||||
Cette dernière commande monte le groupe de processus racine, pour le *cgroup*
|
||||
freezer. Tous les dossiers contenu dans cette racine sont donc des
|
||||
*freezer*. Tous les dossiers contenu dans cette racine sont donc des
|
||||
sous-groupes.
|
||||
|
||||
|
||||
### Création d'un nouveau groupe
|
||||
|
||||
La première étape dans l'utilisation d'un *cgroup* est de créer un nouveau
|
||||
groupe.
|
||||
La première étape dans l'utilisation d'un *cgroup* est de créer un groupe.
|
||||
|
||||
Pour créer un groupe, il suffit de créer un nouveau dossier dans un groupe
|
||||
existant, par exemple la racine :
|
||||
Pour ce faire, il suffit de créer un nouveau dossier dans un groupe existant,
|
||||
par exemple la racine :
|
||||
|
||||
<div lang="en-US">
|
||||
```
|
||||
|
|
@ -50,7 +49,7 @@ ls /sys/fs/cgroup/freezer/virli/
|
|||
</div>
|
||||
|
||||
Nous avons maintenant un nouveau groupe de processus `virli` dans le *cgroup*
|
||||
Freezer. Comme il s'agit d'une hiérarchie, le groupe `virli` hérite des
|
||||
*Freezer*. Comme il s'agit d'une hiérarchie, le groupe `virli` hérite des
|
||||
propriétés de son (ses) père(s).
|
||||
|
||||
|
||||
|
|
@ -58,7 +57,7 @@ propriétés de son (ses) père(s).
|
|||
|
||||
Pour le moment, ce nouveau groupe ne contient aucune tâche.
|
||||
|
||||
Ouvrons un nouveau terminal (c'est lui que l'on va freezer), et récupérons son
|
||||
Ouvrons un nouveau terminal (c'est lui que l'on va geler), et récupérons son
|
||||
PID : `echo $$`.
|
||||
|
||||
La liste des processus rattachés à un *cgroup* se trouve dans le fichier `task`
|
||||
|
|
@ -76,6 +75,11 @@ En validant cette commande, nous avons déplacé le processus dans ce groupe, il
|
|||
n'est alors plus dans aucun autre groupe (pour ce *cgroup*, il ne bouge pas
|
||||
dans les autres *cgroup*s).
|
||||
|
||||
Malgré l'utilisation de la redirection `>` (et non `>>`), il s'agit belle et
|
||||
bien d'un ajout au fichier et non d'un écrasement. Il faut garder en tête que
|
||||
le système de fichier est entièrement simulé et que certains comportements sont
|
||||
adaptés.
|
||||
|
||||
|
||||
### Consultation de l'état
|
||||
|
||||
|
|
@ -88,7 +92,7 @@ Nous pouvons consulter l'état de gel du groupe en affichant le contenu du
|
|||
fichier\newline `/sys/fs/cgroup/freezer/virli/freezer.state`.
|
||||
|
||||
Pour plus d'information sur les différents fichiers présents dans ce *cgroup*,
|
||||
consulter
|
||||
consultez
|
||||
[la documentation associée](https://www.kernel.org/doc/Documentation/cgroup-v1/freezer-subsystem.txt).
|
||||
|
||||
|
||||
|
|
@ -135,23 +139,28 @@ l'installer sur notre machine) :
|
|||
|
||||
<div lang="en-US">
|
||||
```shell
|
||||
docker run -d -p 8086:8086 -p 8083:8083 influxdb
|
||||
docker container run --name mytsdb -d -p 8086:8086 influxdb
|
||||
```
|
||||
</div>
|
||||
|
||||
Il nous faut ensuite créer une base de données pour y stocker les métriques,
|
||||
rendez-vous à <http://localhost:8083/> puis entrez la requête :
|
||||
Il nous faut ensuite créer une base de données pour y stocker nos
|
||||
métriques. Voici comment on s'était débrouillé dans un précédent TP :
|
||||
|
||||
<div lang="en-US">
|
||||
```sql
|
||||
```shell
|
||||
docker container exec -i mytsdb <<EOF
|
||||
CREATE DATABASE metrics;
|
||||
SHOW DATABASES;
|
||||
EOF
|
||||
```
|
||||
</div>
|
||||
|
||||
Vérifiez bien que la base de données `metrics` a bien été créée.
|
||||
|
||||
|
||||
### Monitoring instantané vers la console
|
||||
|
||||
Dans un premier temps, commençons par afficher dans la console la quantité de
|
||||
Dans un premier temps, commençons par afficher dans la console, la quantité de
|
||||
mémoire utilisée par le groupe monitoré.
|
||||
|
||||
* Arguments de la ligne de commande :
|
||||
|
|
@ -171,7 +180,7 @@ par défaut par votre système. Si vous êtes dans ce cas, essayez d'ajouter
|
|||
### Monitoring vers InfluxDB
|
||||
|
||||
Maintenant, envoyons nos données vers la base
|
||||
<https://docs.influxdata.com/influxdb/v1.0/guides/writing_data/> :
|
||||
<https://docs.influxdata.com/influxdb/v1.3/guides/writing_data/> :
|
||||
|
||||
<div lang="en-US">
|
||||
```
|
||||
|
|
@ -181,7 +190,7 @@ curl -i -XPOST 'http://localhost:8086/write?db=metrics' --data-binary \
|
|||
</div>
|
||||
|
||||
Pour vérifier que les données ont bien été ajoutées, nous pouvons effectuer la
|
||||
requête suivante dans l'interface web d'InfluxDB :
|
||||
requête suivante dans notre client `influx` :
|
||||
|
||||
<div lang="en-US">
|
||||
```sql
|
||||
|
|
@ -225,12 +234,27 @@ privilèges particuliers.
|
|||
|
||||
## Fixer des limites
|
||||
|
||||
Au delà de la simple consultation,
|
||||
Au delà de la simple consultation, les *cgroup*s peuvent servir à limiter la
|
||||
quantité de ressources mise à disposition à un groupe de processus.
|
||||
|
||||
Pour définir une limite, nous allons écrire la valeur dans le fichier
|
||||
correspondant à une valeur limite, comme par exemple
|
||||
`memory.max_usage_in_bytes`, qui limite le nombre d'octets que notre groupe de
|
||||
processus va pouvoir allouer au maximum :
|
||||
|
||||
## OOM-killer
|
||||
```shell
|
||||
42sh$ cat /sys/fs/cgroup/memory/virli/memory.max_usage_in_bytes
|
||||
0
|
||||
# 0 = Aucune limite
|
||||
42sh$ echo 4M > /sys/fs/cgroup/memory/virli/memory.max_usage_in_bytes
|
||||
# Maintenant, la limite est à 4MB, vérifions...
|
||||
42sh$ cat /sys/fs/cgroup/memory/virli/memory.max_usage_in_bytes
|
||||
4194304
|
||||
```
|
||||
|
||||
<!-- https://lwn.net/Articles/590960/ -->
|
||||
Chaque *cgroup*s défini de nombreux indicateurs et possède de nombreux
|
||||
limiteurs, n'hésitez pas à consulter la documentation associée à chaque
|
||||
*cgroup*.
|
||||
|
||||
|
||||
## Pour aller plus loin
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue