Accès lent au système de fichiers


10

J'essaie de diagnostiquer un problème de système de fichiers lent sur un serveur dont je m'occupe. Cela dure depuis un certain temps et je n'ai plus d'idées sur ce que je peux essayer. Voici l'essentiel.

Le serveur lui-même est un Dell Poweredge T310. Il contient 4 disques durs SAS, configurés en RAID5 et exécute Citrix XenServer 5.6. La VM est une installation Debian 5.0.6 (relativement) ancienne. Il est doté de 4 cœurs et de 4 Go de RAM. Il a 3 volumes. Un volume de 10 Go (ext3) pour le système, un volume de 980 Go (xfs) pour les données (~ 94% plein) et un autre volume de 200 Go (xfs) pour les données (~ 13% plein).

Maintenant, voici la chose étrange. L'accès en lecture / écriture au volume 980 Go est vraiment lent. Je pourrais en tirer 5 Mo / s si j'ai de la chance. Au début, je pensais que c'était en fait un accès au disque dans le système, ou à un niveau d'hyperviseur, mais j'ai décidé que tout à fait comme les autres machines virtuelles sur le même hôte fonctionnaient parfaitement bien (quelques centaines de Mb / s d'accès r / w sur le disque). Alors j'ai commencé à cibler cette machine virtuelle particulière. J'ai commencé à penser que c'était XFS, mais pour le prouver, je n'allais pas essayer de changer le système de fichiers sur le lecteur 980Gb, avec des années et des années de milliards de fichiers. J'ai donc provisionné le disque 200 Go, et j'ai fait le même test de lecture / écriture (essentiellement dd), et j'ai obtenu un bon accès de quelques centaines de Mb / sr / w. Cela a donc exclu la machine virtuelle, le matériel et le type de système de fichiers.

Il y en a aussi beaucoup dans /var/log/kern.log; (désolé, c'est assez long)

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

Maintenant, je n'ai aucune idée de ce que cela signifie. Il y a beaucoup de mémoire libre;

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

Bien que maintenant, je vois que le swap est de taille relativement faible, mais est-ce important?

J'ai commencé à penser à la fragmentation, ou à l'utilisation d'inodes sur cette grande partition, mais un fsck récent a montré qu'il n'était que comme 0,5% fragmenté. Ce qui me laisse avec l'utilisation des inodes, mais quel effet aurait vraiment une grande table d'inodes ou une table des matières du système de fichiers?

J'adore entendre l'opinion des gens à ce sujet. Ça me rend potty!

sortie 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

sortie xfs_db;

# xfs_db -r -c frag /dev/xvdb
actual 15687263, ideal 15385050, fragmentation factor 1.93%

S'agit-il d'une Debian 32 bits?
Janne Pikkarainen

Oui, ça l'est. en utilisant un noyau "bigmem".
dannosaure

Quelle est la sortie de df -h?
ewwhite

Ouais, allez-y et vérifiez le facteur de fragmentation du /dev/xvdbsystème de fichiers.
ewwhite

post-édition avec sortie xfs_db. 1,93%. pas si mal que ça?
dannosaure

Réponses:


4

Il pourrait toujours s'agir du système de fichiers XFS dans ce cas. Vous pouvez avoir de gros problèmes de fragmentation ainsi que le ralentissement qui accompagne un système de fichiers presque complet. Vous pourriez bénéficier de plus d'espace dans les deux cas.

Veuillez vérifier la fragmentation du système de fichiers XFS. Vous pouvez le faire avec la xfs_dbcommande. Si le système de fichiers est /dev/sdb1, par exemple, alors votre commande ressemblerait à:

xfs_db -r -c frag /dev/sdb1

Cela produira un facteur de fragmentation:

actual 66524, ideal 55966, fragmentation factor 15.87%

Vous pouvez exécuter l'utilitaire de défragmentation en ligne,, xfs_fsr -vdans une screensession pour essayer de corriger cela. Par défaut, la commande s'exécute pendant 2 heures ou TEN passe sur le système de fichiers. Vous devrez peut-être l'exécuter plusieurs fois. Vérifiez le facteur de fragmentation entre les exécutions.


2

Les systèmes de fichiers Unix n'aiment pas être pleins. Essayez de développer le système de fichiers lent. Si ce n'est pas possible, essayez de le défragmenter en utilisant xfs_fsr


0

Il existe deux outils que vous pouvez utiliser pour voir ce qui se passe sur votre serveur. iostat et iotop , vous aideront à localiser le problème.

Si vous souhaitez réaffecter deux priorités que différents processus ont sur votre serveur par rapport aux E / S, vous pouvez utiliser ionice . Cela peut être suffisant pour résoudre vos problèmes, mais c'est en fait une solution temporaire. Vous souhaiterez peut-être examiner différents types de stockage ou d'allocation de ressources pour votre serveur.

iostat
Iostat peut être utilisé pour identifier les périphériques de stockage / mémoire qui ralentissent votre serveur. Il a de belles statistiques. Une fois que vous savez quel appareil ralentit les choses, vous pourriez avoir une bien meilleure idée de l'endroit où concentrer votre attention.

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

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

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

iotop
est idéal pour identifier les processus qui attendent le plus longtemps que les E / S se terminent, ou qui sont les plus intensifs.

Total DISK READ: 0,00 B / s | ÉCRITURE DISQUE totale: 9,89 K / s
  TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND          
  349 be / 3 racine 0,00 B / s 1012,49 B / s 0,00% 1,79% [jbd2 / sda3-8]
    1 be / 4 racine 0,00 B / s 0,00 B / s 0,00% 0,00% init
    2 be / 4 racine 0,00 B / s 0,00 B / s 0,00% 0,00% [kthreadd]
    3 be / 4 racine 0,00 B / s 0,00 B / s 0,00% 0,00% [ksoftirqd / 0]

ionice

 ionice --help

ionice - définit ou obtient la classe d'ordonnancement et la priorité du processus.

Usage:
  ionice [OPTION] -p PID [PID ...]
  ionice [OPTION] COMMANDE

Options:
  -c, --classe nom ou numéro de classe de planification
                           0: aucun, 1: en temps réel, 2: meilleur effort, 3: inactif
  -n, --classdata ordonnancement des données de classe
                           0-7 pour les classes en temps réel et au meilleur effort
  -p, --pid = affichage PID ou modification du processus déjà en cours
  -t, --ignore ignorer les échecs
  -V, --version afficher les informations de version et quitter
  -h, --help afficher cette aide et quitter

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.