Category: Linux
Strace : Comando para hacer debug a bajo nivel en Linux...
strace es un utilitario que sirve para hacer un trace a un comando en partícular, suena sencillo... pero es un potente amigo
Disponible en ambientes Linux, es una gran herramienta para buscar el porque algún comando en partícular falla.
Cada vez que strace ejecuta algún comando , puede registrar todos los archivos utilizados y el comando ejecutado en un stack, el cual puede ser ubicado en un archivo de salida.

Para generar cualquier salida con strace lo ejecutamos de la siguiente forma.
Eje:
[oracle@oracle10g oracle]$ strace -o salida.txt lsnrctl start LISTENR
[oracle@oracle10g oracle]$ ls -ltr salida.txt
-rw-r--r-- 1 oracle oinstall 65910 Dec 6 09:26 salida.txt
Cada vez que sucede un error casi siempre aparece un -1 con la descripción del error dentro del archivo generado en el punto anterior.
Eje:
2236 stat64("/u01/app/oracle/product/10.1.0/db_1/lib/tls", 0xbfff8bf0) = -1 ENOENT (No such file or directory)
Incluso se le puede agregar la fecha del día a cada línea de salida de strace
Eje:
strace -t -o salida.txt lsnrctl start LISTENR
more salida.txt
09:29:54 execve("/u01/app/oracle/product/10.1.0/db_1/bin/lsnrctl", ["lsnrctl", "start", "LISTENR"], [/* 29 vars */]) = 0
09:29:54 uname({sys="Linux", node="oracle10g.inmotion.cl", ...}) = 0
09:29:54 brk(0) = 0x8f75000
Incluso con microsegundos
Eje:
[oracle@oracle10g oracle]$ strace -tt -o salida.txt lsnrctl start LISTENR
[oracle@oracle10g oracle]$ more salida.txt
09:30:46.284985 execve("/u01/app/oracle/product/10.1.0/db_1/bin/lsnrctl", ["lsnrctl", "start", "LISTENR"], [/* 29 vars */]) = 0
09:30:46.286140 uname({sys="Linux", node="oracle10g.inmotion.cl", ...}) = 0
09:30:46.286579 brk(0) = 0x928d000
Si se quiere saber en microsegundos la duración de cada proceso interno ejecutado por el strace (según el comando ingresado)
Eje:
[oracle@oracle10g oracle]$ strace -tt -T -o salida.txt lsnrctl start LISTENR
09:31:36.680126 execve("/u01/app/oracle/product/10.1.0/db_1/bin/lsnrctl", ["lsnrctl", "start", "LISTENR"], [/* 29 vars */]) = 0 <0.000425>
09:31:36.681208 uname({sys="Linux", node="oracle10g.inmotion.cl", ...}) = 0 <0.000073>
09:31:36.681608 brk(0) = 0x9b6e000 <0.000072>
Incluso se puede fitrar por tipo de ejecución del comando ejecutado por el strace
Eje:
Para saber sólo los comandos asociados a la red
strace -tt -T -e trace=network -o salida.txt lsnrctl start LISTENR
Para saber sólo los comando ejecutados, pero que reciban como parámetro un archivo
Eje:
strace -tt -T -e trace=file -o salida.txt lsnrctl start LISTENR
Incluso se le puede indicar algún PID de sistema operativo que ya se encuentre en ejecución
Eje:
strace -tt -T -p 18909 -o salida.txt lsnrctl start LISTENR
Espero les sirva
![]()
![]()
10.12.09. 07:30:08. 414 words, 5139 views. Categories: Base de datos, Tuning / Performance, Linux , Leave a comment » • Send a trackback »