Determinando a causa da alta utilização do NFS / IO sem o iotop

2

Eu tenho um servidor que está fazendo uma exportação do NFSv4 para os diretórios iniciais do usuário. Existem aproximadamente 25 usuários (principalmente desenvolvedores / analistas) e cerca de 40 servidores que montam a exportação do diretório base. O desempenho é miserável, com os usuários frequentemente vendo atrasos de vários segundos para comandos simples (como ls, ou escrevendo um pequeno arquivo de texto). Às vezes, a montagem do diretório inicial é interrompida por minutos , com os usuários recebendo erros de "permissão negada".

O hardware é um Dell R510 com CPUs E5620 duplas e 8 GB de RAM. Há oito unidades de 15k de 2,5 ”e 600 GB (Seagate ST3600057SS) configuradas no hardware RAID-6 com um único hot spare. O controlador RAID é um Dell PERC H700 com cache de 512 MB (o Linux vê isso como um LSI MegaSAS 9260). OS é o CentOS 5.6, a partição de diretório inicial é ext3, com opções “rw, data = journal, usrquota”.

Eu tenho o HW RAID configurado para apresentar dois discos virtuais para o sistema operacional: / dev / sda para o sistema operacional (inicialização, raiz e partições de troca) e / dev / sdb para os diretórios base.

O que eu acho curioso e desconfiado é que o dispositivo sda geralmente tem uma utilização muito alta, mesmo que contenha apenas o sistema operacional. Eu esperaria que este drive virtual ficasse ocioso quase o tempo todo. O sistema não está trocando, de acordo com "free" e "vmstat". Por que haveria grande carga neste dispositivo?

Aqui está um instantâneo de 30 segundos do iostat:

Time: 09:37:28 AM
Device:         rrqm/s   wrqm/s   r/s   w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await svctm  %util
sda               0.00    44.09  0.03 107.76     0.13   607.40    11.27     0.89    8.27   7.27  78.35
sda1              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sda2              0.00    44.09  0.03 107.76     0.13   607.40    11.27     0.89    8.27   7.27  78.35
sdb               0.00  2616.53  0.67 157.88     2.80 11098.83   140.04     8.57   54.08   4.21  66.68
sdb1              0.00  2616.53  0.67 157.88     2.80 11098.83   140.04     8.57   54.08   4.21  66.68
dm-0              0.00     0.00  0.03 151.82     0.13   607.26     8.00     1.25    8.23   5.16  78.35
dm-1              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
dm-2              0.00     0.00  0.67 2774.84     2.80 11099.37     8.00   474.30  170.89   0.24  66.84
dm-3              0.00     0.00  0.67 2774.84     2.80 11099.37     8.00   474.30  170.89   0.24  66.84

Parece que o iotop é a ferramenta ideal para descobrir esses tipos de problemas. Mas eu estou no CentOS 5.6, que não tem um kernel novo o suficiente para suportar esse programa.

Eu examinei Como determinar qual processo está causando E / S de disco pesado ? , e além do iotop, uma das sugestões dizia para fazer um "echo 1 > / proc / sys / vm / block_dump". Eu fiz isso (depois de direcionar mensagens do kernel para tempfs). Em cerca de 13 minutos, eu tinha cerca de 700k de leituras ou gravações, aproximadamente metade do kjournald e a outra metade do nfsd:

# egrep " kernel: .*(READ|WRITE)" messages | wc -l
768439
# egrep " kernel: kjournald.*(READ|WRITE)" messages | wc -l
403615
# egrep " kernel: nfsd.*(READ|WRITE)" messages | wc -l
314028

Por que vale a pena, durante a última hora, a utilização tem sido constantemente superior a 90% para a unidade de diretório inicial. Meu iostat de 30 segundos continua exibindo a saída assim:

Time: 09:36:30 PM
Device:         rrqm/s   wrqm/s   r/s   w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     6.46  0.20 11.33     0.80    71.71    12.58     0.24   20.53  14.37  16.56
sda1              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sda2              0.00     6.46  0.20 11.33     0.80    71.71    12.58     0.24   20.53  14.37  16.56
sdb             137.29     7.00 549.92  3.80 22817.19    43.19    82.57     3.02    5.45   1.74  96.32
sdb1            137.29     7.00 549.92  3.80 22817.19    43.19    82.57     3.02    5.45   1.74  96.32
dm-0              0.00     0.00  0.20 17.76     0.80    71.04     8.00     0.38   21.21   9.22  16.57
dm-1              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
dm-2              0.00     0.00 687.47 10.80 22817.19    43.19    65.48     4.62    6.61   1.43  99.81
dm-3              0.00     0.00 687.47 10.80 22817.19    43.19    65.48     4.62    6.61   1.43  99.82
    
por Matt 11.12.2012 / 04:44

2 respostas

3

A abordagem mais fácil é atualizar seus pacotes do sistema operacional.

CentOS 5.7 pode definitivamente usar o iotop . A Red Hat fez o backport por processo IO accounting para os kernels 2.6.18-144, e eu comecei a ver o iotop trabalhando em algum lugar em 2011 via pacotes RPMForge. A Red Hat fez iotop parte do SO padrão em 2012. Em um sistema 5.7. .

[root@Tantalalicious ~]# cat /etc/issue
CentOS release 5.7 (Final)
Kernel \r on an \m

[root@Tantalalicious ~]# uname -a
Linux Tantalalicious 2.6.18-274.7.1.el5 #1 SMP Thu Oct 20 16:21:01 EDT 2011 x86_64 x86_64 x86_64 GNU/Linux

[root@Tantalalicious ~]# iotop
Total DISK READ: 25.54 M/s | Total DISK WRITE: 87.03 K/s
  TID  PRIO USER<     DISK READ  DISK WRITE  SWAPIN      IO    COMMAND                                              
31441 be/4 465         0.00 B/s    0.00 B/s  0.00 %  0.00 % -bash
31540 be/4 465         0.00 B/s    0.00 B/s  0.00 %  0.00 % dbc
22587 be/4 admin       0.00 B/s    0.00 B/s  0.00 %  0.00 % sh
22588 be/4 admin       0.00 B/s    0.00 B/s  0.00 %  0.00 % sh

Não pense que isso seja uma resposta ... Mas, neste momento, não há motivo para estar executando o sistema operacional mais antigo. O EL 5.8 se estabilizou, corrigiu uma tonelada de bugs e lhe deu acesso à ferramenta de criação de perfil que você precisa (iotop). Suponho que você já tenha modificado seus elevadores de E / S do Linux e sintonizaram o controlador RAID de hardware por agora.

    
por 11.12.2012 / 12:55
1

Você pode usar lsof para listar arquivos abertos, isso pode ajudar a determinar o que está sendo usado.

Observe o ajuste geral de desempenho, por exemplo, certifique-se de que o cache write-back esteja habilitado no controlador RAID, monte os compartilhamentos ext3 e nfs com noatime, ajuste rsize / wsize, não monte nfs com noac a menos que seja necessário. / p>     

por 11.12.2012 / 06:33