Analisi delle prestazioni del server NFS Linux


22

Vorrei fare alcune analisi del nostro server NFS per aiutare a rintracciare potenziali colli di bottiglia nelle nostre applicazioni. Il server esegue SUSE Enterprise Linux 10.

Il tipo di cose che sto cercando di sapere sono:

  • A quali file accede da quali client
  • Velocità effettiva di lettura / scrittura per cliente
  • Spese generali imposte da altre chiamate RPC
  • Tempo trascorso in attesa di altre richieste NFS o I / O del disco per servire un client

Conosco già le statistiche disponibili /proc/net/rpc/nfsde in effetti ho scritto un post sul blog descrivendole in modo approfondito. Quello che sto cercando è un modo per scavare più a fondo e aiutare a capire quali fattori stanno contribuendo alle prestazioni viste da un particolare cliente. Voglio analizzare il ruolo che il server NFS svolge nelle prestazioni di un'applicazione sul nostro cluster in modo da poter pensare ai modi per ottimizzarlo al meglio.


Sembra il tipo di cosa per cui è stato scritto il rubinetto di sistema. I documenti sono un po 'schifosi, ma immagino che potresti sborsare qualcosa per fare questo tipo di analisi usandolo. sourceware.org/systemtap/examples/keyword-index.html
Cian

Risposte:


2

Solo un'idea, prova ad annusare il traffico di nfs con WireShark. Potrebbe dirti a quale utente ha effettuato l'accesso quale file:

tshark -R nfs -i eth0

2

Devo dire di tutte le diverse * utility di stat disponibili per una, nfsstat è di gran lunga la peggiore! Ti dà la possibilità di guardare un sacco di segnalini, ma questo è tutto. Se li guardi due volte, devi fare il lavoro per cercare di capire quanto è cambiato ogni contatore e se vuoi conoscere la velocità di cambiamento che devi dividere per il numero di secondi tra i campioni. In tutta onestà, nfsstat risale a molti anni in cui le cose erano ancora piuttosto rozze e ora è ostacolato da nessuno che vuole cambiare il formato di output perché probabilmente avrebbe rotto molte cose.

Per quanto riguarda l'utilizzo di collectl per monitorare nfs, fornisce l'output di nfsstat in un formato molto più facile da leggere, ma ciò che è ancora meglio è possibile lasciarlo funzionare per ore o giorni e riprodurre i dati raccolti in background. Per quanto riguarda la richiesta di vedere quali processi stanno eseguendo, collectl può anche raccogliere i dati di processo tra cui la quantità di I / O di ciascun processo e persino riprodurli mostrando i principali utenti I / O. Puoi anche utilizzare la funzione principale in tempo reale.

Se vuoi guardare il tema dei dischi, anche collettivo può farlo e visualizzare tutto in una visualizzazione coordinata.

Dai un'occhiata ... -mark


2

collectl (in particolare il suo sottosistema NFS ) è una utility molto utile che potrebbe essere utile per la tua analisi ma non corrisponde al tuo elenco di requisiti. Non sono a conoscenza di alcuna utility Linux che lo faccia.

(Per favore fatemi aggiungere questa nota off-topic: Ci sono software che soddisfa le vostre esigenze: Sun DTrace a base di Analytics (pdf) . - ma purtroppo non è disponibile su Linux Troverete un sacco di grandi esempi di blog di Brendan Gregg che illustrano le capacità di questo strumento.)



1

A mio avviso, questo evidenzia esattamente il problema con gli strumenti di oggi. Qui ne abbiamo menzionati almeno 3 inclusi nfsstat, iostat e iotop. Poi è stata fatta una breve menzione di WireShare e Nfsreplay. Sembra davvero un modo normale di fare le cose? Oltre a WireShark con una categoria a sé stante, non preferiresti 1 strumento?

Per gli apri, mentre trovo l'output di iostat molto utile, è troppo difficile da leggere con tutti quei 0,00 nei numeri. Collectl riporta gli stessi identici dati ma formattati molto più facilmente alla vista. Sai già cosa penso di nfsstat e poiché collectl è in grado di riprodurre qualsiasi dato, non è necessario un programma di utilità 'replay'. Per quanto riguarda "iotop", collect può anche mostrare i processi ordinati in base a qualsiasi I / O incluso.

Quindi anche lì hai tutto, completo di timestamp. Se hai bisogno di un intervallo di monitoraggio più preciso, puoi sempre riportare il campionamento a 0,1 o 0,5 secondi o qualsiasi altra via di mezzo, anche se genererai un sovraccarico se monitorerai i processi così velocemente, ma con qualsiasi utilità di monitoraggio dei processi.

E il bonus finale è tutto ciò che raccogli con collectl che puoi caricare in un foglio di calcolo e tracciare facilmente O usare colplot che fa parte di collectl-utils.

-marchio


1

Potresti provare nfswatchda http://nfswatch.sourceforge.net

Puoi vedere alcuni esempi di output su http://prefetch.net/blog/index.php/2009/06/16/monitoring-nfs-operations-with-nfswatch/

nfswatchè un po 'come top(anche se non sono sicuro che esista una modalità batch). Una volta in esecuzione, puoi cambiare il display premendo un tasto (ad es. "C" per visualizzare i client NFS usando il tuo server NFS).

Nel mio breve test, tuttavia, nfswatchnon sembra funzionare con NFSv4.


1
Suggerimento interessante. In realtà, l'autore stesso afferma che NFSv4 non è supportato e lo strumento non è stato aggiornato per circa 3 anni. Un vero peccato perché sarebbe di grande utilità!
Tonin

1

Al momento non ho risposte migliori, tuttavia puoi seguire l'IO del disco con precisione

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

Fornisce cifre molto utili, in particolare la dimensione media della coda e il tempo di attesa (in ms) per i tuoi IO. Mostra abbastanza prontamente se i tuoi dischi sono un collo di bottiglia e se il collo di bottiglia è il conteggio o la velocità effettiva di IO.

Quindi con

netstat -plaute | grep nfs

Vedrai le connessioni client e i byte trasferiti da ciascun client in tempo reale. loop su di esso per dati continui. Sarebbe abbastanza facile creare uno script che fornisca dati continui ... Ci sto lavorando :)

Ora per ottenere IO per processo, puoi usare l'eccellente iotop . Tuttavia, devi ancora trovare un modo per abbinare i processi nfsd ai client.

Per quanto riguarda i file a cui accede il client, sono bloccato. In realtà i file attualmente letti / scritti da un client NFS non compaiono nemmeno nell'output lsof.

Solo per espandere su netstat, usare watch -d per vedere come le cose cambiano e si ordinano per host

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

Questa è la migliore soluzione che ho trovato finora per scoprire quale host sta causando il traffico su NFS. Quindi posso andare al client per scoprire a quale file accede. Grazie!
Peschü,

0

Potresti voler dare un'occhiata a nfsreplay. Potrebbe aiutarti a capire cosa sta succedendo. Inoltre si potrebbe trovare le informazioni ei link qui utile

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.