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).
| Tarefa | Descrição | Para instruções | 
|---|---|---|
| Defina controles de recursos. | Defina controles de recursos para um projeto no arquivo /etc/project. | |
| 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. | |
| 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. | |
| 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. | |
| 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 | 
 Como definir o número máximo de LWPs para cada tarefa em um projeto
Como definir o número máximo de LWPs para cada tarefa em um projetoEste 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.
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 .
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 | 
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) | 
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
# | 
 Como definir múltiplos controles em um projeto
Como definir múltiplos controles em um projetoO 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.
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 .
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.
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 | 
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).
 Como usar o comando prctl para exibir valores de controle de recurso padrão
Como usar o comando prctl para exibir valores de controle de recurso padrãoEste 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.
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                             - | 
 Como usar o comando prctl para exibir informações para um determinado controle de recurso
Como usar o comando prctl para exibir informações para um determinado controle de recursoExiba 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      | 
 Como usar prctl para alterar um valor temporariamente
Como usar prctl para alterar um valor temporariamenteEste 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.
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 .
Use newtask para unir o projeto x-files.
| # newtask -p x-files | 
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) | 
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 | 
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                      - | 
 Como usar prctl para baixar um valor de controle de recurso
Como usar prctl para baixar um valor de controle de recursoTorne-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 .
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 $$ | 
 Como usar prctl para exibir, substituir e verificar o valor de um controle em um projeto
Como usar prctl para exibir, substituir e verificar o valor de um controle em um projetoTorne-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 .
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  | 
Substitua o valor atual 1 de project.cpu-shares pelo valor 10.
| # prctl -n project.cpu-shares -v 10 -r -i project group.staff | 
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  | 
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 ] . . . | 
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 | 
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).
 Como determinar se há alocação de capacidade de CPU suficiente para um servidor Web
Como determinar se há alocação de capacidade de CPU suficiente para um servidor WebUse 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` | 
Ative uma ação global de log do sistema no controle de recurso task.max-lwps.
| # rctladm -e syslog task.max-lwps | 
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 |