世話をしているサーバーでファイルシステムの速度が遅い問題を診断しようとしています。それはかなり長い間続いていて、私は何を試すことができるかについてのアイデアを使い果たしました。これがその厚さです。
サーバー自体はDellPoweredgeT310です。 4台のSASハードドライブが搭載され、RAID5で構成され、Citrix XenServer 5.6を実行しています。VMは(比較的)古いDebian 5.0.6ですインストール。4コアと4GbのRAMが搭載されています。3つのボリュームがあります。システム用に10Gbボリューム(ext3)、データ用に980Gbボリューム(xfs)(〜94%フル)、データ用に別の200Gbボリューム(xfs) (〜13%フル)。
今ここに奇妙なことがあります。 980Gbボリュームへの読み取り/書き込みアクセスは本当に遅いです。運が良ければ、5Mb/sが出るかもしれません。最初は、実際にはシステム内またはハイパーバイザーレベルでのディスクアクセスであると考えましたが、同じホスト上の他のVMが完全に正常に実行されているため、完全に除外しました(数百Mb/sのディスクr/wアクセス)。そこで、この特定のVMをターゲットにし始めました。 XFSだと思い始めましたが、それを証明するために、980Gbドライブのファイルシステムを変更しようとはしませんでした。そこには何年も何十億ものファイルがあります。そこで、200Gbドライブをプロビジョニングし、同じ読み取り/書き込みテスト(基本的にはdd)を実行して、数百Mb/s r/wのアクセスを取得しました。そのため、VM、ハードウェア、およびファイルシステムの種類は除外されました。
/var/log/kern.logにもこれらがたくさんあります。 (申し訳ありませんが、これはかなり長いです)
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
さて、これが何を意味するのかわかりません。たくさんの空きメモリがあります。
total used free shared buffers cached
Mem: 4247232 3455904 791328 0 5348 736412
-/+ buffers/cache: 2714144 1533088
Swap: 385520 131004 254516
今ではスワップのサイズが比較的小さいことがわかりますが、それは重要ですか?
私はその大きなパーティションでのフラグメンテーションまたはiノードの使用について考え始めましたが、最近のfsckは、0.5%のフラグメント化にすぎないことを示しています。どちらがiノードの使用法を残しますが、大きなiノードテーブルまたはファイルシステムの目次は実際にどの程度の効果がありますか?
これについての人々の意見を聞くのが大好きです。それは私をトイレに追いやる!
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
xfs_db出力;
# xfs_db -r -c frag /dev/xvdb
actual 15687263, ideal 15385050, fragmentation factor 1.93%
この場合でも、XFSファイルシステムである可能性があります。断片化の大きな問題と、ほぼ満杯のファイルシステムに伴う速度低下が発生する可能性があります。どちらの場合も、より多くのスペースを利用できます。
XFSファイルシステムの断片化を確認してください。これは、xfs_db
コマンドを使用して実行できます。たとえば、ファイルシステムが/dev/sdb1
の場合、コマンドは次のようになります。
xfs_db -r -c frag /dev/sdb1
これにより、断片化係数が出力されます。
actual 66524, ideal 55966, fragmentation factor 15.87%
screen
セッションでオンラインデフラグユーティリティxfs_fsr -v
を実行して、これを修正することができます。デフォルトでは、コマンドは2時間実行されるか、ファイルシステムでTENパスが実行されます。複数回実行する必要がある場合があります。実行間の断片化係数を確認します。
Unixファイルシステムはいっぱいになるのが好きではありません。遅いファイルシステムを成長させてみてください。それが不可能な場合は、 xfs_fsr を使用してデフラグしてみてください
サーバーで何が起こっているかを確認するために使用できるツールは2つあります。 iostat および iotop は、問題を特定するのに役立ちます。
IOに関連して異なるプロセスがサーバー上で持つ2つの優先順位を再割り当てする場合は、 ionice を使用できます。これで問題を解決できるかもしれませんが、おそらく一時的な修正です。サーバーのさまざまなストレージまたはリソースの割り当てを調べることをお勧めします。
iostat
Iostatを使用して、サーバーの速度を低下させているストレージ/メモリデバイスを特定できます。それはいくつかの素晴らしい統計iowaitを持っています。どのデバイスが物事を遅くしているのかがわかれば、どこに注意を向けるべきかについてはるかに良い考えがあるかもしれません。
$ iostat Linux 3.2.0-30-generic(aaron-laptop)11/09/2012 _x86_64_(4 CPU) avg-cpu:%ユーザー%Nice%system%iowait%steal%idle 5,83 0,07 3,00 1,81 0,00 89,29 デバイス:tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 20,64 231,97 76,26 1290702 424315
iotop
IOが終了するのを最も長く待っているプロセス、または最もioを集中的に使用しているプロセスを特定するのに最適です。
合計ディスク読み取り:0.00 B/s |合計ディスク書き込み:9.89 K/s TIDPRIOユーザーディスク読み取りディスク書き込みSWAPINIO>コマンド 349 be/3 root 0.00 B/s 1012.49 B/s 0.00%1.79%[jbd2/sda3 -8] 1 be/4ルート0.00B/s 0.00 B/s 0.00%0.00%init 2 be/4ルート0.00B/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 --help ionice-プロセスioのスケジューリングクラスと優先度を設定または取得します。 使用法: ionice [オプション] -p PID [PID ...] ionice [オプション]コマンド オプション: -c、-classスケジューリングクラス名または番号 0:なし、1:リアルタイム、2:ベストエフォート、3:アイドル -n、-classdataスケジューリングクラスデータ 0〜7(リアルタイムおよびベストエフォートクラスの場合) -h、-helpこのヘルプを表示して終了します