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).
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. | |
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. | |
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. | |
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. | |
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. |
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.
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.
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 |
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) |
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 # |
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.
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.
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.
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 |
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).
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.
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 - |
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 |
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.
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.
Utilisez la commande newtask pour rejoindre le projet x-files.
# newtask -p x-files |
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) |
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 |
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 - |
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.
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 $$ |
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.
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 |
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 |
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 |
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 ] . . . |
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 |
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).
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` |
Appliquez une action globale de consignation système au contrôle de ressource task.max-lwps.
# rctladm -e syslog task.max-lwps |
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 |