Guide d'administration système : Gestion des ressources des conteneurs et des zones Oracle Solaris

Chapitre 7 Administration des contrôles des ressources (tâches)

Ce chapitre décrit comment gérer l'utilitaire de contrôle des ressources.

Pour avoir un aperçu sur cet utilitaire, reportez-vous au Chapitre 6Contrôles des ressources (présentation).

Administration des contrôles des ressources (liste des tâches)

Tâche 

Description 

Voir 

Définir les contrôles des ressources 

Définissez les contrôles des ressources pour un projet dans le fichier /etc/project.

Définition des contrôles des ressources

Obtenir ou réviser les valeurs de contrôle des ressources pour les processus, tâches ou projets actifs au niveau local 

Procédez à des interrogations d'exécution et à des modifications des contrôles des ressources associés à un processus, une tâche ou un projet actif sur le système. 

Utilisation de la commande prctl

Sur un système en cours de fonctionnement, afficher ou mettre à jour l'état global des contrôles des ressources 

Vérifiez l'état de connexion global de chaque contrôle de ressource à l'échelle du système. Configurez également le niveau de consignation syslog en cas de dépassement des contrôles.

Utilisation de la commande rctladm

Signaler l'état des utilitaires IPC (Interprocess Communication, communication interprocessus) actifs 

Affichez des informations au sujet des utilitaires IPC actifs. Notez les objets IPC contribuant à l'utilisation d'un projet.  

Utilisation d'ipcs

Déterminer si la capacité CPU allouée à un serveur Web est suffisante 

Définissez une action globale pour un contrôle de ressource. Cette action permet d'être averti lorsque la valeur de contrôle de ressource d'une entité est trop faible. 

Détermination de la capacité CPU allouée à un serveur Web

Définition des contrôles des ressources

ProcedureDéfinition du nombre maximum de processus légers (LWP) pour chaque tâche d'un projet

Cette procédure a pour objet d'ajouter un projet intitulé x-files dans le fichier /etc/project et de fixer un nombre maximum de LWP pour une tâche créée dans le projet.

  1. Connectez-vous en tant que superutilisateur ou prenez un rôle équivalent.

    Les rôles contiennent des autorisations et des commandes privilégiées. Pour plus d'informations au sujet des rôles, reportez-vous à la section Using the Solaris Management Tools With RBAC (Task Map) du System Administration Guide: Basic Administration.

  2. Exécutez la commande projadd avec l'option -K pour créer un projet appelé x-files. Définissez le nombre maximum de LWP (3 ) pour chaque tâche créée dans le projet.


    # projadd -K 'task.max-lwps=(privileged,3,deny)' x-files
    
  3. Vérifiez l'entrée dans le fichier /etc/project en utilisant l'une des méthodes suivantes :

    • Type :


      # projects -l
      system
              projid : 0
              comment: ""
              users  : (none)
              groups : (none)
              attribs: 
      .
      .
      .
      x-files
              projid : 100
              comment: ""
              users  : (none)
              groups : (none)
              attribs: task.max-lwps=(privileged,3,deny)
    • Type :


      # cat /etc/project
      system:0:System:::
      .
      .
      .
      x-files:100::::task.max-lwps=(privileged,3,deny)

Exemple 7–1 Exemple de session

Après avoir effectué toutes les étapes de cette procédure, lorsque le superutilisateur créera une tâche dans le projet x-files en rejoignant le projet à l'aide de la commande newtask , il n'aura pas la possibilité de définir plus de trois nouveaux processus légers (LWP) pendant l'exécution de cette tâche. Cela est illustré dans la session annotée suivante.


# newtask -p x-files csh

# prctl -n task.max-lwps $$
process: 111107: csh
NAME    PRIVILEGE    VALUE    FLAG   ACTION            RECIPIENT
task.max-lwps
        privileged       3       -   deny                      -
        system       2.15G     max   deny                      -
# id -p
uid=0(root) gid=1(other) projid=100(x-files)

# ps -o project,taskid -p $$
 PROJECT TASKID
 x-files    73

# csh        /* creates second LWP */

# csh        /* creates third LWP */

# csh        /* cannot create more LWPs */
Vfork failed
#

ProcedureDéfinition de plusieurs contrôles pour un projet

Le fichier /etc/project peut contenir plusieurs paramètres de contrôle de ressources pour chaque projet ainsi que diverses valeurs de seuil pour chaque contrôle. Les valeurs de seuils sont définies dans des clauses action et doivent être séparées par des virgules.

  1. Connectez-vous en tant que superutilisateur ou prenez un rôle équivalent.

    Les rôles contiennent des autorisations et des commandes privilégiées. Pour plus d'informations au sujet des rôles, reportez-vous à la section Using the Solaris Management Tools With RBAC (Task Map) du System Administration Guide: Basic Administration.

  2. Exécutez la commande projmod avec les options -s et -K pour appliquer les contrôles de ressources au projet x-files :


    # projmod -s -K 'task.max-lwps=(basic,10,none),(privileged,500,deny);
    process.max-file-descriptor=(basic,128,deny)' x-filesone line in file
    

    Les contrôles définis sont les suivants :

    • Un contrôle de base sans action pour le nombre maximum de LWP par tâche.

    • Un contrôle deny privilégié quant au nombre maximum de LWP par tâche. Ce contrôle provoque l'échec de la création d'un LWP en cas de dépassement du nombre maximum autorisé, comme le montre l'exemple proposé dans la section Définition du nombre maximum de processus légers (LWP) pour chaque tâche d'un projet.

    • Nombre limité de descripteurs de fichier par processus au niveau de base, ce qui provoque l'échec d'un appel open en cas de dépassement du seuil maximum.

  3. Vérifiez l'entrée dans le fichier en utilisant l'une des méthodes suivantes :

    • Type :


      # projects -l
      .
      .
      .
      x-files
              projid : 100
              comment: ""
              users  : (none)
              groups : (none)
              attribs: process.max-file-descriptor=(basic,128,deny)
                       task.max-lwps=(basic,10,none),(privileged,500,deny) one line in file
      
    • Type :


      # cat etc/project
      .
      .
      .
      x-files:100::::process.max-file-descriptor=(basic,128,deny);
      task.max-lwps=(basic,10,none),(privileged,500,deny) one line in file
      

Utilisation de la commande prctl

Servez-vous de la commande prctl pour procéder à des interrogations d'exécution et à des modifications des contrôles des ressources associés à un processus, une tâche ou un projet actif sur le système. Pour plus d'informations, voir la page de manuel prctl(1).

ProcedureAffichage des valeurs de contrôle des ressources par défaut à l'aide de la commande prctl

Appliquez cette procédure à un système pour lequel aucun contrôle de ressource n'a été prévu ou modifié. Le fichier /etc/system ou la base de données du projet ne peut contenir que des entrées non définies par défaut.

  1. Appliquez la commande prctl au processus de votre choix, par exemple le shell actuellement en cours d'exécution.


    # prctl $$
    process: 100337: -sh
    NAME    PRIVILEGE       VALUE    FLAG   ACTION                   RECIPIENT
    process.max-port-events
            privileged      65.5K       -   deny                             -
            system          2.15G     max   deny                             -
    process.crypto-buffer-limit
            system          16.0EB    max   deny                             -
    process.max-crypto-sessions
            system          18.4E     max   deny                             -
    process.add-crypto-sessions
            privileged        100       -   deny                             -
            system          18.4E     max   deny                             -
    process.min-crypto-sessions
            privileged         20       -   deny                             -
            system          18.4E     max   deny                             -
    process.max-msg-messages
            privileged      8.19K       -   deny                             -
            system          4.29G     max   deny                             -
    process.max-msg-qbytes
            privileged      64.0KB      -   deny                             -
            system          16.0EB    max   deny                             -
    process.max-sem-ops
            privileged        512       -   deny                             -
            system          2.15G     max   deny                             -
    process.max-sem-nsems
            privileged        512       -   deny                             -
            system          32.8K     max   deny                             -
    process.max-address-space
            privileged      16.0EB    max   deny                             -
            system          16.0EB    max   deny                             -
    process.max-file-descriptor
            basic             256       -   deny                        100337
            privileged      65.5K       -   deny                             -
            system          2.15G     max   deny                             -
    process.max-core-size
            privileged      8.00EB    max   deny                             -
            system          8.00EB    max   deny                             -
    process.max-stack-size
            basic           8.00MB      -   deny                        100337
            privileged      8.00EB      -   deny                             -
            system          8.00EB    max   deny                             -
    process.max-data-size
            privileged      16.0EB    max   deny                             -
            system          16.0EB    max   deny                             -
    process.max-file-size
            privileged      8.00EB    max   deny,signal=XFSZ                 -
            system          8.00EB    max   deny                             -
    process.max-cpu-time
            privileged      18.4Es    inf   signal=XCPU                      -
            system          18.4Es    inf   none                             -
    task.max-cpu-time
            system          18.4Es    inf   none                             -
    task.max-lwps
            system          2.15G     max   deny                             -
    project.max-contracts
            privileged      10.0K       -   deny                             -
            system          2.15G     max   deny                             -
    project.max-device-locked-memory
            privileged       499MB      -   deny                             -
            system          16.0EB    max   deny                             -
    project.max-port-ids
            privileged      8.19K       -   deny                             -
            system          65.5K     max   deny                             -
    project.max-shm-memory
            privileged      1.95GB      -   deny                             -
            system          16.0EB    max   deny                             -
    project.max-shm-ids
            privileged        128       -   deny                             -
            system          16.8M     max   deny                             -
    project.max-msg-ids
            privileged        128       -   deny                             -
            system          16.8M     max   deny                             -
    project.max-sem-ids
            privileged        128       -   deny                             -
            system          16.8M     max   deny                             -
    project.max-tasks
            system          2.15G     max   deny                             -
    project.max-lwps
            system          2.15G     max   deny                             -
    project.cpu-shares
            privileged          1       -   none                             -
            system          65.5K     max   none                             -
    zone.max-lwps
            system          2.15G     max   deny                             -
    zone.cpu-shares
            privileged          1       -   none                             -
            system          65.5K     max   none                             -

ProcedureAffichage des informations relatives à un contrôle de ressource précis à l'aide de la commande prctl

  1. Affichez le nombre maximum de descripteurs de fichier pour le shell actuellement en cours d'exécution.


    # prctl -n process.max-file-descriptor $$
    process: 110453: -sh
    NAME    PRIVILEGE       VALUE    FLAG   ACTION       RECIPIENT
    process.max-file-descriptor
            basic             256       -   deny            110453
            privileged      65.5K       -   deny                 -
            system          2.15G     max   deny     

ProcedureModification temporaire d'une valeur à l'aide de la commande prctl

Cet exemple de procédure fait appel à la commande prctl pour ajouter temporairement une nouvelle valeur privilégiée afin d'interdire l'utilisation de plus de trois LWP par projet pour le projet x-files. Le résultat est comparable à celui obtenu dans la section Définition du nombre maximum de processus légers (LWP) pour chaque tâche d'un projet.

  1. Connectez-vous en tant que superutilisateur ou prenez un rôle équivalent.

    Les rôles contiennent des autorisations et des commandes privilégiées. Pour plus d'informations au sujet des rôles, reportez-vous à la section Using the Solaris Management Tools With RBAC (Task Map) du System Administration Guide: Basic Administration.

  2. Utilisez la commande newtask pour rejoindre le projet x-files.


    # newtask -p x-files
    
  3. Exécutez la commande id avec l'option -p pour vous assurer que le projet rejoint est celui qui convient.


    # id -p
    uid=0(root) gid=1(other) projid=101(x-files)
  4. Ajoutez une nouvelle valeur privilégiée pour project.max-lwps afin de limiter le nombre de LWP à trois.


    # prctl -n project.max-lwps -t privileged -v 3 -e deny -i project x-files
    
  5. Vérifiez le résultat obtenu.


    # prctl -n project.max-lwps -i project x-files
    process: 111108: csh
    NAME    PRIVILEGE    VALUE    FLAG   ACTION            RECIPIENT
    project.max-lwps
            privileged       3       -   deny                      -
            system       2.15G     max   deny                      -

ProcedureRéduction de la valeur de contrôle des ressources à l'aide de la commande prctl

  1. Connectez-vous en tant que superutilisateur ou prenez un rôle équivalent.

    Les rôles contiennent des autorisations et des commandes privilégiées. Pour plus d'informations au sujet des rôles, reportez-vous à la section Using the Solaris Management Tools With RBAC (Task Map) du System Administration Guide: Basic Administration.

  2. Exécutez la commande prctl avec l'option -r pour changer la valeur minimale du contrôle de ressource process.max-file-descriptor .


    # prctl -n process.max-file-descriptor -r -v 128 $$
    

ProcedureAffichage, remplacement et vérification de la valeur d'un contrôle dans un projet à l'aide de la commande prctl

  1. Connectez-vous en tant que superutilisateur ou prenez un rôle équivalent.

    Les rôles contiennent des autorisations et des commandes privilégiées. Pour plus d'informations au sujet des rôles, reportez-vous à la section Using the Solaris Management Tools With RBAC (Task Map) du System Administration Guide: Basic Administration.

  2. Vérifiez la valeur de project.cpu-shares dans le projet group.staff.


    # prctl -n project.cpu-shares -i project group.staff
    project: 2: group.staff
    NAME    PRIVILEGE       VALUE    FLAG   ACTION     RECIPIENT
    project.cpu-shares
            privileged          1       -   none               -
            system          65.5K     max   none 
  3. Remplacez la valeur actuelle de project.cpu-shares (1) par la valeur 10.


    # prctl -n project.cpu-shares -v 10 -r -i project group.staff
    
  4. Vérifiez la valeur de project.cpu-shares dans le projet group.staff.


    # prctl -n project.cpu-shares -i project group.staff
    project: 2: group.staff
    NAME    PRIVILEGE       VALUE    FLAG   ACTION     RECIPIENT
    project.cpu-shares
            privileged         10       -   none               -
            system          65.5K     max   none 

Utilisation de la commande rctladm

Mode d'emploi de la commande rctladm

Servez-vous de la commande rctladm pour procéder à des interrogations d'exécution et à des modifications de l'état global de l'utilitaire de contrôle des ressources. Pour plus d'informations, voir la page de manuel rctladm(1M).

Vous pouvez, par exemple, utiliser la commande rctladm avec l'option -e pour activer l'attribut syslog global d'un contrôle de ressource. En cas de dépassement du contrôle, une notification est consignée dans le journal au niveau syslog spécifié. Pour activer l'attribut syslog global de process.max-file-descriptor , entrez l'instruction suivante :


# rctladm -e syslog process.max-file-descriptor

En l'absence d'argument, la commande rctladm affiche les indicateurs globaux, y compris l'indicateur de type global, pour chaque contrôle de ressource.


# rctladm
process.max-port-events     syslog=off  [ deny count ]
process.max-msg-messages    syslog=off  [ deny count ]
process.max-msg-qbytes      syslog=off  [ deny bytes ]
process.max-sem-ops         syslog=off  [ deny count ]
process.max-sem-nsems       syslog=off  [ deny count ]
process.max-address-space   syslog=off  [ lowerable deny no-signal bytes ]
process.max-file-descriptor syslog=off  [ lowerable deny count ]
process.max-core-size       syslog=off  [ lowerable deny no-signal bytes ]
process.max-stack-size      syslog=off  [ lowerable deny no-signal bytes ]
.
.
.

Utilisation d'ipcs

Mode d'utilisation d'ipcs

Servez-vous de la commande ipcs pour afficher des informations au sujet des utilitaires IPC actifs. Pour plus d'informations, voir la page de manuel ipcs(1).

Vous pouvez exécuter la commande ipcs avec l'option -J pour connaître la limite d'un projet prévue pour un objet IPC.


# ipcs -J
    IPC status from <running system> as of Wed Mar 26 18:53:15 PDT 2003
T         ID      KEY        MODE       OWNER    GROUP    PROJECT
Message Queues:
Shared Memory:
m       3600      0       --rw-rw-rw-   uname    staff    x-files
m        201      0       --rw-rw-rw-   uname    staff    x-files
m       1802      0       --rw-rw-rw-   uname    staff    x-files
m        503      0       --rw-rw-rw-   uname    staff    x-files
m        304      0       --rw-rw-rw-   uname    staff    x-files
m        605      0       --rw-rw-rw-   uname    staff    x-files
m          6      0       --rw-rw-rw-   uname    staff    x-files
m        107      0       --rw-rw-rw-   uname    staff    x-files
Semaphores:
s          0      0       --rw-rw-rw-   uname    staff    x-files

Avertissements relatifs à la capacité

Une action globale appliquée à un contrôle de ressource vous permet d'être averti lorsqu'une entité entre en conflit avec une valeur de contrôle de ressource trop réduite.

Supposons, par exemple, que vous souhaitiez déterminer si un serveur Web dispose d'une capacité CPU suffisante pour assurer sa charge de travail habituelle. Vous pourriez analyser les données sar correspondant au temps d'inactivité CPU et à la charge moyenne. Vous pourriez également examiner les données de comptabilisation étendue afin de déterminer le nombre de processus simultanés exécutés pour le processus serveur Web.

Le plus simple, cependant, serait d'intégrer le serveur Web à une tâche. Il suffirait, ensuite, de définir une action globale à l'aide de la commande syslog, afin d'être averti si une tâche dépasse le nombre de LWP programmé qui convient aux capacités de la machine.

Pour plus d'informations, voir la page de manuel sar(1).

ProcedureDétermination de la capacité CPU allouée à un serveur Web

  1. Servez-vous de la commande prctl pour intégrer un contrôle de ressource privilégié (possédé par un superutilisateur) aux tâches contenant un processus httpd. Limitez à 40 le nombre total de LWP de chaque tâche et désactivez toutes les actions locales.


    # prctl -n task.max-lwps -v 40 -t privileged -d all `pgrep httpd`
    
  2. Appliquez une action globale de consignation système au contrôle de ressource task.max-lwps.


    # rctladm -e syslog task.max-lwps
    
  3. Observez si la charge de travail perturbe le contrôle de ressource.

    Le cas échéant, vous obtenez des messages /var/adm/messages semblables à celui-ci :


    Jan  8 10:15:15 testmachine unix: [ID 859581 kern.notice] 
    NOTICE: privileged rctl task.max-lwps exceeded by task 19