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
Quisiera primeramente felicitarte por tu blog, me ha sacado de más de un apuro!
ResponderEliminarY ya puestos a abusar de tu conocimiento, quería hacerte una pregunta acerca del max-shm-memory. Igual es muy simple: ¿es posible utilizar la memoria total de la máquina para hacer los cálculos de reparto entre los proyectos?
Hasta ahora, he estado haciendo los cálculos respecto a la memoria física y nunca lo he probado con la total (me refiero a fisica+swap)
Y otra cosa, ¿sería válido tener dos proyectos, uno para un grupo de usuarios y otro para un solo usuario, que también pertenezca a ese grupo? y en tal caso ¿prevalece el grupo sobre el usuario o al contrario.
Con un ejemplo:
group.oinstall
projid : 101
comment: ""
users : (none)
groups : oinstall
attribs: project.max-shm-memory=(priv,4294967295,deny)
user.oracle
projid : 100
comment: ""
users : oracle
groups : oinstall
attribs: project.max-shm-memory=(priv,6294967295,deny)
muchas gracias!!
Hola Gemma,
EliminarLo primero muchas gracias por tus comentarios, me alegro que te sirvan mis posts.
Sobre lo que preguntas, si, en el tema de proyectos prevalece el del usuario, y sí, se puede pertenecer a varios grupos y cambiar de uno a otro utilizando
$ newtask -p _nombre_proyecto_
Como creo que es un tema muy interesante, me he tomado la libertad de tenerlo como base para un ejemplo más detallado, ya que hay mucho que contar ;)
Un Saludo,
Urko