Hasta ahora hemos visto cómo gestionar los parámetros dinámicamente mediante el uso de <prctl> y project sin embargo, Cómo saber si se están superando los límites? Bien, para ello, tenemos el comando <rctladm> que nos permite examinar y modificar los parámetros globales de nuestro sistema de control de recursos.
Vamos a utilizar <rctladm> para habilitar el sistema de log y de esta forma, poder ver cuándo y quién está sobrepasando los límites que hemos asignado.
Si ejecutamos el comando <rctladm> sin ningún argumento, se nos mostrará el estado de cada una de las opciones del resource manager donde podremos ver si tenemos activado el sistema de log <syslog=notice> o, si por el contrario está apagado <syslog=off> -que es su valor por defecto-
# rctladmPara activar el sistema de log simplemente deberemos ejecutar el siguiente comando
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=notice [ 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 ]
process.max-data-size syslog=off [ lowerable deny no-signal bytes ]
process.max-file-size syslog=off [ lowerable deny file-size bytes ]
process.max-cpu-time syslog=off [ lowerable no-deny cpu-time inf seconds ]
task.max-cpu-time syslog=off [ no-deny cpu-time no-obs inf seconds ]
task.max-lwps syslog=notice [ count ]
project.max-contracts syslog=off [ no-basic deny count ]
project.max-device-locked-memory syslog=off [ no-basic deny bytes ]
project.max-locked-memory syslog=off [ no-basic deny bytes ]
project.max-port-ids syslog=off [ no-basic deny count ]
project.max-shm-memory syslog=off [ no-basic deny bytes ]
project.max-shm-ids syslog=off [ no-basic deny count ]
project.max-msg-ids syslog=off [ no-basic deny count ]
project.max-sem-ids syslog=off [ no-basic deny count ]
project.max-crypto-memory syslog=off [ no-basic deny bytes ]
project.max-tasks syslog=off [ no-basic count ]
project.max-lwps syslog=off [ no-basic count ]
project.cpu-cap syslog=off [ no-basic deny no-signal inf count ]
project.cpu-shares syslog=n/a [ no-basic no-deny no-signal no-syslog count ]
zone.max-swap syslog=off [ no-basic deny bytes ]
zone.max-locked-memory syslog=off [ no-basic deny bytes ]
zone.max-shm-memory syslog=off [ no-basic deny bytes ]
zone.max-shm-ids syslog=off [ no-basic deny count ]
zone.max-sem-ids syslog=off [ no-basic deny count ]
zone.max-msg-ids syslog=off [ no-basic deny count ]
zone.max-lwps syslog=off [ no-basic count ]
zone.cpu-cap syslog=off [ no-basic deny no-signal inf count ]
zone.cpu-shares syslog=n/a [ no-basic no-deny no-signal no-syslog count ]
# rctladm -e syslog __nombre.propiedad__Y para desactivar el sistema de log
# rctladm -d syslog __nombre.propiedad__Como siempre, si intentamos hacerlo desde la zona no global Solaris nos mostrará el siguiente error:
# rctladm -e syslog project.max-port-idsDe esta forma, cada vez que un recurso supere los límites que hemos definido -y esté activo el log- nos escribirá una entrada en </var/adm/message> de la zona global, indicando propiedad y límite superado
rctladm: unable to update control block contents: Not owner
# tail -f /var/adm/messagesVeamos un ejemplo completo. Vamos a limitar el número de procesos ligeros que Apache HTTP Server puede crear, vamos a permitir sólo 5
Feb 23 18:11:32 test genunix: [ID 120576 kern.notice] basic rctl process.max-file-descriptor (value 256) exceeded by process 323.
# projmod -sK 'task.max-lwps=(priv,3,deny)' user.wwwComo hemos visto en otras ocasiones, podemos modificar los valores de un proceso en ejecución sin tener que reiniciarlo, vamos a modificar el valor de max-lwps del PID 24582
# /opt/www/apache-1.3.41/bin/apachectl stop
# /opt/www/apache-1.3.41/bin/apachectl start
# dmesg|tail
Feb 23 17:51:53 test genunix: [ID 748619 kern.notice] privileged rctl task.max-lwps (value 3) exceeded by process 24512 in task 32260.
Feb 23 17:51:57 test genunix: [ID 748619 kern.notice] privileged rctl task.max-lwps (value 3) exceeded by process 24526 in task 32260.
Feb 23 17:51:58 test genunix: [ID 748619 kern.notice] privileged rctl task.max-lwps (value 3) exceeded by process 24533 in task 32260.
# ps -u www -f
UID PID PPID C STIME TTY TIME CMD
www 24582 24577 0 17:52:14 ? 0:00 /opt/www/apache-1.3.41/bin/httpd
www 24581 24577 0 17:52:14 ? 0:00 /opt/www/apache-1.3.41/bin/httpd
www 24579 24577 0 17:52:14 ? 0:00 /opt/www/apache-1.3.41/bin/httpd
www 24580 24577 0 17:52:14 ? 0:00 /opt/www/apache-1.3.41/bin/httpd
www 24691 24577 0 17:54:20 ? 0:00 /opt/www/apache-1.3.41/bin/httpd
www 24578 24577 0 17:52:14 ? 0:00 /opt/www/apache-1.3.41/bin/httpd
# prctl -n task.max-lwps -i process 24582
process: 24582: /opt/www/apache-1.3.41/bin/httpd
NAME PRIVILEGE VALUE FLAG ACTION RECIPIENT
task.max-lwps
privileged 250 - deny -
# prctl -r -t priv -n task.max-lwps -v 350 -i process 24582
# prctl -n task.max-lwps -i process 24582
process: 24582: /opt/www/apache-1.3.41/bin/httpd
NAME PRIVILEGE VALUE FLAG ACTION RECIPIENT
task.max-lwps
privileged 350 - none -
<< Configuraciones Dinámicas Parte 1
Conclusión
Poco a poco vamos avanzando en el uso de Resource Manager y vemos como podemos aplicarlo a nuestras instalaciones. Os dejo que hagáis vuestras pruebas y ver cómo se comporta.
Referencias