web-dev-qa-db-fra.com

Comment limiter un utilisateur entier à moins de 10% de la CPU, pas seulement un processus?

Je suis en cours de course Centos, cPanel/WHM, et j'ai installé CPULIMIT.

Le problème que j'ai d'avoir est l'un de mes utilisateurs utilise une quantité extrême d'utilisation du processeur. Plus de 100% de manière constante et cela ralentit mon serveur.

Un autre problème est qu'ils sont un ami et non malveillant, je ne veux donc pas les suspendre.

De plus, ce que je ne peux pas le limiter par processus, car ce processus change chaque seconde. C'est un processus différent à chaque fois.

J'ai essayé ce qui suit mais ça ne marche pas.

cpulimit -l 10 -e /home/[username]/public_html/theirwebsite.org/index.php

Je viens d'être retourné,

No process found
No process found
No process found
No process found
No process found
No process found

etc

Il y a deux choses qui utilisent cette utilisation extrême de la CPU.

La première chose est ce fichier à cet endroit, index.php. Autre est [php], peu importe ce que cela signifie dans WHM. Mais principalement le index.php c'est le problème.

Si je pouvais limiter cela index.php Fichier à cet endroit, cela pourrait aider à atténuer cette question.

Au fait, j'ai essayé le -P Flag mais ce n'est pas disponible comme une option contrairement à la documentation.

cpulimit -l 10 -P /home/[username]/public_html/theirwebsite.org/index.php

retour

cpulimit: invalid option -- 'P'
Usage: cpulimit [OPTIONS...] TARGET
   OPTIONS
      -l, --limit=N          percentage of cpu allowed from 0 to 1600 (required)
      -v, --verbose          show control statistics
      -z, --lazy             exit if there is no target process, or if it dies
      -i, --include-children limit also the children processes
      -h, --help             display this help and exit
   TARGET must be exactly one of these:
      -p, --pid=N            pid of the process (implies -z)
      -e, --exe=FILE         name of the executable program file or path name
      COMMAND [ARGS]         run this command and limit it (implies -z)

On dirait que je dois le faire avec le -e drapeau.

Idéalement, je voudrais limiter l'ensemble du compte d'utilisateur.

Et oui, je sais sur CloudLinux mais je ne peux pas le faire maintenant. Jusqu'à ce que je puisse faire cela, j'ai besoin d'aide pour le faire manuellement avec quelque chose qui ne nécessite pas de redémarrage de serveur.

10
user7783780

Vous avez raison que vous ne puissiez pas limiter votre ami à l'aide d'un processus (PID), Apache apparaît un nouveau processus (travailleur) pour chaque demande qu'il reçoit, attribuant une nouvelle PID à chaque fois.

En fonction de quoi PHP Handler vous configurez-vous dans WHM -> MultiPHP Manager -> PHP Handlers, Apache s'exécutera PHP scripts comme elle-même ou exécutez-les comme l'utilisateur qui possède le fichier. Si vous utilisez suPHP comme gestionnaire, le PHP processus sera exécuté comme par le compte propriétaire du fichier.

Si le script est exécuté par le propriétaire, vous pouvez limiter l'utilisation du processeur à un compte en l'ajoutant au /etc/security/limits.conf fichier. Bien que vous ne puissiez pas utiliser cela pour limiter le pourcentage de la CPU exactement, vous pouvez modifier leur valeur "belle" afin que leurs processus prennent une priorité inférieure à celle des autres processus du serveur. En tant que tel, d'autres processus n'auront pas à attendre aussi longtemps.

Je n'ai jamais utilisé cela moi-même (je courais Cloudlinux), mais je crois que l'entrée suivante devrait Aide avec le problème:

username    hard    priority    30

Cela définit la priorité maximale des processus exécutés par l'utilisateur à 30. D'après ce que je comprends, une priorité plus élevée signifie en réalité que d'autres processus (avec une priorité inférieure) obtiennent davantage de temps de processeur.

Sur mon serveur exécutant CPanel, la plupart des processus ont une priorité de 20, alors suivant la logique ci-dessus, définir la priorité de cet utilisateur à 30 devraient permettre à d'autres processus d'exécuter avant ces processus.

1
cascer1

Avez-vous essayé cgroups ?


  • Installez le service Sudo yum install libcgroup et commencer Sudo service cgconfig start.
  • Après avoir vu la configuration du sous-système pour les cgroups en exécutant Sudo ls /cgroup

Créez un cgroup nommé limitcpu. Des lignes qui commencent par le groupe Créer des cgroups et définissent des paramètres de sous-système.

Exemple /etc/cgconfig.conf:

group limitcpu{

        cpu {
                cpu.shares = 200;
                # cpu.cfs_period_us
                # cpu.cfs_quota_us
        }
        memory {

        }
}

Pour la limitation de la CPU, il existe un couple de paramètres accordables que vous pouvez utiliser pour limiter l'utilisation du processeur flagrant

Si les tâches d'un cgroup devraient pouvoir accéder à un seul processeur pour 0,1 (10%) secondes de 1 seconde, définissez cpu.cfs_quota_us sur 100000 et cpu.cfs_period_us à 1000000.


CGRED est un service (qui démarre le service Cgrulesengd) qui déplace des tâches en cgroups conformément aux paramètres définis dans le fichier /etc/cgrules.conf. Les entrées dans le fichier /etc/cgrules.conf peuvent prendre l'une de ces deux formes:

user subsystems control_group
user:command subsystems control_group

user avec un nom d'utilisateur ou un nom de groupe préfixé avec le caractère "@". Remplacer subsystems avec une liste de noms de sous-système séparés par des virgules, control_group représente un chemin d'accès au cgroup, et command représente un nom de processus ou une voie de commande complète d'un processus.

Exemple etc/cgrules.conf:

*:firefox      cpu,memory      browsers/
@admin:memhog  memory          limitmem/
cpuhog         cpu             limitcpu/
  • firefox _ Les processus exécutés par un utilisateur seront automatiquement ajoutés aux navigateurs cgroup et limité dans les sous-systèmes CPU et Memory.

  • memhog processus exécutés par quiconque dans le groupe admin sera ajouté au cgroup limitmem et limité dans le sous-système de mémoire.

    - Votre utilisateur, cpuhog, sera ajouté à Cgroup 'LimitcPu' et limité dans les sous-systèmes CPU.


Dans les cas d'utilisation anticipée, vous pouvez essayer d'utiliser un modèle à la place.

Par exemple, spécifiez le modèle suivant dans /etc/cgconfig.conf:

template users/%g/%u {
                     cpuacct{
                     }
                     cpu {
                        cpu.shares = "1000";
                     }
          }

Ensuite, utilisez les utilisateurs /% g /% U Modèle de la troisième rangée d'une entrée /etc/cgrules.conf, qui peut être la suivante:

peter:ftp       cpu     users/%g/%u

Le %g and %u Variables utilisées ci-dessus sont automatiquement remplacées par un nom de groupe et d'utilisateur en fonction du propriétaire du processus FTP.

Si le processus appartient à Peter à partir du groupe AdminStaff, le chemin ci-dessus est traduit en users/adminstaff/peter.

Le service CGRED recherche ensuite ce répertoire et s'il n'existe pas, CGRED le crée et attribue le processus aux utilisateurs/AdminStaff/Peter/Tâches.

Notez que les règles de modèle s'appliquent uniquement aux définitions des modèles dans les fichiers de configuration, même si "Utilisateurs du groupe/AdminStaff/Peter" a été défini dans /etc/cgconfig.conf, il serait ignoré en faveur des "utilisateurs de modèles /% g /% U ".

tutoriel par océan numérique.

Introduction aux groupes de contrôle.

7
Carrein