Tienes problemas para iniciar httpd y no hay errores en los logs?,
Tienes otro programa que que se congela y no tienes ni idea de que pueda
estar pasando? es buen momento para empezar a usar strace.
Strace es una utilidad que se usa para correr un comando y visualizar
todas sus interacciones con el sistema de forma que puedes ver
exactamente que esta haciendo el programa desde que inicia hasta que
sale incluso puede ser usado para hacer pruebas de rendimiento y
estabilidad. En este articulo lo usaremos solo como una herramienta de
diagnostico para ver por que un programa se congela.
El comando strace es fácil de usar, simplemente ejecuta strace al iniciar el servicio o programa que deseas diagnosticar, por ejemplo:
Esto te debería de dar una salida de bastantes lineas en el terminal. Veamos que pasa cuando una aplicación da error, intentemos correr man sin ningún parámetro.
$ man What manual page do you want?
Ahora veamos que hace man para llegar a ese mensaje:
execve("/usr/bin/man", ["man"], [/* 23 vars */]) = 0 brk(0) = 0x9e89000
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7869000
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=24131, ...}) = 0 ...
open("/usr/share/locale/en_US.UTF-8/man", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en_US.UTF-8/LC_MESSAGES/man", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en/man", O_RDONLY) = 4
fstat64(4, {st_mode=S_IFREG|0644, st_size=5830, ...}) = 0
mmap2(NULL, 5830, PROT_READ, MAP_PRIVATE, 4, 0) = 0xb7865000
close(4) = 0
write(2, "What manual page do you want?\n", 30) = 30 ...
Gracias a que man dio como salida "What manual page do you want?"
sabemos cual es el error, pero si no nos hubiese dado este mensaje, como
sabemos lo que esta pasando? aquí es cuando strace nos ayuda. La salida
del strace es mucho mas larga que el párrafo que tenemos arriba pero lo
recorte solo para mostrar lo que nos interesa en este ejemplo. Si se
fijan el error "-1 ENOENT (No such file or directory)" se repite
unas tres veces esto en algunos casos es un indicativo de lo que puede
estar pasando.
Identificar los errores es relativamente fácil, por lo general tienen un
-1 como salida y no todos los errores son fatales pero nos pueden dar
pistas de lo que este mal con el programa
Algunos paramentos interesantes
Puedes usar -u seguido del nombre del usuario para ejecutarlo como ese usuario en especifico cosa que es ideal para identificar
correctamente problemas de permisos y lo mas seguro es que estés
corriendo strace como root pero la mayoría de los servicios tienen sus
propios usuarios para correr.
El parámetro -p seguido del PID es útil cuando el proceso que queremos
examinar ya esta corriendo.
Personalmente suelo correrlo con estos parámetros:
strace -f -F -v -s 8192 -o <archivo>
- -f Permite hacerle strace a los posibles forks que haga un programa,
por ejemplo httpd.
- -F Cumple la misma función que -f pero siempre lo pongo por
cuestión de costumbre.
- -v Nos da una salida detallada.
- -s 8192 Asigno el valor de 8192 como limite de longitud de las
cadenas que se van a imprimir. Por defecto es 32 y yo quiero la mayor
cantidad de información posible.
- -o La salida va a ser redirigida a un archivo.