Analisando o desempenho do servidor Linux NFS


22

Eu gostaria de fazer uma análise do nosso servidor NFS para ajudar a rastrear possíveis gargalos em nossos aplicativos. O servidor está executando o SUSE Enterprise Linux 10.

O tipo de coisas que estou procurando saber são:

  • Quais arquivos estão sendo acessados ​​por quais clientes
  • Taxa de transferência de leitura / gravação por cliente
  • Despesas gerais impostas por outras chamadas RPC
  • Tempo gasto aguardando outras solicitações NFS, ou E / S de disco, para atender um cliente

Eu já sei sobre as estatísticas disponíveis /proc/net/rpc/nfsde, de fato, escrevi uma postagem no blog descrevendo-as em profundidade. O que estou procurando é uma maneira de aprofundar e ajudar a entender quais fatores estão contribuindo para o desempenho observado por um cliente específico. Quero analisar a função que o servidor NFS desempenha no desempenho de um aplicativo em nosso cluster, para que eu possa pensar em maneiras de otimizá-lo da melhor maneira.


Esse parece ser o tipo de coisa para a qual o toque no sistema foi escrito. Os documentos são um pouco ruins, mas eu acho que você poderia criar algo para fazer esse tipo de análise usando-o. sourceware.org/systemtap/examples/keyword-index.html
Cian

Respostas:


2

Apenas uma idéia, tente cheirar o tráfego da NFS com o wireshark. Pode dizer qual usuário acessou qual arquivo:

tshark -R nfs -i eth0

2

Eu tenho que dizer de todos os diferentes utilitários * stat disponíveis para um, o nfsstat é de longe o pior! Isso permite que você veja vários contadores, mas é tudo. Se você olhar para eles duas vezes, terá que fazer o trabalho de tentar descobrir o quanto cada contador mudou e, se quiser saber a taxa de alteração, precisará dividir pelo número de segundos entre as amostras. Com toda a justiça, o nfsstat data de muitos anos em que as coisas ainda eram bastante grosseiras e agora é dificultada por ninguém querer mudar o formato da saída, porque provavelmente quebraria muitas coisas.

Quanto ao uso do collectl para monitorar o nfs, ele fornece a saída do nfsstat em um formato muito mais fácil de ler, mas o melhor é que você pode deixá-lo funcionar por horas ou dias e reproduzir os dados que você coletou em segundo plano. Quanto à solicitação para ver o que os processos estão executando, o collectl também pode coletar dados do processo, incluindo a quantidade de E / S que cada processo está executando e até reproduzi-lo, mostrando os principais usuários de E / S. Você também pode usar o recurso principal em tempo real.

Se você quiser assistir ao tema dos discos, o próprio eu também pode fazer isso e exibir tudo em uma exibição coordenada.

Confira ... -marque


2

O collectl (especialmente seu subsistema NFS ) é um utilitário muito bom que pode ser útil para sua análise, mas não corresponde à sua lista de requisitos. Não conheço nenhum utilitário Linux que faça isso.

(Por favor, deixe-me adicionar esta nota fora do tópico: Há um software que atende aos seus requisitos: Analytics baseado em DTrace da Sun (pdf) - mas infelizmente não está disponível no Linux. Você encontrará muitos exemplos excelentes no blog de Brendan Gregg, que ilustram os recursos desta ferramenta.)



1

Na minha opinião, isso destaca exatamente o problema com as ferramentas de hoje. Aqui são mencionados pelo menos três, incluindo nfsstat, iostat e iotop. Depois, houve uma menção passageira a wireshare e nfsreplay. Isso realmente soa como uma maneira normal de fazer as coisas? Além de wireshark, há uma categoria própria, você não prefere uma ferramenta?

Para abridores, embora eu ache a saída do iostat muito útil, é muito difícil ler com todos esses 0,00 nos números. Collectl relata exatamente os mesmos dados, mas é muito mais fácil de formatar. Você já sabe o que penso do nfsstat e, como o collectl pode reproduzir qualquer dado, não há necessidade de um utilitário 'replay'. Quanto ao 'iotop', o collect também pode mostrar processos classificados por qualquer E / S incluída.

Então, você também tem tudo isso, com carimbos de data e hora. Se você precisar de um intervalo de monitoramento mais preciso, poderá sempre aumentar a amostragem para 0,1 ou 0,5 segundos ou qualquer coisa intermediária, embora você gere mais sobrecarga se monitorar processos tão rapidamente, mas faria com qualquer utilitário de monitoramento de processos.

E o bônus final é qualquer coisa que você coleciona com collectl, que você pode carregar em uma planilha e plotar facilmente OU usar colplot, que faz parte dos collectl-utils.

-marca


1

Você pode tentar nfswatchem http://nfswatch.sourceforge.net

Você pode ver alguns exemplos de resultados em http://prefetch.net/blog/index.php/2009/06/16/monitoring-nfs-operations-with-nfswatch/

nfswatché como top(embora eu não tenha certeza se existe um modo em lote). Após a execução, você pode alterar a exibição da tela pressionando uma tecla (por exemplo, "c" para exibir clientes NFS usando o servidor NFS).

No meu breve teste, no entanto, nfswatchparece não funcionar com o NFSv4.


1
Sugestão interessante. Na verdade, o próprio autor diz que o NFSv4 não é suportado e a ferramenta não é atualizada há cerca de 3 anos. Uma pena, pois seria de grande utilidade!
Tonin

1

Não tenho respostas melhores no momento, no entanto, você pode acompanhar o IO do disco com muita precisão com

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

Ele fornece números muito úteis, principalmente o tamanho médio da fila e o tempo de espera (em ms) para suas E / S. Ele mostra com bastante facilidade se seus discos são um gargalo e se o gargalo é contagem ou taxa de transferência de E / S.

Então com

netstat -plaute | grep nfs

Você verá as conexões do cliente e os bytes transferidos de cada cliente em tempo real. loop para dados contínuos. Seria muito fácil criar um script que forneça dados contínuos ... Estou trabalhando nele :)

Agora, para obter IO por processo, você pode usar o excelente iotop . Você ainda precisa encontrar uma maneira de combinar os processos nfsd com os clientes.

Quanto a quais arquivos estão sendo acessados ​​por qual cliente, eu estou preso. Na verdade, os arquivos atualmente lidos / gravados a partir de um cliente NFS nem aparecem na saída lsof.

Apenas para expandir o netstat, use watch -d para ver como as coisas mudam e classificam por host

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

Esta é a melhor solução que encontrei até agora para descobrir qual host está causando o tráfego no NFS. Então eu posso ir ao cliente para descobrir qual arquivo ele acessa. Obrigado!
peschü 17/10/19

0

Você pode querer dar uma olhada no nfsreplay. Isso pode ajudá-lo a descobrir o que está acontecendo. Além disso, você pode encontrar informações e links aqui úteis

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.