mar 31, 2012
Debug de procesos en Solaris con Truss
Podríamos decir que truss es el equivalente en Solaris a strace de Linux, si bien existen también otras alternativas como dtrace que también cumplen perfectamente esta función.
Truss es una utilidad que permite ejecutar el comando especificado o un proceso concreto y muestra durante su ejecución las llamadas al sistema que ejecuta y las señales que recibe. Esto permite ver todo el proceso de ejecución y hacer debug de cualquier error o fault que ocurre.
Vamos a ver unos ejemplos. Lo más básico sería ejecutar truss seguido del comando del que queremos ver su debug, en el siguiente ejemplo simplemente ejecutamos el comando df:
# truss df
execve("/usr/gnu/bin/df", 0x08047E6C, 0x08047E74) argc = 1
sysinfo(SI_MACHINE, "i86pc", 257) = 6
mmap(0x00000000, 32, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANON, -1, 0) = 0xD1BB0000
mmap(0x00000000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANON, -1, 0) = 0xD1BA0000
mmap(0x00000000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANON, -1, 0) = 0xD1B90000
mmap(0x00000000, 4096, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANON, -1, 0) = 0xD1B80000
memcntl(0xD1BB8000, 32064, MC_ADVISE, MADV_WILLNEED, 0, 0) = 0
memcntl(0x08050000, 15312, MC_ADVISE, MADV_WILLNEED, 0, 0) = 0
resolvepath("/usr/lib/ld.so.1", "/lib/ld.so.1", 1023) = 12
resolvepath("/usr/gnu/bin/df", "/usr/gnu/bin/df", 1023) = 15
sysconfig(_CONFIG_PAGESIZE) = 4096
stat64("/usr/gnu/bin/df", 0x08047AB0) = 0
open("/var/ld/ld.config", O_RDONLY) Err#2 ENOENT
stat64("/lib/libc.so.1", 0x08047260) = 0
...
...
...
No muestro todo el output debido a su longitud, podemos volcarlo a un fichero para analizarlo mejor en lugar de la salida stderr:
# truss -o salida.out df
En el siguiente ejemplo hacemos debug de un proceso que ya se encuentra en ejecución:
# truss -rall -wall -f -p <PID>
“-rall” implica ver todos los datos de lectura y “-wall” todos los de escritura, con “-f” vemos los procesos fordked y “-p” especifica el PID.
Podéis ver más ejemplos e información del comando en la página man correspondiente. A continuación podéis ver un par:
$ man truss
Trazar las llamadas de sistema open, close, read y write únicamente:
# truss -t open,close,read,write find . -print >salida.out
Trazar todas las llamads a funciones a nivel de usuario desde y hacia cualquier sitio:
# truss -u a.out -u ld:: -u :: <comando>
En su día, en el artículo de
Yo, hasta el momento, la única forma que conocía de limitar recursos por usuario en MySQL era estableciendo la variable max_user_connections o en su defecto creando instancias independientes del servicio para distintas bases de datos. Revisando la
Para poder utilizar la API que ofrece NetAPP es necesario disponer de un usuario en la cabina con permisos específicos. Por supuesto no debemos utilizar el usuario root para ello así que tenemos que crear un usuario específico. Por ejemplo, si queremos utilizar el SDK de NetAPP y graficar en Cacti necesitaremos este usuario.
Comentarios recientes