Guia de administração do sistema: gerenciamento de recursos Oracle Solaris Containers e Oracle Solaris Zones

Capítulo 7 Administração de controles de recursos (tarefas)

Este capítulo descreve como administrar a facilidade de controles de recursos.

Para uma visão geral da facilidade de controles de registros, consulte o Capítulo 6Controles de recursos (visão geral).

Administração de controles de recursos (mapa de tarefas)

Tarefa 

Descrição 

Para instruções 

Defina controles de recursos. 

Defina controles de recursos para um projeto no arquivo /etc/project.

Configuração de controles de recursos

Obtenha ou revise os valores de controle de recurso para processos, tarefas ou projetos ativos com escopo local. 

Faça interrogações de tempo de execução, ou modificações, aos controles de recursos associados com um processo, tarefa ou projeto ativo no sistema. 

Uso do comando prctl

Em um sistema em execução, visualize ou atualize o estado global de controles de recursos. 

Visualize o estado de registro global de cada controle de recurso em uma base de sistema geral. Defina também o nível de registro de syslog quando os controles forem excedidos.

Uso de rctladm

Status de relatório das facilidades de comunicação entre processos (IPC). 

Exiba informações sobre as facilidades ativas de comunicação entre processos (IPC). Observe quais objetos IPC estão contribuindo para o uso de um projeto.  

Uso de ipcs

Determine se há capacidade de CPU suficiente alocada para um servidor Web. 

Defina uma ação global em um controle de recurso. Esta ação permite que você receba aviso de qualquer entidade cujo valor de controle de recurso tem uma definição muito baixa. 

Como determinar se há alocação de capacidade de CPU suficiente para um servidor Web

Configuração de controles de recursos

ProcedureComo definir o número máximo de LWPs para cada tarefa em um projeto

Este procedimento adiciona um projeto nomeado x-files ao arquivo /etc/project e define um número máximo de LWPs para uma tarefa criada no projeto.

  1. Torne-se superusuário ou assuma uma função equivalente.

    Funções contêm autorizações e comandos privilegiados. Para obter mais informações sobre funções, consulte Using the Solaris Management Tools With RBAC (Task Map) no System Administration Guide: Basic Administration .

  2. Use o comando projadd com a opção -K para criar um projeto nomeado x-files. Defina o número máximo de LWPs para cada tarefa criada no projeto como 3 .


    # projadd -K 'task.max-lwps=(privileged,3,deny)' x-files
    
  3. Visualize a entrada no arquivo /etc/project usando um dos seguintes métodos:

    • Tipo:


      # 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)
    • Tipo:


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

Exemplo 7–1 Sessão de amostra

Após implementar as etapas neste procedimento, quando um superusuário cria uma nova tarefa no projeto x-files unindo o projeto a newtask , o superusuário não poderá criar mais do que três LWPs enquanto estiver em execução nesta tarefa. Isso é mostrado na sessão de amostra anotada a seguir.


# 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
#

ProcedureComo definir múltiplos controles em um projeto

O arquivo /etc/project pode conter configurações para múltiplos controles de recursos para cada projeto, assim como múltiplos valores de limiar para cada controle. Valores de limiar são definidos em cláusulas de ação, que são separadas por vírgulas para múltiplos valores.

  1. Torne-se superusuário ou assuma uma função equivalente.

    Funções contêm autorizações e comandos privilegiados. Para obter mais informações sobre funções, consulte Using the Solaris Management Tools With RBAC (Task Map) no System Administration Guide: Basic Administration .

  2. Use o comando projmod com as opções -s e -K para definir controles de recursos no projeto 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
    

    Os seguintes controles são definidos:

    • Um controle basic sem ação no máximo de LWPs por tarefa.

    • Um controle deny privilegiado no máximo de LWPs por tarefa.. Este controle faz falhar qualquer criação de LWP que exceda o máximo, como mostrado no exemplo anterior Como definir o número máximo de LWPs para cada tarefa em um projeto.

    • Um limite nos descritores de arquivo máximos por processo no nível basic, que força a falha de qualquer chamada openque exceda o máximo.

  3. Visualize a entrada no arquivo usando um dos seguintes métodos:

    • Tipo:


      # 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
      
    • Tipo:


      # 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
      

Uso do comando prctl

Use o comando prctl para fazer interrogações de tempo de execução, ou modificações, aos controles de recursos associados a um processo, tarefa ou projeto ativo no sistema. Para obter mais informações, consulte a página do manual prctl(1).

ProcedureComo usar o comando prctl para exibir valores de controle de recurso padrão

Este procedimento deve ser usado em um sistema no qual nenhum controle de recurso tenha sido definido ou alterado. Pode haver somente entradas não padrão no arquivo /etc/system ou no banco de dados de project.

  1. Use o comando prctl em qualquer processo, como o shell atual em execução.


    # 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                             -

ProcedureComo usar o comando prctl para exibir informações para um determinado controle de recurso

  1. Exiba o descritor de arquivo máximo para o shell atual em execução.


    # 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     

ProcedureComo usar prctl para alterar um valor temporariamente

Este procedimento de exemplo usa o comando prctl para adicionar temporariamente um novo valor privilegiado para negar o uso de mais do que três LWPs por projeto para o projeto x-files. O resultado é comparável ao resultado em Como definir o número máximo de LWPs para cada tarefa em um projeto.

  1. Torne-se superusuário ou assuma uma função equivalente.

    Funções contêm autorizações e comandos privilegiados. Para obter mais informações sobre funções, consulte Using the Solaris Management Tools With RBAC (Task Map) no System Administration Guide: Basic Administration .

  2. Use newtask para unir o projeto x-files.


    # newtask -p x-files
    
  3. Use o comando id com a opção - p para verificar se o projeto correto foi unido.


    # id -p
    uid=0(root) gid=1(other) projid=101(x-files)
  4. Adicione um novo valor privilegiado para project.max-lwps que limita o número de LWPs a três.


    # prctl -n project.max-lwps -t privileged -v 3 -e deny -i project x-files
    
  5. Verifique o resultado.


    # 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                      -

ProcedureComo usar prctl para baixar um valor de controle de recurso

  1. Torne-se superusuário ou assuma uma função equivalente.

    Funções contêm autorizações e comandos privilegiados. Para obter mais informações sobre funções, consulte Using the Solaris Management Tools With RBAC (Task Map) no System Administration Guide: Basic Administration .

  2. Use o comando prctl com a opção -r para alterar o valor mais baixo do controle de recurso process.max-file-descriptor .


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

ProcedureComo usar prctl para exibir, substituir e verificar o valor de um controle em um projeto

  1. Torne-se superusuário ou assuma uma função equivalente.

    Funções contêm autorizações e comandos privilegiados. Para obter mais informações sobre funções, consulte Using the Solaris Management Tools With RBAC (Task Map) no System Administration Guide: Basic Administration .

  2. Exiba o valor de project.cpu-shares no projeto 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. Substitua o valor atual 1 de project.cpu-shares pelo valor 10.


    # prctl -n project.cpu-shares -v 10 -r -i project group.staff
    
  4. Exiba o valor de project.cpu-shares no projeto 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 

Uso de rctladm

Como usar rctladm

Use o comando rctladm para fazer a interrogação de tempo de execução, ou modificações, ao estado global da facilidade de controles de recursos. Para obter mais informações, consulte a página do manual rctladm(1M).

Por exemplo, você pode usar rctladm com a opção -e para ativar o atributo global syslog de um controle de recurso. Quando o controle é excedido, uma notificação é registrada no nível de syslog especificado. Para ativar o atributo global syslog de process.max-file-descriptor , digite o seguinte:


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

Quando usado sem argumentos, o comando rctladm exibe os sinalizadores globais, incluindo o sinalizador de tipo global, para cada controle de recurso.


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

Uso de ipcs

Como usar ipcs

Use o utilitário ipcs para exibir informações sobre as facilidades ativas da comunicação entre processos (IPC). Para obter mais informações, consulte a página do manual ipcs(1).

Você pode usar ipcs com a opção -J para ver o limite de projeto contra o qual um objeto IPC está alocado.


# 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

Avisos de capacidade

Uma ação global em um controle de recurso permite que você receba aviso de qualquer entidade que esteja encontrando um valor de controle de recurso com definição muito baixa.

Por exemplo, suponha que você deseja determinar se um servidor Web processa CPUs suficientes para uma carga de trabalho típica. Você pode analisar dados de sar para tempo ocioso de CPU e média de carga. Pode também examinar dados de contabilidade estendida para determinar o número de processos simultâneos que estão em execução para o processo do servidor Web.

No entanto, uma abordagem mais fácil é colocar o servidor Web em uma tarefa. Você pode então definir uma ação global, usando syslog, para notificar você toda vez que uma tarefa exceder o número agendado de LWPs apropriado para as capacidades da máquina.

Para obter mais informações, consulte a página do manual sar(1).

ProcedureComo determinar se há alocação de capacidade de CPU suficiente para um servidor Web

  1. Use o comando prctl para colocar um controle de recurso privilegiado (pertencente ao superusuário) em tarefas que contenham um processo httpd. Limite o número total de LWPs de cada tarefa a 40, e desative todas as ações locais.


    # prctl -n task.max-lwps -v 40 -t privileged -d all `pgrep httpd`
    
  2. Ative uma ação global de log do sistema no controle de recurso task.max-lwps.


    # rctladm -e syslog task.max-lwps
    
  3. Observe se a carga de trabalho encontra o controle de recurso.

    Se sim, você verá /var/adm/messages como:


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