Inspeccione las operaciones de IO en el sistema FreeBSD

Sabría que hay alguna forma de inspeccionar / interceptar operaciones de IO en FreeBSD. Me gusta ktrace, pero si no conozco el process (que toma mucho time, por ejemplo).

Solutions Collecting From Web of "Inspeccione las operaciones de IO en el sistema FreeBSD"

Para el análisis de supervisión y performance, tiene una poderosa herramienta semiprogtwigble llamada dtrace .

dtrace permite build líneas de command o pequeños progtwigs que le permitirán seguir las llamadas del sistema.

Es algo poderoso y complejo. y puedes encontrar algunos ejemplos que incluyen un libro muy interesante . Rendimiento de sistemas: Enterprise y la nube.

Desde la página Herramientas de DTrace :

DTrace, una implementación de seguimiento dynamic que está disponible en diferentes sistemas operativos (Solaris, Mac OS X, FreeBSD, …). DTrace ayuda a solucionar problemas en los serveres al proporcionar nuevas vistas detalladas de las aplicaciones y las partes internas del sistema, a un nivel que antes era difícil o imposible de acceder. Proporciona un lenguaje para escribir scripts de DTrace que es similar a C y awk y está basado en events.

# Files opened by process: dtrace -n 'syscall::open*:entry { printf("%s %s",execname,copyinstr(arg0)); }' # Read bytes by process: dtrace -n 'sysinfo:::readch { @bytes[execname] = sum(arg0); }' # Write bytes by process: dtrace -n 'sysinfo:::writech { @bytes[execname] = sum(arg0); }' # Read size distribution by process: dtrace -n 'sysinfo:::readch { @dist[execname] = quantize(arg0); }' # Write size distribution by process: dtrace -n 'sysinfo:::writech { @dist[execname] = quantize(arg0); }' 

Como se dijo en otra respuesta, DTrace es una herramienta poderosa para rastrear la actividad del sistema y también se puede usar para esta tarea.

Algunos scripts de Dtrace son portátiles, pero muchos son específicos del sistema operativo. Se pueden encontrar muchas secuencias de commands útiles en el Dtrace Toolkit , pero rwsnoot y opensnoop aún no funcionan en FreeBSD.

Para controlar las llamadas de sys abiertas, esta secuencia de commands se puede usar:

 #!/usr/sbin/dtrace -s dtrace:::BEGIN { printf("%5s %5s %s","UID","PID", "Command Path"); } syscall::open*:entry { printf("%5d %5d %s %s", uid, pid, execname, probefunc == "open" ? copyinstr(arg0) : copyinstr(arg1)); } 

Script simple (pero no muy útil) para lectura / escritura

 #!/usr/sbin/dtrace -s syscall::*read:entry, syscall::*write:entry { printf("%5d %s CALL %s(%d, .., %d)", pid, execname, probefunc, arg0, arg2); self->fd = arg0; } syscall::*readv:entry, syscall::*writev:entry { printf("%5d %s CALL %s(%d, ...)", pid, execname, probefunc, arg0); } syscall::*read*:return { printf("%5d %s fd %d read %d bytes", pid, execname, self->fd, arg0); self->fd = 0; } syscall::*write*:return { printf("%5d %s fd %d wrote %d bytes", pid, execname, self->fd, arg0); self->fd = 0; } 

Probablemente necesites un filter. P.ej. no rastrear dtrace self:

 syscall::foobar:entry /execname != "dtrace"/ { ... } 

Personalmente, tiendo a usar top -m io .