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

Configuración de controles de recursos y atributos

La función de controles de recursos se configura a través de la base de datos project. Consulte el Capítulo 2Proyectos y tareas (información general). Los controles de recursos y otros atributos se configuran en el campo final de la entrada de la base de datos project. Los valores asociados con cada control de recursos se incluyen entre paréntesis, y aparecen como texto sin formato separado por comas. Los valores entre paréntesis constituyen una "cláusula de acción". Cada cláusula de acción se compone de un nivel de privilegio, un valor umbral y una acción asociada con el umbral específico. Cada control de recurso puede tener varias cláusulas de acción, que también se separan con comas. La entrada siguiente define un límite de proceso ligero por tarea y un límite de tiempo de CPU máximo por proceso en una entidad de proyecto. process.max-cpu-time enviaría SIGTERM a un proceso durante la ejecución del proceso durante una hora, y SIGKILL si el proceso siguiera ejecutándose durante una hora y un minuto. Consulte la Tabla 6–3.


development:101:Developers:::task.max-lwps=(privileged,10,deny);
  process.max-cpu-time=(basic,3600,signal=TERM),(priv,3660,signal=KILL)
typed as one line

Nota –

En los sistemas con zonas activadas, los controles de recursos de la zona se especifican en la configuración de zona con un formato ligeramente diferente. Consulte Datos de configuración de zonas para obtener más información.


El comando rctladm permite realizar interrogaciones de tiempo de ejecución y modificaciones en la función de controles de recursos con ámbito global. El comando prctl permite realizar interrogaciones de tiempo de ejecución y modificaciones en la función de controles de recursos, con ámbito local.

Para obtener más información, consulte Acciones locales y globales en valores de controles de recursos, rctladm(1M) y prctl(1).


Nota –

En un sistema con zonas instaladas, no puede utilizar rctladm en una zona no global para modificar la configuración. Puede utilizar rctladm en una zona no global para ver el estado de registro global de cada control de recurso.


Controles de recursos disponibles

En la tabla siguiente se incluye una lista de los controles de recursos estándar disponibles en esta versión.

La tabla describe el recurso que limita cada control. Asimismo, identifica las unidades predeterminadas que utiliza la base de datos project para dicho recurso. Las unidades predeterminadas pueden ser de dos tipos:

De este modo, project.cpu-shares especifica el número de recursos compartidos a los que tiene derecho el proyecto. process.max-file-descriptor especifica el número máximo de archivos que se pueden asignar a un proceso mediante la llamada de sistema open(2).

Tabla 6–1 Controles de recursos estándar

Nombre de control 

Descripción 

Unidad predeterminada 

project.cpu-cap

Solaris 10 8/07: límite absoluto sobre la cantidad de recursos de la CPU que puede consumir un proyecto. Un valor de 100 significa el 100% de una CPU como opción de project.cpu-cap. Un valor de 125 es 125%, ya que el 100% corresponde a una CPU completa del sistema al utilizar el recurso cpu-cap.

Cantidad (número de CPU) 

project.cpu-shares

Número de recursos compartidos de CPU concedidos a este proyecto para utilizar con el programador de reparto justo (consulte FSS(7)).

Cantidad (recursos compartidos) 

project.max-crypto-memory

Cantidad total de memoria de núcleo que puede utilizar libpkcs11 para la aceleración criptográfica de hardware. Las asignaciones de búferes de núcleo y estructuras relativas a las sesiones se realizan para este control de recurso.

Tamaño (bytes) 

project.max-locked-memory

Cantidad total de memoria física bloqueada permitida. 

Si se asigna priv_proc_lock_memory a un usuario, procure configurar también este control de recurso para evitar que el usuario bloquee toda la memoria.

Solaris 10 8/07: tenga en cuenta que en la versión Solaris 10 8/07, este control de recursos sustituía a project.max-device-locked-memory, que se ha eliminado.

Tamaño (bytes) 

project.max-port-ids

Número máximo de puertos de eventos permitidos. 

Cantidad (número de puertos de eventos)  

project.max-sem-ids

Número máximo de ID de semáforo permitidos para este proyecto. 

Cantidad (ID de semáforo) 

project.max-shm-ids

Número máximo de ID de memoria compartida permitidos para este proyecto. 

Cantidad (ID de memoria compartida) 

project.max-msg-ids

Número máximo de ID de cola de mensajes permitidos para este proyecto. 

Cantidad (ID de cola de mensajes) 

project.max-shm-memory

Cantidad total de memoria compartida System V permitida para este proyecto. 

Tamaño (bytes) 

project.max-lwps

Número máximo de procesos ligeros disponibles de forma simultánea para este proyecto. 

Cantidad (LWP) 

project.max-tasks

Número máximo de tareas permitidas en este proyecto. 

Cantidad (número de tareas) 

project.max-contracts

Número máximo de contratos permitidos en este proyecto. 

Cantidad (contratos) 

task.max-cpu-time

Tiempo máximo de CPU disponible para los procesos de esta tarea. 

Tiempo (segundos) 

task.max-lwps

Número máximo de procesos ligeros disponibles de forma simultánea para los procesos de esta tarea. 

Cantidad (LWP) 

process.max-cpu-time

Tiempo máximo de CPU disponible para este proceso. 

Tiempo (segundos) 

process.max-file-descriptor

Índice descriptor de archivos máximo disponible para este proceso. 

Índice (descriptor de archivo máximo) 

process.max-file-size

Desfase de archivo máximo disponible para escritura de este proceso. 

Tamaño (bytes) 

process.max-core-size

Tamaño máximo de archivo principal creado por este proceso. 

Tamaño (bytes) 

process.max-data-size

Memoria de pila máxima disponible para este proceso. 

Tamaño (bytes) 

process.max-stack-size

Segmento de memoria de pila máxima disponible para este proceso. 

Tamaño (bytes) 

process.max-address-space

Cantidad máxima de espacio de dirección, sumando los tamaños de segmentos, disponible para este proceso. 

Tamaño (bytes) 

process.max-port-events

Número de eventos máximo permitido por puerto de eventos. 

Cantidad (número de eventos)  

process.max-sem-nsems

Número máximo de semáforos permitidos por conjunto de semáforos. 

Cantidad (semáforos por conjunto) 

process.max-sem-ops

Número máximo de operaciones de semáforos permitidas por llamada semop (valor copiado del control de recursos en la hora de semget()).

Cantidad (número de operaciones) 

process.max-msg-qbytes

Número máximo de bytes de mensajes en una cola de mensajes (valor copiado del control de recurso en la hora de msgget() ).

Tamaño (bytes) 

process.max-msg-messages

Número máximo de mensajes en una cola de mensajes (valor copiado del control de recurso en la hora de msgget()).

Cantidad (número de mensajes) 

Puede ver los valores predeterminados de los controles de recursos de un sistema que no tenga controles de recursos definidos ni cambiados. Dicho sistema no contiene entradas que no sean predeterminadas en /etc/system o la base de datos project. Para ver los valores, utilice el comando prctl.

Controles de recursos de la zona

Los controles de recursos de la zona limitan el uso total de los recursos de todas las entidades de procesos de una zona. Los controles de recursos de la zona también pueden configurarse utilizando los nombres de propiedades globales descritos en Configuración de controles de recursos de zonas y Cómo configurar la zona.

Tabla 6–2 Controles de recursos de la zona

Nombre de control 

Descripción 

Unidad predeterminada 

zone.cpu-cap

Solaris 10 5/08: límite absoluto sobre la cantidad de recursos de CPU que puede consumir una zona no global. Un valor de 100 significa el 100% de una CPU como opción de project.cpu-cap. Un valor de 125 es 125%, ya que el 100% corresponde a una CPU completa del sistema al utilizar el recurso cpu-cap.

Cantidad (número de CPU) 

zone.cpu-shares

Número de recursos compartidos de CPU del planificador de reparto justo (FSS) para esta zona 

Cantidad (recursos compartidos) 

zone.max-locked-memory

Cantidad total de memoria física bloqueada disponible para una zona. 

Si se asigna priv_proc_lock_memory a una zona, procure configurar también este control de recurso para evitar que la zona bloquee toda la memoria.

Tamaño (bytes) 

zone.max-lwps

Número máximo de procesos ligeros disponibles de forma simultánea para esta zona 

Cantidad (LWP) 

zone.max-msg-ids

Número máximo de ID de cola de mensajes permitidos para esta zona 

Cantidad (ID de cola de mensajes) 

zone.max-sem-ids

Número máximo de ID de semáforo permitidos para esta zona 

Cantidad (ID de semáforo) 

zone.max-shm-ids

Número máximo de ID de memoria compartida permitidos para esta zona 

Cantidad (ID de memoria compartida) 

zone.max-shm-memory

Cantidad total de memoria compartida System V permitida para esta zona 

Tamaño (bytes) 

zone.max-swap

Cantidad total de intercambio que pueden consumir las asignaciones de espacio de direcciones del proceso del usuario y los montajes tmpfs para esta zona.

Tamaño (bytes) 

Para obtener información sobre la configuración de controles de recursos de la zona, consulte Propiedades del tipo de recurso y Cómo configurar la zona. Para utilizar los controles de recursos de la zona en las zonas con marca lx, consulte Cómo configurar, verificar y confirmar la zona con marca lx.

Tenga en cuenta que es posible aplicar un control de recurso de la zona para la zona global. Para obtener más información, consulte el Capítulo 17Configuración de zonas no globales (descripción general) y Uso del programador de reparto justo en un sistema Solaris con zonas instaladas.

Compatibilidad con unidades

Los indicadores globales que identifican los tipos de controles de recursos se definen para todos los controles de recursos. El sistema utiliza los indicadores para comunicar la información de tipo básico a las aplicaciones como el comando prctl. Las aplicaciones utilizan la información para determinar lo siguiente:

Hay disponibles los siguientes indicadores globales:

Indicador global 

Cadena de tipo de control de recurso 

Modificador 

Escala 

RCTL_GLOBAL_BYTES 

bytes 

 

KB 

210

 

MB 

220

 

GB 

230

 

TB 

240

 

PB 

250

 

EB 

260

RCTL_GLOBAL_SECONDS 

segundos 

 

Ks 

103

 

Sra. 

106

 

Gs 

109

 

Ts 

1012

 

Ps 

1015

 

Es 

1018

RCTL_GLOBAL_COUNT 

número 

none 

 

103

 

106

 

109

 

1012

 

1015

 

1018

Pueden utilizarse valores a escala con los controles de recursos. El ejemplo siguiente muestra un valor umbral a escala:

task.max-lwps=(priv,1K,deny)

Nota –

Los comandos prctl, projadd y projmod aceptan modificadores de unidades. No puede utilizar modificadores de unidades en la base de datos project.


Valores de controles de recursos y niveles de privilegio

Un valor umbral en un control de recurso constituye un punto de aplicación en el que se pueden desencadenar acciones locales o globales, por ejemplo registros.

Cada valor umbral de un control de recurso debe asociarse con un nivel de privilegio. El nivel de privilegio debe ser de uno de estos tres tipos.

Se garantiza que un control de recurso tiene un valor de sistema, definido por el sistema, o un proveedor de recursos. El valor del sistema representa qué cantidad del recurso es capaz de proporcionar la implementación actual del sistema operativo.

Puede definirse cualquier número de valores con privilegio, y sólo se permite un valor básico. A las operaciones que se llevan a cabo sin especificar un valor de privilegio se les asigna de forma predeterminada un privilegio básico.

El nivel de privilegio para un valor de control de recurso se define en el campo de privilegio del bloque de control de recurso como RCTL_BASIC, RCTL_PRIVILEGED o RCTL_SYSTEM. Consulte setrctl(2) para obtener más información. Puede utilizar el comando prctl para modificar los valores asociados con los niveles básico y con privilegios.

Acciones locales y globales en valores de controles de recursos

Hay dos categorías de acciones en los valores de controles de recursos: globales y locales.

Acciones globales en valores de controles de recursos

Las acciones globales se aplican a los valores de controles de recursos para cada control de recurso del sistema. Puede utilizar el comando rctladm que se describe en la página del comando man rctladm(1M) para llevar a cabo las acciones siguientes:

Puede desactivar o activar la acción de registro global en los controles de recursos. Es posible definir la acción syslog hasta un grado específico asignando un nivel de gravedad, syslog=nivel. Las posibles configuraciones de nivel son:

De modo predeterminado, no hay ningún registro global de los conflictos de controles de recursos. En Solaris 10 5/08, se agregó el nivel n/a para controles de recursos en los que no se podían configurar acciones globales.

Acciones locales en valores de controles de recursos

Las acciones locales se llevan a cabo en un proceso que intenta exceder el valor de control. Para cada valor umbral que se coloca en un control de recurso, puede asociar una o más acciones. Hay tres tipos de acciones locales: none, deny y signal=. Estas tres acciones se utilizan del modo siguiente:

none

No se emprende ninguna acción en las solicitudes de recursos para una cantidad que supere el umbral. Esta acción resulta útil para supervisar el uso de los recursos sin que ello afecte al progreso de las aplicaciones. También puede activar un mensaje global que se muestre al superar el control de recurso, aunque el proceso que supera el umbral no se vea afectado.

deny

Puede denegar las solicitudes de recursos para una cantidad que supere el umbral. Por ejemplo, un control de recurso task.max-lwps con la acción deny hace que la llamada de sistema fork falle si el nuevo proceso supera el valor de control. Consulte la página del comando man fork(2).

signal=

Puede activar una acción de mensaje de señal global cuando se supera el control de recurso. Se envía una señal al proceso cuando se supera el valor umbral. No se envían señales adicionales si el proceso consume recursos adicionales. En la Tabla 6–3 se enumeran las señales disponibles.

No se pueden aplicar todas las acciones a cada control de recurso. Por ejemplo, un proceso no puede superar el número de recursos compartidos de CPU asignados al proyecto del cual es miembro. Por tanto, no se permite una acción de denegación en el control de recurso project.cpu-shares.

Debido a la restricción de la implementación, las propiedades globales de cada control pueden restringir el intervalo de acciones disponibles que se pueden configurar en el valor umbral. (Consulte la página del comando man rctladm(1M) En la tabla siguiente se presenta una lista de las acciones de señales disponibles. Para obtener información adicional sobre las señales, consulte la página del comando man signal(3HEAD).

Tabla 6–3 Señales disponibles para los valores de controles de recursos

Señal 

Descripción 

Notas 

SIGABRT 

Finaliza el proceso. 

 

SIGHUP 

Envía una señal de colgar. Tiene lugar cuando el portador se encuentra en una línea abierta. La señal se envía al grupo de proceso que controla el terminal. 

 

SIGTERM 

Finaliza el proceso. Señal de finalización que envía el software. 

 

SIGKILL 

Finaliza el proceso y cierra el programa. 

 

SIGSTOP 

Detiene el proceso. Señal de control del trabajo. 

 

SIGXRES 

Límite de control de recurso superado. Lo genera la función de control de recurso. 

 

SIGXFSZ 

Finaliza el proceso. Límite de tamaño de archivo superado. 

Disponible sólo para los controles de recursos con la propiedad RCTL_GLOBAL_FILE_SIZE (process.max-file-size). Consulte rctlblk_set_value(3C) para obtener más información.

SIGXCPU 

Finaliza el proceso. Límite de tiempo de CPU superado. 

Disponible sólo para los controles de recursos con la propiedad RCTL_GLOBAL_CPUTIME (process.max-cpu-time). Consulte rctlblk_set_value(3C) para obtener más información.

Propiedades e indicadores de controles de recursos

Cada control de recurso del sistema tiene un grupo determinado de propiedades asociadas. Este conjunto de propiedades se define como un conjunto de indicadores, asociados con todas las instancias controladas de dicho recurso. Los indicadores globales no se pueden modificar, pero se pueden recuperar utilizando las llamadas de sistema rctladm o getrctl.

Los indicadores globales definen el comportamiento predeterminado y la configuración de un valor umbral específico de dicho control de recurso en un proceso específico o colectivo. Los indicadores locales de un valor umbral no afectan al comportamiento de otros valores umbral definidos para el mismo control de recurso. Sin embargo, los indicadores globales afectan al comportamiento de cada valor asociado con un control particular. Los indicadores locales pueden modificarse, dentro de los límites establecidos por sus indicadores globales correspondientes, mediante el comando prctl o la llamada de sistema setrctl. Consulte setrctl(2).

Para ver una lista completa de los indicadores locales y sus definiciones, consulte rctlblk_set_value(3C).

Para determinar el comportamiento del sistema cuando se alcanza un valor umbral para un control de recurso concreto, utilice rctladm para ver los indicadores globales para el control de recurso. Por ejemplo, para ver los valores de process.max-cpu-time, escriba lo siguiente:


$ rctladm process.max-cpu-time
	process.max-cpu-time  syslog=off  [ lowerable no-deny cpu-time inf seconds ]

Los indicadores globales significan lo siguiente.

lowerable

No se requieren privilegios de superusuario para reducir los valores con privilegios para este control.

no-deny

Nunca se deniega el acceso al recurso, ni siquiera cuando se superan los valores umbral.

cpu-time

SIGXCPU está disponible para su envío cuando se alcanzan los valores umbral de este recurso.

seconds

Valor de tiempo para el control de recurso.

no-basic

Los valores de control de recurso con el tipo de privilegio basic no se pueden establecer. Sólo se permiten valores de control de recurso con privilegios.

no-signal

Una acción de señal local no se puede establecer en valores de control de recurso.

no-syslog

La acción de mensaje syslog global no se puede establecer para este control de recurso.

deny

Siempre que se sobrepasen los valores de umbral, deniegue la solicitud de recursos.

count

Valor (entero) de cantidad para el control de recurso.

bytes

Unidad de tamaño de control de recurso.

Utilice el comando prctl para ver las acciones y los valores locales para el control de recurso.


$ prctl -n process.max-cpu-time $$
	process 353939: -ksh
	NAME    PRIVILEGE    VALUE    FLAG   ACTION              RECIPIENT
 process.max-cpu-time
         privileged   18.4Es    inf   signal=XCPU                 -
         system       18.4Es    inf   none 

El indicador max (RCTL_LOCAL_MAXIMAL) se configura para ambos valores umbral, y el indicador inf (RCTL_GLOBAL_INFINITE) se define para este control de recurso. Un valor inf tiene una cantidad infinita. El valor nunca se aplica. Por ello, ambas cantidades umbral representan valores infinitos que nunca se superan.

Aplicación de controles de recursos

Un recurso puede tener más de un control de recurso. Puede haber un control de recurso en cada nivel de contenido en el modelo de proceso. Si hay controles de recursos activos en el mismo recurso en diferentes niveles de contenido, se aplicará en primer lugar el control del contenedor más pequeño. De este modo, la acción se lleva a cabo en process.max-cpu-time antes que en task.max-cpu-time si ambos controles se encuentran de forma simultánea.

Figura 6–1 Procesos colectivos, relaciones de contenedores y sus conjuntos de controles de recursos

El diagrama muestra la aplicación de cada control de recurso y su nivel de contenido.

Supervisión global de los eventos de controles de recursos

A menudo, se desconoce el consumo de recursos de los procesos. Para obtener más información, utilice las acciones de control de recursos globales disponibles con el comando rctladm. Utilice rctladm para establecer una acción syslog en un control de recursos. A continuación, si una entidad administrada por dicho control de recurso se encuentra con un valor umbral, se registra un mensaje del sistema en el nivel de registro configurado. Si desea más información, consulte el Capítulo 7Administración de controles de recursos (tareas) y la página del comando man rctladm(1M).