Langsamer Zugriff auf das Dateisystem

10

Ich versuche, ein langsames Dateisystemproblem auf einem Server zu diagnostizieren, den ich betreue. Es läuft schon seit einiger Zeit und ich habe keine Ideen mehr, was ich versuchen kann. Hier ist das Dicke davon.

Der Server selbst ist ein Dell Poweredge T310. Es enthält 4 SAS-Festplatten, die unter RAID5 konfiguriert sind, und es wird Citrix XenServer 5.6 ausgeführt. Die VM ist eine (relativ) alte Debian 5.0.6-Installation. Es gibt 4 Kerne und 4 GB RAM. Es hat 3 Bände. Ein 10-Gbit-Volume (ext3) für das System, ein 980-Gbit-Volume (xfs) für Daten (~ 94% voll) und ein weiteres 200-Gbit-Volume (xfs) für Daten (~ 13% voll).

Hier ist das Seltsame. Der Lese- / Schreibzugriff auf das 980-GB-Volume ist sehr langsam. Wenn ich Glück habe, bekomme ich vielleicht 5 MBit / s. Zuerst dachte ich, es handele sich tatsächlich um Festplattenzugriff im System oder auf Hypervisor-Ebene, schloss dies jedoch vollständig aus, da andere VMs auf demselben Host einwandfrei funktionieren (ein paar hundert MBit / s Festplatten-R / W-Zugriff). Also fing ich an, auf diese bestimmte VM abzuzielen. Ich fing an zu denken, es sei XFS, aber um es zu beweisen, wollte ich nicht versuchen, das Dateisystem auf dem 980-GB-Laufwerk zu ändern, mit jahrelangen Milliarden von Dateien. Also habe ich das 200-Gbit-Laufwerk bereitgestellt und den gleichen Lese- / Schreibtest (im Grunde dd) durchgeführt und gut ein paar hundert Mb / sr / w Zugriff darauf erhalten. Das schloss also die VM, die Hardware und den Dateisystemtyp aus.

Es gibt auch viele davon in /var/log/kern.log; (Entschuldigung, das ist ziemlich lang)

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

Ich habe keine Ahnung, was das bedeutet. Es gibt viel freien Speicher;

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

Jetzt sehe ich zwar, dass der Tausch relativ klein ist, aber wäre das wichtig?

Ich habe angefangen, über Fragmentierung oder Inode-Nutzung auf dieser großen Partition nachzudenken, aber ein kürzlich veröffentlichter Fsck hat gezeigt, dass nur 0,5% fragmentiert sind. Was mich bei der Inode-Nutzung lässt, aber wie stark würde eine große Inode-Tabelle oder ein Dateisystem-Inhaltsverzeichnis wirklich wirken?

Ich liebe es, die Meinungen der Leute dazu zu hören. Es treibt mich zum Töpfchen!

df -h Ausgabe;

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

xfs_db Ausgabe;

# xfs_db -r -c frag /dev/xvdb
actual 15687263, ideal 15385050, fragmentation factor 1.93%
Dannosaurier
quelle
Ist das ein 32-Bit-Debian?
Janne Pikkarainen
ja ist es. Verwenden eines "Bigmem" -Kerns.
Dannosaurier
Was ist die Ausgabe von df -h?
ewwhite
Ja, überprüfen Sie den Fragmentierungsfaktor des /dev/xvdbDateisystems.
ewwhite
Nachbearbeitung mit xfs_db-Ausgabe. 1,93%. nicht so schlimm sicher?
Dannosaurier

Antworten:

4

In diesem Fall könnte es sich immer noch um das XFS-Dateisystem handeln. Möglicherweise treten schwerwiegende Fragmentierungsprobleme sowie die Verlangsamung auf, die mit einem fast vollständigen Dateisystem einhergeht. In beiden Fällen können Sie von mehr Platz profitieren.

Bitte überprüfen Sie die Fragmentierung des XFS-Dateisystems. Sie können dies mit dem xfs_dbBefehl tun . Wenn das Dateisystem beispielsweise ist /dev/sdb1, würde Ihr Befehl folgendermaßen aussehen:

xfs_db -r -c frag /dev/sdb1

Dadurch wird ein Fragmentierungsfaktor ausgegeben:

actual 66524, ideal 55966, fragmentation factor 15.87%

Sie können das Online-Defragmentierungsdienstprogramm xfs_fsr -vin einer screenSitzung ausführen , um dies zu beheben. Standardmäßig wird der Befehl 2 Stunden lang ausgeführt oder TEN leitet das Dateisystem weiter. Möglicherweise müssen Sie es mehrmals ausführen. Überprüfen Sie den Fragmentierungsfaktor zwischen den Läufen.

ewwhite
quelle
2

Unix-Dateisysteme mögen es nicht, voll zu sein. Versuchen Sie, das langsame Dateisystem zu vergrößern. Wenn dies nicht möglich ist, defragmentieren Sie es mit xfs_fsr

ptman
quelle
0

Es gibt zwei Tools, mit denen Sie sehen können, was auf Ihrem Server passiert. iostat und iotop helfen Ihnen, das Problem zu lokalisieren.

Wenn Sie zwei Prioritäten neu zuweisen möchten, die unterschiedliche Prozesse in Bezug auf E / A auf Ihrem Server haben, können Sie ionice verwenden . Dies könnte ausreichen, um Ihre Probleme zu beheben, ist jedoch wahrscheinlich eine vorübergehende Lösung. Möglicherweise möchten Sie verschiedene Speicher- oder Ressourcenzuweisungen für Ihren Server untersuchen.

iostat Mit
Iostat können Sie feststellen, welche Speicher- / Speichergeräte Ihren Server verlangsamen. Es hat einige schöne Statistiken iowait. Sobald Sie wissen, welches Gerät die Dinge verlangsamt, haben Sie möglicherweise eine viel bessere Vorstellung davon, wo Sie Ihre Aufmerksamkeit konzentrieren können.

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

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

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

iotop eignet sich
hervorragend, um festzustellen, welche Prozesse am längsten auf den Abschluss von E / A warten oder am intensivsten sind.

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

ionice

 ionice --help

ionice - Legt die Planungsklasse und -priorität fest oder ruft sie ab.

Verwendung:
  ionice [OPTION] -p PID [PID ...]
  ionice [OPTION] BEFEHL

Optionen:
  -c, --class Scheduling Class Name oder Nummer
                           0: keine, 1: Echtzeit, 2: Bestleistung, 3: Leerlauf
  -n, --classdata Planungsklassendaten
                           0-7 für Echtzeit- und Best-Effort-Klassen
  -p, --pid = PID anzeigen oder bereits ausgeführten Prozess ändern
  -t, --ignore ignoriert Fehler
  -V, --version gibt Versionsinformationen aus und beendet
  -h, --help zeigt diese Hilfe an und beendet sie

Nelaaro
quelle