Herramientas de usuario

Herramientas del sitio


notas:strace

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
notas:strace [2020/04/17 01:52] – [Ejemplo de ejecución] cayunotas:strace [2020/04/17 02:11] (actual) – [Extras y referencias útiles] cayu
Línea 1: Línea 1:
 ====== Strace ====== ====== Strace ======
  
-**strace** es una utilidad que nos puede ayudar en la comprobación de errores y cuellos de botella en procesos en el sistema operativo GNU/Linux. La misma sirve para monitorear las llamadas al sistema usadas por un determinado programa, todas las señales que éste recibe y cuando tiempo toma cada llamada. Esto es posible por una característica del núcleo linux llamada **ptrace**.+**strace** es una utilidad que nos puede ayudar en la comprobación de errores y cuellos de botella en procesos en el sistema operativo GNU/Linux. La misma sirve para monitorear las llamadas al sistema usadas por un determinado programa, todas las señales que este recibe y cuando tiempo toma cada llamada. Esto es posible por una característica del núcleo linux llamada **ptrace**.
  
 Se puede arrancar junto al programa al que se le efectúa el trace, imprime la lista de llamadas al sistema que dicho programa ejecuta. Es útil para averiguar la causa del fallo de un programa determinado porque informa de situaciones en las que por ejemplo, el programa está intentando acceder a un fichero que no existe o que no tiene permiso de lectura o tiempos de espera muy altos al intentar obtener un servicio remoto por red. Se puede arrancar junto al programa al que se le efectúa el trace, imprime la lista de llamadas al sistema que dicho programa ejecuta. Es útil para averiguar la causa del fallo de un programa determinado porque informa de situaciones en las que por ejemplo, el programa está intentando acceder a un fichero que no existe o que no tiene permiso de lectura o tiempos de espera muy altos al intentar obtener un servicio remoto por red.
Línea 7: Línea 7:
 ===== Uso ===== ===== Uso =====
  
-En simples palabras su ejecución mas simple es strace -p //pid//+En simples palabras su ejecución más simple es strace -p //pid//
  
  
-Si ejecutamos un **strace** al numero de proceso del squid obtendríamos algo como esto+Si ejecutamos un **strace** al número de proceso del squid obtendríamos algo como esto
  
 <code> <code>
Línea 125: Línea 125:
 gcc socket.c -o socket gcc socket.c -o socket
 </code> </code>
-Strace nos mostrará muchos datos, como llamadas al sistema para imprimi como files descriptors, llamadas a memoria etc. Si solo nos interesa las llamadas a funciones de red, podemos agregarle los siguientes argumentos //-e trace=network,read,write// o simplemente //-e trace=network//+Strace nos mostrará muchos datos, como llamadas al sistema para imprimir datos en pantalla, files descriptors, llamadas a memoria etc. 
 +Si solo nos interesan las llamadas a funciones de red, podemos agregarle los siguientes argumentos //-e trace=network,read,write// o simplemente //-e trace=network//
 <code> <code>
 00    strace -e trace=network,read,write ./socket  cayu.com.ar 80 00    strace -e trace=network,read,write ./socket  cayu.com.ar 80
Línea 229: Línea 230:
 +++ exited with 0 +++ +++ exited with 0 +++
 </code> </code>
-===== Extras ===== + 
-A veces también puede servirnos **ltrace**, que es una utilidad de depuración, que se usa para mostrar las llamadas que una aplicación de espacio de usuario hace a las bibliotecas compartidas.+Estadísticas de las llamadas : 
 +<code> 
 +strace -c  ./socket  cayu.com.ar 80 
 +<html> 
 +<head><title>301 Moved Permanently</title></head> 
 +<body bgcolor="white"> 
 +<center><h1>301 Moved Permanently</h1></center> 
 +<hr><center>nginx</center> 
 +</body> 
 +</html> 
 +% time     seconds  usecs/call     calls    errors syscall 
 +------ ----------- ----------- --------- --------- ---------------- 
 + 24,08    0,000164          82                   write 
 + 22,76    0,000155                  21           read 
 + 16,45    0,000112         112                   shutdown 
 + 12,92    0,000088          22                 2 connect 
 +  8,37    0,000057                  17           close 
 +  4,55    0,000031          31                   sendto 
 +  2,79    0,000019                             socket 
 +  2,35    0,000016                             poll 
 +  2,06    0,000014                             munmap 
 +  1,91    0,000013                             setsockopt 
 +  0,88    0,000006                             ioctl 
 +  0,88    0,000006                             recvfrom 
 +  0,00    0,000000                             stat 
 +  0,00    0,000000                  13           fstat 
 +  0,00    0,000000                             lseek 
 +  0,00    0,000000                  26           mmap 
 +  0,00    0,000000                             mprotect 
 +  0,00    0,000000                             brk 
 +  0,00    0,000000                           1 access 
 +  0,00    0,000000                             execve 
 +  0,00    0,000000                             uname 
 +  0,00    0,000000                           1 arch_prctl 
 +  0,00    0,000000                  13           openat 
 +------ ----------- ----------- --------- --------- ---------------- 
 +100.00    0,000681                   138         4 total 
 +</code> 
 +===== Extras y referencias útiles ===== 
 +A veces también puede servirnos **ltrace**, que es una utilidad de depuración, que se usa para mostrar las llamadas que una aplicación de espacio de usuario hace a las bibliotecas compartidas. Pero eso es para otra nota. 
 + 
 +  * https://www.linkedin.com/learning/faster-python-services/strace 
 +  * https://www.amazon.es/Linux-Security-Cookbook-Daniel-Barrett/dp/0596003919 
 +  * https://www.mcanan.uy/blog/strace/ 
 +  * https://strace.io/
notas/strace.1587088368.txt.gz · Última modificación: 2020/04/17 01:52 por cayu