Acesso lento ao sistema de arquivos

10

Estou tentando diagnosticar um problema lento no sistema de arquivos em um servidor que cuido. Está em andamento há algum tempo, e fiquei sem ideias sobre o que posso tentar. Aqui está o grosso disso.

O servidor em si é um Dell Poweredge T310. Possui 4 discos rígidos SAS, configurados no RAID5 e está executando o Citrix XenServer 5.6. A VM é uma instalação (relativamente) antiga do Debian 5.0.6. É dado 4 núcleos e 4Gb de RAM. Possui 3 volumes. Um volume de 10 Gb (ext3) para o sistema, um volume de 980 Gb (xfs) para dados (~ 94% cheio) e outro volume de 200 Gb (xfs) para dados (~ 13% cheio).

Agora aqui está a coisa estranha. O acesso de leitura / gravação ao volume de 980Gb é realmente lento. Talvez eu consiga 5Mb / s se tiver sorte. No começo, imaginei que era realmente acesso ao disco no sistema, ou no nível do hipervisor, mas excluí-o inteiramente, pois outras VMs no mesmo host estavam funcionando perfeitamente (algumas boas centenas de Mb / s de acesso r / w ao disco). Então comecei a direcionar essa VM em particular. Comecei a pensar que era XFS, mas para provar isso, eu não tentaria alterar o sistema de arquivos na unidade de 980Gb, com anos e anos de bilhões de arquivos lá. Por isso, provisionei a unidade de 200 Gb e fiz o mesmo teste de leitura / gravação (basicamente dd) e obtive um bom par de centenas de Mb / sr / w de acesso a ela. Portanto, isso descartou a VM, o hardware e o tipo de sistema de arquivos.

Também há muitos deles em /var/log/kern.log; (desculpe, isso é bastante longo)

Sep  4 10:16:59 uriel kernel: [32571790.564689] httpd: page allocation failure. order:5, mode:0x4020
Sep  4 10:16:59 uriel kernel: [32571790.564693] Pid: 7318, comm: httpd Not tainted 2.6.32-4-686-bigmem #1
Sep  4 10:16:59 uriel kernel: [32571790.564696] Call Trace:
Sep  4 10:16:59 uriel kernel: [32571790.564705]  [<c1092a4d>] ? __alloc_pages_nodemask+0x476/0x4e0
Sep  4 10:16:59 uriel kernel: [32571790.564711]  [<c1092ac3>] ? __get_free_pages+0xc/0x17
Sep  4 10:16:59 uriel kernel: [32571790.564716]  [<c10b632e>] ? __kmalloc+0x30/0x128
Sep  4 10:16:59 uriel kernel: [32571790.564722]  [<c11dd774>] ? pskb_expand_head+0x4f/0x157
Sep  4 10:16:59 uriel kernel: [32571790.564727]  [<c11ddbbf>] ? __pskb_pull_tail+0x41/0x1fb
Sep  4 10:16:59 uriel kernel: [32571790.564732]  [<c11e4882>] ? dev_queue_xmit+0xe4/0x38e
Sep  4 10:16:59 uriel kernel: [32571790.564738]  [<c1205902>] ? ip_finish_output+0x0/0x5c
Sep  4 10:16:59 uriel kernel: [32571790.564742]  [<c12058c7>] ? ip_finish_output2+0x187/0x1c2
Sep  4 10:16:59 uriel kernel: [32571790.564747]  [<c1204dc8>] ? ip_local_out+0x15/0x17
Sep  4 10:16:59 uriel kernel: [32571790.564751]  [<c12055a9>] ? ip_queue_xmit+0x31e/0x379
Sep  4 10:16:59 uriel kernel: [32571790.564758]  [<c1279a90>] ? _spin_lock_bh+0x8/0x1e
Sep  4 10:16:59 uriel kernel: [32571790.564767]  [<eda15a8d>] ? __nf_ct_refresh_acct+0x66/0xa4 [nf_conntrack]
Sep  4 10:16:59 uriel kernel: [32571790.564773]  [<c103bf42>] ? _local_bh_enable_ip+0x16/0x6e
Sep  4 10:16:59 uriel kernel: [32571790.564779]  [<c1214593>] ? tcp_transmit_skb+0x595/0x5cc
Sep  4 10:16:59 uriel kernel: [32571790.564785]  [<c1005c4f>] ? xen_restore_fl_direct_end+0x0/0x1
Sep  4 10:16:59 uriel kernel: [32571790.564791]  [<c12165ea>] ? tcp_write_xmit+0x7a3/0x874
Sep  4 10:16:59 uriel kernel: [32571790.564796]  [<c121203a>] ? tcp_ack+0x1611/0x1802
Sep  4 10:16:59 uriel kernel: [32571790.564801]  [<c10055ec>] ? xen_force_evtchn_callback+0xc/0x10
Sep  4 10:16:59 uriel kernel: [32571790.564806]  [<c121392f>] ? tcp_established_options+0x1d/0x8b
Sep  4 10:16:59 uriel kernel: [32571790.564811]  [<c1213be4>] ? tcp_current_mss+0x38/0x53
Sep  4 10:16:59 uriel kernel: [32571790.564816]  [<c1216701>] ? __tcp_push_pending_frames+0x1e/0x50
Sep  4 10:16:59 uriel kernel: [32571790.564821]  [<c1212246>] ? tcp_data_snd_check+0x1b/0xd2
Sep  4 10:16:59 uriel kernel: [32571790.564825]  [<c1212de3>] ? tcp_rcv_established+0x5d0/0x626
Sep  4 10:16:59 uriel kernel: [32571790.564831]  [<c121902c>] ? tcp_v4_do_rcv+0x15f/0x2cf
Sep  4 10:16:59 uriel kernel: [32571790.564835]  [<c1219561>] ? tcp_v4_rcv+0x3c5/0x5c0
Sep  4 10:16:59 uriel kernel: [32571790.564841]  [<c120197e>] ? ip_local_deliver_finish+0x10c/0x18c
Sep  4 10:16:59 uriel kernel: [32571790.564846]  [<c12015a4>] ? ip_rcv_finish+0x2c4/0x2d8
Sep  4 10:16:59 uriel kernel: [32571790.564852]  [<c11e3b71>] ? netif_receive_skb+0x3bb/0x3d6
Sep  4 10:16:59 uriel kernel: [32571790.564864]  [<ed823efc>] ? xennet_poll+0x9b8/0xafc [xen_netfront]
Sep  4 10:16:59 uriel kernel: [32571790.564869]  [<c11e40ee>] ? net_rx_action+0x96/0x194
Sep  4 10:16:59 uriel kernel: [32571790.564874]  [<c103bd4c>] ? __do_softirq+0xaa/0x151
Sep  4 10:16:59 uriel kernel: [32571790.564878]  [<c103be24>] ? do_softirq+0x31/0x3c
Sep  4 10:16:59 uriel kernel: [32571790.564883]  [<c103befa>] ? irq_exit+0x26/0x58
Sep  4 10:16:59 uriel kernel: [32571790.564890]  [<c118ff9f>] ? xen_evtchn_do_upcall+0x12c/0x13e
Sep  4 10:16:59 uriel kernel: [32571790.564896]  [<c1008c3f>] ? xen_do_upcall+0x7/0xc
Sep  4 10:16:59 uriel kernel: [32571790.564899] Mem-Info:
Sep  4 10:16:59 uriel kernel: [32571790.564902] DMA per-cpu:
Sep  4 10:16:59 uriel kernel: [32571790.564905] CPU    0: hi:    0, btch:   1 usd:   0
Sep  4 10:16:59 uriel kernel: [32571790.564908] CPU    1: hi:    0, btch:   1 usd:   0
Sep  4 10:16:59 uriel kernel: [32571790.564911] CPU    2: hi:    0, btch:   1 usd:   0
Sep  4 10:16:59 uriel kernel: [32571790.564914] CPU    3: hi:    0, btch:   1 usd:   0
Sep  4 10:16:59 uriel kernel: [32571790.564916] Normal per-cpu:
Sep  4 10:16:59 uriel kernel: [32571790.564919] CPU    0: hi:  186, btch:  31 usd: 175
Sep  4 10:16:59 uriel kernel: [32571790.564922] CPU    1: hi:  186, btch:  31 usd: 165
Sep  4 10:16:59 uriel kernel: [32571790.564925] CPU    2: hi:  186, btch:  31 usd:  30
Sep  4 10:16:59 uriel kernel: [32571790.564928] CPU    3: hi:  186, btch:  31 usd: 140
Sep  4 10:16:59 uriel kernel: [32571790.564931] HighMem per-cpu:
Sep  4 10:16:59 uriel kernel: [32571790.564933] CPU    0: hi:  186, btch:  31 usd: 159
Sep  4 10:16:59 uriel kernel: [32571790.564936] CPU    1: hi:  186, btch:  31 usd:  22
Sep  4 10:16:59 uriel kernel: [32571790.564939] CPU    2: hi:  186, btch:  31 usd:  24
Sep  4 10:16:59 uriel kernel: [32571790.564942] CPU    3: hi:  186, btch:  31 usd:  13
Sep  4 10:16:59 uriel kernel: [32571790.564947] active_anon:485974 inactive_anon:121138 isolated_anon:0
Sep  4 10:16:59 uriel kernel: [32571790.564948]  active_file:75215 inactive_file:79510 isolated_file:0
Sep  4 10:16:59 uriel kernel: [32571790.564949]  unevictable:0 dirty:516 writeback:15 unstable:0
Sep  4 10:16:59 uriel kernel: [32571790.564950]  free:230770 slab_reclaimable:36661 slab_unreclaimable:21249
Sep  4 10:16:59 uriel kernel: [32571790.564952]  mapped:20016 shmem:29450 pagetables:5600 bounce:0
Sep  4 10:16:59 uriel kernel: [32571790.564958] DMA free:2884kB min:72kB low:88kB high:108kB active_anon:0kB inactive_anon:0kB active_file:5692kB inactive_file:724kB unevictable:0kB isolated(anon):0kB isolated(file):0kB present:15872kB mlocked:0kB dirty:8kB writeback:0kB mapped:0kB shmem:0kB slab_reclaimable:5112kB slab_unreclaimable:156kB kernel_stack:56kB pagetables:0kB unstable:0kB bounce:0kB writeback_tmp:0kB pages_scanned:0 all_unreclaimable? no
Sep  4 10:16:59 uriel kernel: [32571790.564964] lowmem_reserve[]: 0 698 4143 4143
Sep  4 10:16:59 uriel kernel: [32571790.564977] Normal free:143468kB min:3344kB low:4180kB high:5016kB active_anon:56kB inactive_anon:2068kB active_file:131812kB inactive_file:131728kB unevictable:0kB isolated(anon):0kB isolated(file):0kB present:715256kB mlocked:0kB dirty:156kB writeback:0kB mapped:308kB shmem:4kB slab_reclaimable:141532kB slab_unreclaimable:84840kB kernel_stack:1928kB pagetables:22400kB unstable:0kB bounce:0kB writeback_tmp:0kB pages_scanned:0 all_unreclaimable? no
Sep  4 10:16:59 uriel kernel: [32571790.564983] lowmem_reserve[]: 0 0 27559 27559
Sep  4 10:16:59 uriel kernel: [32571790.564995] HighMem free:776728kB min:512kB low:4636kB high:8760kB active_anon:1943840kB inactive_anon:482484kB active_file:163356kB inactive_file:185588kB unevictable:0kB isolated(anon):0kB isolated(file):0kB present:3527556kB mlocked:0kB dirty:1900kB writeback:60kB mapped:79756kB shmem:117796kB slab_reclaimable:0kB slab_unreclaimable:0kB kernel_stack:0kB pagetables:0kB unstable:0kB bounce:0kB writeback_tmp:0kB pages_scanned:0 all_unreclaimable? no
Sep  4 10:16:59 uriel kernel: [32571790.565001] lowmem_reserve[]: 0 0 0 0
Sep  4 10:16:59 uriel kernel: [32571790.565011] DMA: 385*4kB 16*8kB 3*16kB 9*32kB 6*64kB 2*128kB 1*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 2900kB
Sep  4 10:16:59 uriel kernel: [32571790.565032] Normal: 21505*4kB 6508*8kB 273*16kB 24*32kB 3*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 143412kB
Sep  4 10:16:59 uriel kernel: [32571790.565054] HighMem: 949*4kB 8859*8kB 7063*16kB 6186*32kB 4631*64kB 727*128kB 6*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 776604kB
Sep  4 10:16:59 uriel kernel: [32571790.565076] 198980 total pagecache pages
Sep  4 10:16:59 uriel kernel: [32571790.565079] 14850 pages in swap cache
Sep  4 10:16:59 uriel kernel: [32571790.565082] Swap cache stats: add 2556273, delete 2541423, find 82961339/83153719
Sep  4 10:16:59 uriel kernel: [32571790.565085] Free swap  = 250592kB
Sep  4 10:16:59 uriel kernel: [32571790.565087] Total swap = 385520kB
Sep  4 10:16:59 uriel kernel: [32571790.575454] 1073152 pages RAM
Sep  4 10:16:59 uriel kernel: [32571790.575458] 888834 pages HighMem
Sep  4 10:16:59 uriel kernel: [32571790.575461] 11344 pages reserved
Sep  4 10:16:59 uriel kernel: [32571790.575463] 1090481 pages shared
Sep  4 10:16:59 uriel kernel: [32571790.575465] 737188 pages non-shared

Agora, não tenho ideia do que isso significa. Há muita memória livre;

             total       used       free     shared    buffers     cached
Mem:       4247232    3455904     791328          0       5348     736412
-/+ buffers/cache:    2714144    1533088
Swap:       385520     131004     254516

Embora agora eu vejo que a troca é relativamente baixa em tamanho, mas isso importaria?

Eu comecei a pensar em fragmentação ou uso de inode nessa partição grande, mas um fsck recente mostrado é apenas 0,5% fragmentado. O que me deixa com uso de inode, mas qual o efeito de uma grande tabela de inodes ou sumário do sistema de arquivos?

Adoro ouvir as opiniões das pessoas sobre isso. Está me deixando suja!

saída df -h;

Filesystem            Size  Used Avail Use% Mounted on
/dev/xvda1            9.5G  6.6G  2.4G  74% /
tmpfs                 2.1G     0  2.1G   0% /lib/init/rw
udev                   10M  520K  9.5M   6% /dev
tmpfs                 2.1G     0  2.1G   0% /dev/shm
/dev/xvdb             980G  921G   59G  94% /data

saída xfs_db;

# xfs_db -r -c frag /dev/xvdb
actual 15687263, ideal 15385050, fragmentation factor 1.93%
dannosaur
fonte
Este é um Debian de 32 bits?
Janne Pikkarainen
Sim, ele é. usando um kernel "bigmem".
Dannosaur # 4/12
Qual é a saída de df -h?
precisa saber é o seguinte
Sim, vá em frente e verifique o fator de fragmentação do /dev/xvdbsistema de arquivos.
ewwhite
pós-edição com saída xfs_db. 1,93%. não é tão ruim, certamente?
Dannosaur 4/09/12

Respostas:

4

Ainda pode ser o sistema de arquivos XFS nesse caso. Você pode ter problemas de fragmentação pesados, bem como a desaceleração que vem com um sistema de arquivos quase cheio. Você pode se beneficiar de mais espaço em ambos os casos.

Por favor, verifique a fragmentação do sistema de arquivos XFS. Você pode fazer isso com o xfs_dbcomando Se o sistema de arquivos for /dev/sdb1, por exemplo, seu comando será semelhante a:

xfs_db -r -c frag /dev/sdb1

Isso produzirá um fator de fragmentação:

actual 66524, ideal 55966, fragmentation factor 15.87%

Você pode executar o utilitário de desfragmentação online,, xfs_fsr -vem uma screensessão para tentar corrigir isso. Por padrão, o comando é executado por 2 horas ou a RTE passa no sistema de arquivos. Pode ser necessário executá-lo várias vezes. Verifique o fator de fragmentação entre as execuções.

ewwhite
fonte
2

Os sistemas de arquivos Unix não gostam de estar cheios. Tente aumentar o sistema de arquivos lento. Se isso não for possível, tente desfragmentá-lo usando xfs_fsr

ptman
fonte
0

Existem duas ferramentas que você pode usar para ver o que está acontecendo no seu servidor. iostat e iotop , ajudarão você a localizar o problema.

Se você deseja reatribuir prioridades que diferentes processos têm no seu servidor em relação ao IO, você pode usar o ionice . Isso pode ser suficiente para corrigir seus problemas, mas é provavelmente uma correção temporária. Convém procurar em diferentes alocações de armazenamento ou recursos para o seu servidor.

iostat O
Iostat pode ser usado para identificar quais dispositivos de armazenamento / memória estão diminuindo a velocidade do servidor. Tem algumas estatísticas legais iowait. Depois de saber qual dispositivo está atrasando as coisas, você pode ter uma idéia muito melhor sobre onde concentrar sua atenção.

$ iostat
Linux 3.2.0-30-genérico (aaron-laptop) 11/09/2012 _x86_64_ (4 CPU)

avg-cpu:% user% nice% system% iowait% steal% ocioso
           5,83 0,07 3,00 1,81 0,00 89,29

Dispositivo: tps kB_read / s kB_wrtn / s kB_read kB_wrtn
sda 20,64 231,97 76,26 1290702 424315

iotop
É ótimo para identificar qual processo está aguardando mais tempo para concluir o IO ou o que é mais intenso.

DISCO total lido: 0,00 B / s | Gravação total do disco: 9,89 K / s
  TID PRIO USER DISK LER DISCO ESCREVER SWAPIN IO> COMMAND          
  349 be / 3 raiz 0,00 B / s 1012,49 B / s 0,00% 1,79% [jbd2 / sda3-8]
    1 be / 4 raiz 0,00 B / s 0,00 B / s 0,00% 0,00% init
    2 be / 4 raiz 0,00 B / s 0,00 B / s 0,00% 0,00% [kthreadd]
    3 be / 4 raiz 0,00 B / s 0,00 B / s 0,00% 0,00% [ksoftirqd / 0]

ionice

 ionice --help

ionice - define ou obtém a classe de agendamento do processo e a prioridade.

Uso:
  ionice [OPÇÃO] -p PID [PID ...]
  ionice [OPÇÃO] COMANDO

Opções:
  -c, - nome ou número da classe de agendamento da classe
                           0: nenhum, 1: tempo real, 2: melhor esforço, 3: inativo
  -n, --classdata dados da classe de agendamento
                           0-7 para aulas em tempo real e de melhor esforço
  -p, --pid = visualiza o PID ou modifica o processo já em execução
  -t, --ignore ignora falhas
  -V, --version informações da versão de saída e saída
  -h, --help exibe esta ajuda e sai

nelaaro
fonte