Analizando el rendimiento del servidor Linux NFS


22

Me gustaría hacer un análisis de nuestro servidor NFS para ayudar a localizar posibles cuellos de botella en nuestras aplicaciones. El servidor ejecuta SUSE Enterprise Linux 10.

El tipo de cosas que estoy buscando saber son:

  • A qué archivos acceden los clientes
  • Lectura / escritura de rendimiento por cliente
  • Gastos generales impuestos por otras llamadas RPC
  • Tiempo dedicado a esperar otras solicitudes NFS o E / S de disco para atender a un cliente

Ya conozco las estadísticas disponibles /proc/net/rpc/nfsdy, de hecho, escribí una publicación de blog describiéndolas en profundidad. Lo que estoy buscando es una forma de profundizar y ayudar a comprender qué factores contribuyen al rendimiento visto por un cliente en particular. Quiero analizar el papel que desempeña el servidor NFS en el rendimiento de una aplicación en nuestro clúster para poder pensar en formas de optimizarlo mejor.


Este parece ser el tipo de cosa para la que se escribió el tap del sistema. Los documentos son un poco basura, pero supongo que podrías preparar algo para hacer este tipo de análisis usándolo. sourceware.org/systemtap/examples/keyword-index.html
Cian

Respuestas:


2

Solo una idea, intente oler el tráfico nfs con wireshark. Podría decirte qué usuario accedió a qué archivo:

tshark -R nfs -i eth0

2

Tengo que decir que de todas las diferentes utilidades estadísticas disponibles para uno, ¡nfsstat es, con mucho, el peor! Te da la capacidad de mirar un montón de contadores, pero eso es todo. Si los mira dos veces, TIENE que hacer el trabajo de tratar de determinar cuánto cambió cada contador y si desea saber la tasa de cambio, entonces debe dividir por la cantidad de segundos entre muestras. Para ser justos, nfsstat se remonta a muchos años cuando las cosas todavía eran bastante crudas y ahora nadie se ve obstaculizado por cambiar el formato de salida porque probablemente rompería muchas cosas.

En cuanto al uso de collectl para monitorear nfs, proporciona salida nfsstat en un formato mucho más fácil de leer, pero lo que es aún mejor, puede dejar que se ejecute durante horas o días y reproducir los datos que había recopilado en segundo plano. En cuanto a la solicitud para ver qué procesos están haciendo, collectl también puede recopilar datos de proceso, incluida la cantidad de E / S que está haciendo cada proceso e incluso reproducirlos mostrando los principales usuarios de E / S. También puede usar la función superior en tiempo real.

Si desea ver el tema de los discos, los mismos colectivos también pueden hacerlo y mostrar todo en una pantalla coordinada.

Compruébalo ... -marca


2

collectl (especialmente su subsistema NFS ) es una utilidad muy buena que puede ser útil para su análisis pero no coincide con su lista de requisitos. No conozco ninguna utilidad de Linux que lo haga.

(Por favor, permítanme añadir esta nota fuera de tema: No es software que se ajuste a sus necesidades: de Sun basadas en DTrace Analytics (pdf) . - pero por desgracia no está disponible en Linux Usted encontrará una gran cantidad de grandes ejemplos en el blog de Brendan Gregg que ilustran las capacidades de esta herramienta)



1

En mi opinión, esto resalta exactamente el problema con las herramientas actuales. Aquí se mencionan al menos 3, incluidos nfsstat, iostat e iotop. Luego hubo una mención pasajera de Wirehare y nfsreplay. ¿Esto realmente suena como una forma normal de hacer las cosas? Aparte de wireshark con una categoría propia, ¿no preferirías 1 herramienta?

Para los abridores, aunque encuentro que la salida de iostat es muy útil, es demasiado difícil de leer con todos esos .00 en los números. Collectl informa exactamente los mismos datos pero con un formato mucho más fácil a la vista. Ya sabes lo que pienso de nfsstat y dado que collectl puede reproducir cualquier dato no hay necesidad de una utilidad de 'reproducción'. En cuanto a 'iotop', collect también puede mostrar procesos ordenados por cualquier cosa incluida I / O.

Así que allí también lo tienes todo, completo con marcas de tiempo. Si necesita un intervalo de monitoreo más fino, siempre puede reducir el muestreo a 0.1 o 0.5 segundos o algo intermedio, aunque generará más sobrecarga si supervisa los procesos tan rápido, pero lo haría con cualquier utilidad de monitoreo de procesos.

Y el bono final es todo lo que recolectas con collectl que puedes cargar en una hoja de cálculo y trazar fácilmente O usar colplot que es parte de collectl-utils.

-marca


1

Es posible que desee probar nfswatchdesde http://nfswatch.sourceforge.net

Puede ver algunos resultados de muestra en http://prefetch.net/blog/index.php/2009/06/16/monitoring-nfs-operations-with-nfswatch/

nfswatches algo así como top(aunque no estoy seguro de si hay un modo por lotes). Una vez que se está ejecutando, puede cambiar o cambiar la pantalla presionando una tecla (por ejemplo, "c" para mostrar clientes NFS usando su servidor NFS).

En mi breve prueba, sin embargo, nfswatchno parece funcionar con NFSv4.


1
Sugerencia interesante En realidad, el propio autor dice que NFSv4 no es compatible y que la herramienta no se ha actualizado durante aproximadamente 3 años. Una pena, ya que sería de gran utilidad!
Tonin

1

No tengo mejores respuestas en este momento, sin embargo, puede seguir el disco IO con bastante precisión con

iostat -mx <delay in sec.> <devices>

Proporciona cifras muy útiles, particularmente el tamaño promedio de la cola y el tiempo de espera (en ms) para sus E / S. Se muestra con bastante facilidad si sus discos son un cuello de botella y si el cuello de botella es el recuento de E / S o el rendimiento.

Luego con

netstat -plaute | grep nfs

Verá las conexiones del cliente y los bytes transferidos desde cada cliente en tiempo real. bucle en él para datos continuos. Sería bastante fácil crear un script que proporcione datos continuos ... Estoy trabajando en ello :)

Ahora para obtener IO por proceso, puede usar el excelente iotop . Sin embargo, todavía tiene que encontrar una manera de hacer coincidir los procesos nfsd con los clientes.

En cuanto a qué archivos está accediendo qué cliente, estoy atascado. En realidad, los archivos actualmente leídos / escritos desde un cliente NFS ni siquiera aparecen en la salida lsof.

Solo para expandir el netstat, use watch -d para ver cómo cambian las cosas y ordenar por host

watch -d "netstat -plaute | grep nfs | sort -k 4,5"

Esta es la mejor solución que encontré hasta ahora para averiguar qué host está causando el tráfico en NFS. Luego puedo ir al cliente para averiguar a qué archivo accede. ¡Gracias!
peschü

0

Es posible que desee ver nfsreplay. Podría ayudarlo a descubrir qué está sucediendo. También puede encontrar útil la información y los enlaces aquí.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.