In diesem Kapitel wird die Verwaltung von Resource Controls beschrieben.
Eine Einführung in die Resource Controls finden Sie in Kapitel 6Einführung in die Resource Controls.
Aufgabe |
Beschreibung |
Siehe |
---|---|---|
Einrichten der Resource Controls. |
Einrichten der Resource Controls für ein Projekt in der Datei /etc/project. | |
Abrufen oder Ändern der Werte von Resource Controls für aktive Prozesse, Aufgaben oder Projekte mit lokalem Geltungsbereich. |
Durchführen von Echtzeitabfragen oder Änderungen von Resource Controls, die einem aktiven Prozess, einer Aufgabe oder einem Projekt im System zugeteilt sind. | |
Anzeigen oder Aktualisieren des globalen Zustands von Resource Controls auf einem laufenden System. |
Anzeigen des globalen Logging-Status jeder Resource Control im System. Darüber hinaus wird die Stufe der syslog-Protokollierung festgelegt, wenn Resource Controls überschritten werden. | |
Berichten des Status der aktiven prozessübergreifenden Kommunikation (Interprocess Communication, IPC). |
Anzeigen von Informationen zur aktiven prozessübergreifenden Kommunikation. Überwachen, welche IPC-Objekte zur Nutzung durch ein Projekt beitragen. | |
Feststellen, ob einem Webserver ausreichend CPU-Kapazität zugeordnet ist. |
Einrichten einer globalen Aktion für eine Resource Control. Mit dieser Aktion können Sie einen Bericht alle Einheiten erstellen, deren Resource Control-Wert zu niedrig eingestellt ist. |
So stellen Sie fest, ob einem Webserver ausreichend CPU-Kapazität zugeordnet ist |
Dieses Verfahren fügt ein Projekt namens x-files zur Datei /etc/project hinzu und legt die maximale Anzahl der LWPs für eine Aufgabe fest, die in dem Projekt erstellt wird.
Melden Sie sich als Superuser an oder nehmen Sie eine entsprechende Rolle an.
Rollen umfassen Autorisierungen und privilegierte Befehle. Weitere Informationen zu Rollen finden Sie unter Using the Solaris Management Tools With RBAC (Task Map) in System Administration Guide: Basic Administration.
Geben Sie den Befehl projadd mit der Option -K ein, um ein Projekt mit der Bezeichnung x-files zu erstellen. Legen Sie die maximale Anzahl der LWPs für eine Aufgabe, die in dem Projekt erstellt wird, mit 3 fest.
# projadd -K 'task.max-lwps=(privileged,3,deny)' x-files |
Zeigen Sie den Eintrag in der Datei /etc/project mithilfe einer der folgenden Methoden an:
Geben Sie Folgendes ein:
# 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) |
Geben Sie Folgendes ein:
# cat /etc/project system:0:System::: . . . x-files:100::::task.max-lwps=(privileged,3,deny) |
Nach dem Implementieren der Schritte dieses Verfahrens kann der Superuser, wenn er durch Verbinden des Projekts mit newtask eine neue Aufgabe im Projekt x-files erstellt, nicht mehr als drei LWPs erstellen, solange diese Aufgabe ausgeführt wird. Dies wird in der folgenden, mit Anmerkungen versehenen Beispielsitzung gezeigt.
# 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 # |
Die Datei /etc/project kann Einstellungen für mehrere Resource Controls für jedes Projekt sowie mehrere Schwellenwerte für jede Resource Control enthalten. Schwellenwerte sind in den Aktionsklauseln definiert, die bei mehreren Werten durch Kommata voneinander getrennt sind.
Melden Sie sich als Superuser an oder nehmen Sie eine entsprechende Rolle an.
Rollen umfassen Autorisierungen und privilegierte Befehle. Weitere Informationen zu Rollen finden Sie unter Using the Solaris Management Tools With RBAC (Task Map) in System Administration Guide: Basic Administration.
Geben Sie den Befehl projmod mit den Optionen -s und -K ein, um die Resource Controls für das Projekt x-files einzustellen:
# projmod -s -K 'task.max-lwps=(basic,10,none),(privileged,500,deny); process.max-file-descriptor=(basic,128,deny)' x-filesone line in file |
Die folgenden Resource Controls werden eingerichtet:
Eine basic-Resource Control ohne Aktion mit Bezug auf die maximale Anzahl der LWPs pro Aufgabe.
Eine privilegierte deny-Resource Control mit Bezug auf die maximale Anzahl der LWPs pro Aufgabe. Diese Resource Control sorgt dafür, dass das Erstellen von LWPs über den Höchstwert hinaus fehlschlägt (wie vorherigen Beispiel So richten Sie die maximale Anzahl der LWPs für jede Aufgabe in einem Projekt ein gezeigt).
Ein Grenzwert für die maximale Anzahl der Dateideskriptoren pro Prozess auf der Stufe basic. Dieser Grenzwert lässt alle offenen Aufrufe fehlschlagen, die den Höchstwert übersteigen.
Zeigen Sie den Eintrag in der Datei mithilfe einer der folgenden Methoden an:
Geben Sie Folgendes ein:
# 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 |
Geben Sie Folgendes ein:
# 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 |
Mit dem Befehl prctl erstellen Sie Echtzeitabfragen oder Änderungen von Resource Controls, die einem aktiven Prozess, einer Aufgabe oder einem Projekt im System zugeteilt sind. Weitere Informationen finden Sie in der Manpage prctl(1).
Dieses Verfahren muss auf einem System verwendet werden, bei dem keine Resource Controls eingestellt oder geändert wurden. Es können nur nicht standardmäßige Einträge in der Datei /etc/system oder in der project-Datenbank vorliegen.
Verwenden Sie den Befehl prctl an einem beliebigen Prozess, z. B. der aktuell ausgeführten Shell.
# 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 - |
Zeigen Sie den maximalen Dateideskriptor für die aktuell ausgeführte Shell an.
# 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 |
In diesem Beispielverfahren wird mit dem Befehl prctl ein neuer privilegierter Wert hinzugefügt, um zu verhindern, dass mehr als drei LWPs pro Projekt für das x-files-Projekt verwendet werden. Das Ergebnis ist mit dem Resultat unter So richten Sie die maximale Anzahl der LWPs für jede Aufgabe in einem Projekt ein vergleichbar.
Melden Sie sich als Superuser an oder nehmen Sie eine entsprechende Rolle an.
Rollen umfassen Autorisierungen und privilegierte Befehle. Weitere Informationen zu Rollen finden Sie unter Using the Solaris Management Tools With RBAC (Task Map) in System Administration Guide: Basic Administration.
Geben Sie newtask ein, um dem Projekt x-files eine neue Aufgabe hinzuzufügen.
# newtask -p x-files |
Geben Sie den Befehl id mit der Option -p ein, um zu überprüfen, ob der Beitritt zum richtigen Projekt erfolgte.
# id -p uid=0(root) gid=1(other) projid=101(x-files) |
Fügen Sie einen neuen privilegierten Wert für project.max-lwps hinzu, der die Anzahl der LWPs auf drei begrenzt.
# prctl -n project.max-lwps -t privileged -v 3 -e deny -i project x-files |
Überprüfen Sie das Ergebnis.
# 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 - |
Melden Sie sich als Superuser an oder nehmen Sie eine entsprechende Rolle an.
Rollen umfassen Autorisierungen und privilegierte Befehle. Weitere Informationen zu Rollen finden Sie unter Using the Solaris Management Tools With RBAC (Task Map) in System Administration Guide: Basic Administration.
Geben Sie den Befehl prctl mit der Option -r ein, um den niedrigsten Wert der Resource Control process.max-file-descriptor zu ändern.
# prctl -n process.max-file-descriptor -r -v 128 $$ |
Melden Sie sich als Superuser an oder nehmen Sie eine entsprechende Rolle an.
Rollen umfassen Autorisierungen und privilegierte Befehle. Weitere Informationen zu Rollen finden Sie unter Using the Solaris Management Tools With RBAC (Task Map) in System Administration Guide: Basic Administration.
Zeigen Sie den Wert der Resource Control project.cpu-shares im Projekt group.staff an.
# 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 |
Ersetzen Sie den aktuellen Wert für project.cpu-shares von 1 durch den Wert 10.
# prctl -n project.cpu-shares -v 10 -r -i project group.staff |
Zeigen Sie den Wert der Resource Control project.cpu-shares im Projekt group.staff an.
# 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 |
Mit dem Befehl rctladm können Sie Echtzeitabfragen und Modifikationen des globalen Status von Resource Controls durchführen. Weitere Informationen finden Sie in der Manpage rctladm(1M).
Sie können beispielsweise den Befehl rctladm mit der Option -e eingeben, um das globale Attribut syslog einer Resource Control zu aktivieren. Wenn der Schwellenwert der Resource Control überschritten wird, protokolliert das System eine Benachrichtigung auf der angegebenen syslog-Stufe. Um das globale Attribut syslog der Resource Control process.max-file-descriptor zu aktivieren, geben Sie Folgendes ein:
# rctladm -e syslog process.max-file-descriptor |
Der Befehl rctladm ohne Argumente zeigt die globalen Flags (einschließlich des Flags für den globalen Typ) für jede Resource Control an.
# 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 ] . . . |
Mit dem Dienstprogramm ipcs können Sie Informationen zur aktiven prozessübergreifenden Kommunikation (Interprocess Communication, IPC) anzeigen. Weitere Informationen finden Sie in der Manpage ipcs(1).
Geben Sie den Befehl ipcs mit der Option -J ein, um anzuzeigen, welcher Projekt-Grenzwert einem IPC-Objekt zugeordnet ist.
# 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 |
Mit einer globalen Aktion für eine Resource Control können Sie benachrichtigt werden, wenn ein Element durch einen zu niedrig eingestellten Resource Control-Wert behindert wird.
Angenommen, Sie möchten feststellen, ob ein Webserver über ausreichend CPUs für die typische Arbeitslast verfügt. Sie können die sar-Daten auf CPU-Zeit im Wartezustand und den Lastdurchschnitt analysieren. Sie können aber auch die Extended Accounting-Daten auswerten, um die Anzahl der gleichzeitigen Prozesse zu ermitteln, die für den Webserver-Prozess ausgeführt werden.
Der einfachste Ansatz ist jedoch, eine Aufgabe für den Webserver zu erstellen. Dann richten Sie eine globale Aktion mit dem Befehl syslog ein, um immer dann benachrichtigt zu werden, wenn eine Aufgabe die für die Kapazitäten des Computers eingerichtete Anzahl an LWPs überschreitet.
Weitere Informationen finden Sie in der Manpage sar(1).
Geben Sie den Befehl prctl ein, um eine privilegierte Resource Control (mit einem Superuser als Eigentümer) für die Aufgaben einzurichten, die einen httpd-Prozess enthalten. Begrenzen Sie die Gesamtzahl der LWPs für jede Aufgabe auf 40 und deaktivieren Sie alle lokalen Aktionen.
# prctl -n task.max-lwps -v 40 -t privileged -d all `pgrep httpd` |
Aktivieren Sie die globale Aktion eines Systemprotokolls für die Resource Control task.max-lwps.
# rctladm -e syslog task.max-lwps |
Überwachen Sie, ob die Arbeitslast die Resource Control auslöst.
In diesem Fall werden /var/adm/messages wie die Folgende angezeigt:
Jan 8 10:15:15 testmachine unix: [ID 859581 kern.notice] NOTICE: privileged rctl task.max-lwps exceeded by task 19 |