Guía de administración de sistemas: administración de recursos y contenedores de Oracle Solaris y zonas de Oracle Solaris

Capítulo 7 Administración de controles de recursos (tareas)

En este capítulo se describe cómo administrar la función de controles de recursos.

Para obtener información general sobre la función de controles de recursos, consulte el Capítulo 6Controles de recursos (descripción general).

Administración de controles de recursos (mapa de tareas)

Tarea 

Descripción 

Para obtener instrucciones 

Definir controles de recursos. 

Define los controles de recursos para un proyecto en el archivo /etc/project.

Configuración de controles de recursos

Configurar o modificar los valores de controles de recursos para los procesos, tareas o proyectos activos, en el ámbito local. 

Realiza interrogaciones de tiempo de ejecución y modificaciones de los controles de recursos asociados con un proceso, tarea o proyecto activos del sistema. 

Uso del comando prctl

En un sistema en ejecución, visualizar o actualizar el estado global de los controles de recursos. 

Visualiza el estado de registro global de cada control de recurso en el ámbito del sistema. Asimismo, establece el nivel de registro de syslog cuando se superan los controles.

Uso de rctladm

Estado de informe de las funciones de comunicación entre procesos (IPC) activas. 

Muestra información sobre las funciones de comunicación entre procesos (IPC) activas. Observe qué objetos IPC contribuyen al uso de un proyecto.  

Uso de ipcs

Determinar si un servidor Web tiene asignada suficiente capacidad de CPU. 

Define una acción global en un control de recurso. Esta acción permite recibir advertencias de cualquier entidad que tenga un valor de control de recurso configurado demasiado bajo. 

Cómo determinar si un servidor Web tiene asignada suficiente capacidad de CPU

Configuración de controles de recursos

ProcedureCómo definir el número máximo de procesos ligeros para cada tarea de un proyecto

Este procedimiento añade un proyecto denominado x-files al archivo /etc/project y establece un número máximo de procesos ligeros para una tarea creada en el proyecto.

  1. Conviértase en superusuario o asuma una función similar.

    Las funciones incluyen autorizaciones y comandos con privilegios. Para obtener más información sobre las funciones, consulte Using the Solaris Management Tools With RBAC (Task Map) de System Administration Guide: Basic Administration.

  2. Utilice el comando projadd con la opción -K para crear un proyecto denominado x-files. Defina el número máximo de procesos ligeros para cada tarea creada en el proyecto como 3.


    # projadd -K 'task.max-lwps=(privileged,3,deny)' x-files
    
  3. Visualice la entrada en el archivo /etc/project siguiendo uno de estos métodos:

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

Ejemplo 7–1 Ejemplo de sesión

Una vez implementados los pasos de este procedimiento, cuando el superusuario cree una tarea en el proyecto x-files uniendo el proyecto con newtask, el no podrá crear más de tres procesos ligeros mientras se ejecute esta tarea. Esto puede verse en la siguiente sesión de ejemplo.


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

ProcedureCómo definir múltiples controles en un proyecto

El archivo /etc/project puede contener parámetros de varios controles de recursos para cada proyecto, así como diferentes valores umbral para cada control. Los valores umbral se definen en las cláusulas de acción, que se separan con comas en caso de haber múltiples valores.

  1. Conviértase en superusuario o asuma una función similar.

    Las funciones incluyen autorizaciones y comandos con privilegios. Para obtener más información sobre las funciones, consulte Using the Solaris Management Tools With RBAC (Task Map) de System Administration Guide: Basic Administration.

  2. Utilice el comando projmod con las opciones -s y -K para definir los controles de recursos en el proyecto 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
    

    Se definen los controles siguientes:

    • Un control basic sin acción en el máximo de procesos ligeros por tarea.

    • Un control deny con privilegios en el máximo de procesos ligeros por tarea. Este control hace que falle la creación de cualquier proceso ligero que supere el máximo, tal como se muestra en el ejemplo de Cómo definir el número máximo de procesos ligeros para cada tarea de un proyecto.

    • Un límite para los descriptores de archivo por proceso en el nivel basic, que hace que falle cualquier llamada open que supere el máximo.

  3. Visualice la entrada en el archivo utilizando uno de estos métodos:

    • 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
      

Uso del comando prctl

Utilice el comando prctl para realizar interrogaciones de tiempo de ejecución y modificaciones de los controles de recursos asociados con un proceso, una tarea o un proyecto activos en el sistema. Consulte la página del comando man prctl(1) para obtener más información.

ProcedureCómo utilizar el comando prctl para ver los valores de control de recursos predeterminados

Debe utilizarse este procedimiento en un sistema en el que no se hayan configurado ni modificado controles de recursos. En el archivo /etc/system o la base de datos project sólo puede haber entradas no predeterminadas.

  1. Utilice el comando prctl en cualquier proceso, como el shell en ejecución.


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

ProcedureCómo utilizar el comando prctl para ver información de un control de recurso

  1. Visualice el máximo de descriptores de archivo para el shell que está en ejecución.


    # 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     

ProcedureCómo utilizar prctl para cambiar un valor temporalmente

Este procedimiento de ejemplo utiliza el comando prctl para añadir temporalmente un nuevo valor con privilegios con el fin de denegar el uso de más de tres procesos ligeros por proyecto para el proyecto x-files. El resultado se puede comparar con el resultado de Cómo definir el número máximo de procesos ligeros para cada tarea de un proyecto.

  1. Conviértase en superusuario o asuma una función similar.

    Las funciones incluyen autorizaciones y comandos con privilegios. Para obtener más información sobre las funciones, consulte Using the Solaris Management Tools With RBAC (Task Map) de System Administration Guide: Basic Administration.

  2. Utilice newtask para unir el proyecto x-files.


    # newtask -p x-files
    
  3. Utilice el comando id con la opción - p para verificar que se ha unido el proyecto correcto.


    # id -p
    uid=0(root) gid=1(other) projid=101(x-files)
  4. Añada un nuevo valor con privilegios para project.max-lwps que limite el número de procesos ligeros a tres.


    # prctl -n project.max-lwps -t privileged -v 3 -e deny -i project x-files
    
  5. Compruebe el 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                      -

ProcedureCómo utilizar prctl para reducir el valor de control de recurso

  1. Conviértase en superusuario o asuma una función similar.

    Las funciones incluyen autorizaciones y comandos con privilegios. Para obtener más información sobre las funciones, consulte Using the Solaris Management Tools With RBAC (Task Map) de System Administration Guide: Basic Administration.

  2. Utilice el comando prctl con la opción -r para cambiar el valor inferior del control de recurso process.max-file-descriptor.


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

ProcedureCómo utilizar prctl para ver, sustituir y verificar el valor de un control en un proyecto

  1. Conviértase en superusuario o asuma una función similar.

    Las funciones incluyen autorizaciones y comandos con privilegios. Para obtener más información sobre las funciones, consulte Using the Solaris Management Tools With RBAC (Task Map) de System Administration Guide: Basic Administration.

  2. Visualice el valor de project.cpu-shares en el proyecto 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. Sustituya el valor actual project.cpu-shares 1 con el valor 10.


    # prctl -n project.cpu-shares -v 10 -r -i project group.staff
    
  4. Visualice el valor de project.cpu-shares en el proyecto 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

Cómo utilizar rctladm

Utilice el comando rctladm para realizar interrogaciones de tiempo de ejecución y modificaciones en el estado global de las funciones de controles de recursos. Consulte la página del comando man rctladm(1M) para obtener más información.

Por ejemplo, puede utilizar el comando rctladm con la opción -e para permitir el atributo syslog global de un control de recurso. Cuando se supera el control, la notificación se registra en el nivel syslog especificado. Para activar el atributo syslog global de process.max-file-descriptor, escriba:


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

Cuando se utiliza sin argumentos, el comando rctladm muestra los indicadores globales, incluido el indicador de tipo global, para cada control 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

Cómo utilizar ipcs

La utilidad ipcs permite mostrar información sobre las funciones de comunicación entre procesos (IPC) activas. Consulte la página del comando man ipcs(1) para obtener más información.

Puede utilizar ipcs con la opción -J para ver qué límite de proyecto tiene asignado un objeto 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

Advertencias de capacidad

Una acción global en un control de recurso permite recibir una advertencia de cualquier entidad que se encuentre con un valor de control de recurso configurado con un valor demasiado bajo.

Por ejemplo, supongamos que desea determinar si un servidor Web tiene suficiente CPU para su carga de trabajo típica. Puede analizar los datos sar para el tiempo de inactividad de la CPU y el promedio de carga. También puede examinar los datos de contabilidad ampliada con el fin de determinar el número de procesos simultáneos que se ejecutan para el proceso del servidor Web.

Sin embargo, un modo más sencillo de averiguarlo es colocar el servidor Web en una tarea. Puede definir una acción global, utilizando syslog, para recibir una notificación cada vez que una tarea supere el número planificado de procesos ligeros apropiados para la capacidad del equipo.

Consulte la página del comando man sar(1) para obtener más información.

ProcedureCómo determinar si un servidor Web tiene asignada suficiente capacidad de CPU

  1. Utilice el comando prctl para colocar un control de recurso con privilegios (de un superusuario) en las tareas que contienen un proceso httpd. Limite el número total de procesos ligeros de cada tarea a 40, y desactive todas las acciones locales.


    # prctl -n task.max-lwps -v 40 -t privileged -d all `pgrep httpd`
    
  2. Active una acción global de registro del sistema en el control de recurso task.max-lwps.


    # rctladm -e syslog task.max-lwps
    
  3. Observe si la carga de trabajo se encuentra con el control de recurso.

    Si lo hace, verá /var/adm/messages del modo siguiente:


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