lunes, 22 de febrero de 2010

Número de descriptores de ficheros abiertos en Solaris 10

Introducción
Por defecto, Solaris viene con una configuración muy conservadora, y por lo tanto, debemos ajustar algunos parámetros, entre ellos, el número máximo de descriptores de ficheros.

Este parámetro antiguamente había que declararlo en el archivo </etc/system> y requería un reboot del sistema para que se aplicara.

En Solaris 10 esto ya no es necesrio y se puede gestionar con una propiedad del proceso <process.max-file-descriptor> y, por lo tanto gestionable en caliente. Ya hemos visto en post anteriores como Gestionar Dinámicamente Parámetros en Solaris 10, pues bien, ahora vamos a ver otra aplicación del comando <prctl>

Para aquellos que tengaís Solaris 9 u 8, para poder definir el número máximo de descriptores permitidos hay que declarar las siguientes variables en el archivo de configuración </etc/system>. Recordar que este archivo es muy importante, y si tiene errores sintácticos Solaris NO Arrancará, así que editarlo con cuidado y recordar que los comentarios empiezan con "*" y no con "#"


Solaris 8 y 9

# vi /etc/system
  *
  * rflim_fd_max
  *       Limite de descriptores maximos de archivos abiertos
  *       por defecto: 1024
  *
  set rlim_fd_max=16384

  *
  * rlim_fd_cur
  *       por defecto: 64
  *
  set rlim_fd_cur=8192

:wq
Solaris 10
Ya hemos dicho que en Solaris 10 debemos utilizar <prctl> para gestionar estos parámetros dinámicos del sistema -si queremos podemos incluirlos en el /etc/system-
# echo $$
3433
# ulimit -a
core file size        (blocks, -c) unlimited
data seg size         (kbytes, -d) unlimited
file size             (blocks, -f) unlimited
open files                    (-n) 8192
pipe size          (512 bytes, -p) 10
stack size            (kbytes, -s) 8192
cpu time             (seconds, -t) unlimited
max user processes            (-u) 29980
virtual memory        (kbytes, -v) unlimited
# prctl -r -t privileged -n process.max-file-descriptor -v 1024 -i process 3433
# ulimit -a                                                                   
core file size        (blocks, -c) unlimited
data seg size         (kbytes, -d) unlimited
file size             (blocks, -f) unlimited
open files                    (-n) 1024
pipe size          (512 bytes, -p) 10
stack size            (kbytes, -s) 8192
cpu time             (seconds, -t) unlimited
max user processes            (-u) 29980
virtual memory        (kbytes, -v) unlimited
Hemos utilizado el comando <prctl> para modificar el valor de descriptores máximos permitidos al proceso 3433. Ahora bien, si queremos que la configuración se aplique a un conjunto de procesos, utilizaremos un project e incluiremos la propiedad en la definición.

Por ejemplo, para permitir que el usuario postgres tenga 1024 descriptores de archivos, haremos lo siguiente -asumimos que existe un project para el grupo postgres:
# projmod -sK 'process.max-file-descriptor=(priv,1024,deny)' group.postgres                                                                         
# su - postgres

POSTGRES VERSION: 8.4
POSTGRES HOME   : /u01/app/postgres/8.4/db
PGDATA          : /var/postgres/8.4/data
PGARCH          : 64

$ ulimit -a
core file size        (blocks, -c) unlimited
data seg size         (kbytes, -d) unlimited
file size             (blocks, -f) unlimited
open files                    (-n) 1024
pipe size          (512 bytes, -p) 10
stack size            (kbytes, -s) 8192
cpu time             (seconds, -t) unlimited
max user processes            (-u) 29980
virtual memory        (kbytes, -v) unlimited

Conclusión
Hemos visto como editando el archivo </etc/system> se puede tunear muchos límites que en la versión inicial de Solaris debemos mejorar. Además si todavía eres de los que no ven claro los project y la configuración dinámica aquí tienes una excusa nueva para, poco a poco, enamorarte de esta funcionalidad.


Referencias

No hay comentarios:

Publicar un comentario