Ver destacados

Comandos strace para solucionar problemas de procesos en Linux

Te mostramos diferentes comandos strace para solucionar problemas de procesos en Linux
Escrito por
18.6K Visitas  |  Publicado oct 24 2017 12:33
Favorito
Compartir
Comparte esta pagina a tus Amigos y Contactos usando las siguientes Redes Sociales


Cuando bajo nuestra responsabilidad tenemos maquinas con sistemas operátivos Linux, una de las formas más útiles y prácticas para gestionar de forma correcta cada aspecto de estas es conociendo las diferentes utilidades y comandos que existen para desplegar y brindar soporte a estas.

 

En esta oportunidad Solvetic hablará de una utilidad de línea de comandos llamada strace y veremos cómo puede convertirse en algo práctico para la administración del sistema operativo.

 

Aprende a utilizar la terminal de PowerShell desde un entorno Linux y gestiona sus procesos usando los cmdlets que necesites.

 

Qué es strace
strace es una herramienta de línea de comandos útil para diagnosticar, dar instrucciones y ejecutar tarea de depuración. Los administradores del sistema encontramos en strace una herramienta practica para resolver problemas con programas para los cuales la fuente no está disponible ya que no necesitan ser recompilados para rastrearlos.
La herramienta strace captura y registra todas las llamadas al sistema realizadas por un proceso y las señales recibidas por el proceso, strace se encarga de mostrar el nombre de cada llamada al sistema junto con sus argumentos entre paréntesis y su valor de retorno a error estándar, opcionalmente, será posible redirigirlo a un archivo.

 

 


1. Instalación de strace


Para instalar strace debemos ejecutar alguno de los siguientes comandos:
sudo apt install strace (Debian o Ubuntu)yum install strace (RedHat o CentOS)dnf install strace (Fedora)
En caso de que un programa se bloquee o se comporte de una manera inesperada, será posible acceder a las llamadas del sistema para obtener una idea de lo que sucedió exactamente durante su ejecución.

 

Las llamadas al sistema se pueden categorizar en diferentes eventos: los relacionados con la administración de procesos, los que toman un archivo como argumento, los que involucran redes, asignación de memoria, señales, IPC y también llamadas al sistema relacionadas con descriptores de archivos.

 


2. Cómo solucionar problemas de procesos en Linux con comandos strace


A continuacion vamos a ver diferentes comandos strace para solucionar los diferentes problemas de procesos que pueden surgir en Linux.

 

Trazar llamadas al sistema con strace
Esta opción nos permite rastrear todas las llamadas al sistema realizadas por el comando df, para ello ejecutamos lo siguiente:
strace df -h

 

En este resultado, podemos ver varios tipos de llamadas al sistema realizadas por el comando df, por ejemplo, una de ellas es:

open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
Donde:
  • Open: Es el tipo de llamada al sistema
  • Es el argumento de la llamada al sistema: “/etc/ld.so.cache”, O_RDONLY|O_CLOEXEC
  • 3: Es el valor de retorno de la llamada al sistema

 

 

Trazar procesos PID de Linux
Si ya se está ejecutando un proceso en el sistema, será posible rastrearlo a través de su PID de la siguiente manera:
sudo strace -c -p 465
Esto llenará la pantalla con la salida continua que muestra que las llamadas al sistema están siendo realizadas por el proceso, para finalizar, presionaremos las teclas Ctrl + C.

 

 

 

 

Obtener el resumen de un proceso de Linux
Al usar el parámetro -c, será posible generar un informe de tiempo total, llamadas y errores para cada llamada al sistema, para ello ejecutaremos la siguiente sintaxis:
sudo strace -c -p (PID)

 

Imprimir puntero de instrucción durante la llamada al sistema. La opción -i despliega el puntero de instrucción en el momento de cada llamada al sistema realizada por el programa.

sudo strace -i df -h

 

 

 

Mostrar hora del día para cada línea de salida de traza
Con strace es posible imprimir la hora del día para cada línea en la salida de rastreo, usando el indicador -t:
sudo strace -t df -h

 

 

 

Desplegar tiempo de impresión gastado en llamadas al sistema
Para mostrar la diferencia de tiempo entre el inicio y el final de cada llamada al sistema realizada por un programa, debemos usar la opción -T:
sudo strace -T df -h

 

 

 

Trazar llamadas específicas
El comando trace=write se conoce como una expresión calificada, donde trace es un calificador (otros incluyen signal, abreviatura, verbose, raw, read o write)., en este caso, escribe el valor del calificador. El siguiente comando despliega en tiempo real las llamadas al sistema para imprimir la salida de df en salida estándar:
sudo strace -e trace=write df -h

 

Algunos comandos adicionales que podemos usar son:

sudo strace -e trace=open,close df -hsudo strace -e trace=open,close,read,write df -hsudo strace -e trace=all df -h

 

 

Trazar llamadas del sistema basados en una condición
Este comando se puede usar para rastrear todas las llamadas al sistema que involucran la administración de procesos, ejecutaremos lo siguiente:
sudo strace -q -e trace=process df -h

 

Ahora, para rastrear todas las llamadas al sistema que toman un nombre de archivo como argumento, ejecutaremos el siguiente comando:

sudo strace -q -e trace=file df -h

 

Para rastrear todas las llamadas al sistema que implican asignación de memoria, ejecutaremos la siguiente línea:

sudo strace -q -e trace=memory df -h

 

 

 

Redireccionar el rastreo a un archivo de salida
Si deseamos escribir los mensajes de seguimiento enviados a un error estándar en un archivo, usaremos la opción -o. Esto significa que solo la salida del comando se imprime en la pantalla de la siguiente manera:
sudo strace -o df_debug.txt df -h

 

Este archivo podremos visualizarlo ejecutando la línea:

cat df_debug.txt

 

 

Desplegar salida de depuración de strace
Si queremos desplegar la información de depuración para la herramienta strace, debemos usar el indicador -d:
strace -d df -h


 

 

Ayuda de strace
Para desplegar la ayuda del comando strace ejecutaremos la siguiente línea:
man strace


 

Así hemos visto como strace se convierte en una ayuda más para las tareas de gestión en distros de Linux.

 

 

En este tutorial te explicamos cómo establecer prioridades en los procesos de las distros Linux usando nice y renice.

¿Te ayudó este Tutorial?

Ayuda a mejorar este Tutorial!
¿Quieres ayudarnos a mejorar este tutorial más? Puedes enviar tu Revisión con los cambios que considere útiles. Ya hay 0 usuario que han contribuido en este tutorial al enviar sus Revisiones. ¡Puedes ser el próximo!