Systemverwaltungshandbuch: Oracle Solaris Container - Ressourcenverwaltung und Solaris Zones

Kapitel 7 Verwalten von Resource Controls (Vorgehen)

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.

Verwalten von Resource Controls (Übersicht der Schritte)

Aufgabe 

Beschreibung 

Siehe 

Einrichten der Resource Controls. 

Einrichten der Resource Controls für ein Projekt in der Datei /etc/project.

Einrichten von Resource Controls

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. 

Verwenden des Befehls prctl

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.

Verwenden von rctladm

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.  

Verwenden von ipcs

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

Einrichten von Resource Controls

ProcedureSo richten Sie die maximale Anzahl der LWPs für jede Aufgabe in einem Projekt ein

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.

  1. 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.

  2. 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
    
  3. 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)

Beispiel 7–1 Beispielsitzung

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
#

ProcedureSo werden mehrere Resource Controls in einem Projekt eingerichtet

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.

  1. 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.

  2. 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.

  3. 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
      

Verwenden des Befehls prctl

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).

ProcedureSo verwenden Sie den Befehl prctl zum Anzeigen von Resource Control-Standardwerten

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.

  1. 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                             -

ProcedureSo verwenden Sie den Befehl prctl zum Anzeigen von Informationen zu einer bestimmten Resource Control

  1. 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     

ProcedureSo verwenden Sie den Befehl prctl zum temporären Ändern eines Wertes

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.

  1. 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.

  2. Geben Sie newtask ein, um dem Projekt x-files eine neue Aufgabe hinzuzufügen.


    # newtask -p x-files
    
  3. 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)
  4. 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
    
  5. Ü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                      -

ProcedureSo verwenden Sie den Befehl prctl zum Herabsetzen eines Resource Control-Werts

  1. 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.

  2. 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 $$
    

ProcedureSo verwenden Sie den Befehl prctl zum Anzeigen, Ersetzen und Überprüfen eines Resource Control-Werts in einem Projekt

  1. 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.

  2. 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 
  3. 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
    
  4. 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 

Verwenden von rctladm

So verwenden Sie rctladm

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 ]
.
.
.

Verwenden von ipcs

So verwenden Sie ipcs

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

Kapazitätswarnungen

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).

ProcedureSo stellen Sie fest, ob einem Webserver ausreichend CPU-Kapazität zugeordnet ist

  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`
    
  2. Aktivieren Sie die globale Aktion eines Systemprotokolls für die Resource Control task.max-lwps.


    # rctladm -e syslog task.max-lwps
    
  3. Ü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