web-dev-qa-db-fra.com

Utilisation du processeur par intermittence à 100%

L'utilisation du processeur sur notre boîte de mesures est à 100% de manière intermittente, ce qui provoque:
'Erreur interne du serveur' lors du rendu des tableaux de bord Grafana

La seule application qui fonctionne sur notre machine est Docker avec 3 sous-conteneurs.

Voici nos détails de configuration:
3 sous-conteneurs exécutant \
cadvisor \
graphite\
grafana \
Statut du pilote \
Docker Version 17.09.0-ce \
Version du noyau 4.4.0-103-generic \
Version du système d'exploitation Ubuntu 16.04 LTS \
Stockage \
Pilote -> superposition2 \
Système de fichiers de sauvegarde -> extfs \
Prend en charge d_type -> true \
Native Overlay Diff -> true

Limite de permutation de mémoire -> 2,00 Go

Voici un extrait de cAdvisor:

enter image description here

Question : Y a-t-il un moyen de réduire l'utilisation du processeur?

4
gpullen

La réponse courte est oui. La réponse longue est probablement que quelqu'un a tenté de configurer un accès de conteneur aux cycles de la CPU hôte et qu'il a été configuré de manière incorrecte.

Par défaut, l’accès de chaque conteneur aux cycles de traitement de la machine hôte est illimité. Vous pouvez définir diverses contraintes pour limiter l’accès d’un conteneur donné aux cycles de processeur de la machine hôte. La plupart des utilisateurs utiliseront et configureront le planificateur CFS par défaut. Dans Docker 1.13 et versions ultérieures, vous pouvez également configurer le planificateur en temps réel.

Tu dois

Configurer le planificateur CFS par défaut

CFS est le planificateur de processeur du noyau Linux pour les processus Linux normaux. Plusieurs indicateurs d'exécution vous permettent de configurer la quantité d'accès aux ressources du processeur de votre conteneur. Lorsque vous utilisez ces paramètres, Docker modifie les paramètres du groupe de contrôle du conteneur sur la machine hôte.

Vous pouvez spécifier la quantité de ressources CPU disponibles qu'un conteneur peut utiliser, ainsi que Limiter les processeurs ou les cœurs spécifiques qu'un conteneur peut utiliser parmi plusieurs autres options relatives à la configuration de l'utilisation de la CPU. Pour plus d'informations, vérifiez la source.

Avertissement: La planification et la hiérarchisation de la CPU sont des fonctionnalités avancées au niveau du noyau. La plupart des utilisateurs n'ont pas besoin de changer ces valeurs par défaut. La définition incorrecte de ces valeurs peut rendre votre système hôte instable ou inutilisable.

Personnellement, j'attribuerais avec précaution 1/4 des cœurs de processeur disponibles à chaque conteneur, laissant une marge de manœuvre pour d'autres tâches. Donc, sur un docker quadricœur v1.13 et supérieur:

Je voudrais docker run -it --cpus="1" ubuntu /bin/bash

et sur v.1.12 et inférieur:

Je voudrais docker run -it --cpu-period=100000 --cpu-quota=25000 ubuntu /bin/bash

Cela semble être un bon point de départ pour un système quad core. Je voudrais ajuster ces paramètres pour obtenir le niveau de performance par rapport à la disponibilité que je souhaitais.

Source: https://docs.docker.com/engine/admin/resource_constraints/#configure-the-default-cfs-scheduler

2
Elder Geek