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 |
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).
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.
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:
Las cantidades representan una cantidad limitada.
Los índices representan un identificador válido máximo.
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.
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.
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:
Las cadenas de unidades apropiadas para cada control de recurso
La escala correcta que utilizar al interpretar valores a escala
Hay disponibles los siguientes indicadores globales:
Indicador global |
Cadena de tipo de control de recurso |
Modificador |
Escala |
---|---|---|---|
RCTL_GLOBAL_BYTES |
bytes |
B |
1 |
|
KB |
210 |
|
|
MB |
220 |
|
|
GB |
230 |
|
|
TB |
240 |
|
|
PB |
250 |
|
|
EB |
260 |
|
RCTL_GLOBAL_SECONDS |
segundos |
s |
1 |
|
Ks |
103 |
|
|
Sra. |
106 |
|
|
Gs |
109 |
|
|
Ts |
1012 |
|
|
Ps |
1015 |
|
|
Es |
1018 |
|
RCTL_GLOBAL_COUNT |
número |
none |
1 |
|
K |
103 |
|
|
M |
106 |
|
|
G |
109 |
|
|
T |
1012 |
|
|
P |
1015 |
|
|
E |
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)
Los comandos prctl, projadd y projmod aceptan modificadores de unidades. No puede utilizar modificadores de unidades en la base de datos project.
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.
Básico, que puede modificar el propietario del proceso que realiza la llamada
Con privilegios, que sólo pueden modificar los autores de la llamada con privilegios (superusuarios)
Sistema, que es fijo para la duración de la instancia del sistema operativo
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.
Hay dos categorías de acciones en los valores de controles de recursos: globales y locales.
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:
Mostrar el estado global de los controles de recursos activos del sistema
Definir acciones de registro globales
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:
debug
info
notice
warning
err
crit
alert
emerg
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.
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:
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.
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).
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. |
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.
No se requieren privilegios de superusuario para reducir los valores con privilegios para este control.
Nunca se deniega el acceso al recurso, ni siquiera cuando se superan los valores umbral.
SIGXCPU está disponible para su envío cuando se alcanzan los valores umbral de este recurso.
Valor de tiempo para el control de recurso.
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.
Una acción de señal local no se puede establecer en valores de control de recurso.
La acción de mensaje syslog global no se puede establecer para este control de recurso.
Siempre que se sobrepasen los valores de umbral, deniegue la solicitud de recursos.
Valor (entero) de cantidad para el control de recurso.
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.
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.
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).