我正在尝试诊断我负责的服务器上文件系统缓慢的问题。这个问题已经持续了很长时间,我已经不知道该尝试什么了。下面是问题的核心。
服务器本身是 Dell Poweredge T310。它有 4 个 SAS 硬盘,配置为 RAID5,并运行 Citrix XenServer 5.6。虚拟机是一个(相对)旧的 Debian 5.0.6 安装。它有 4 个核心和 4GB 的 RAM。它有 3 个卷。一个 10GB 卷(ext3)用于系统,980GB 卷(xfs)用于数据(约 94% 已满),另一个 200GB 卷(xfs)用于数据(约 13% 已满)。
现在有一件奇怪的事情。对 980Gb 卷的读/写访问真的很慢。如果幸运的话,我可能会得到 5Mb/s 的速度。起初我认为这实际上是系统中的磁盘访问,或者是在虚拟机管理程序级别,但完全排除了这种可能性,因为同一主机上的其他虚拟机运行良好(几百 Mb/s 的磁盘读/写访问)。所以我开始针对这个特定的虚拟机。我开始认为它是 XFS,但为了证明这一点,我不会尝试更改 980Gb 驱动器上的文件系统,因为那里有多年来数十亿个文件。所以我配置了 200Gb 驱动器,并进行了相同的读/写测试(基本上是 dd),并获得了几百 Mb/s 的读写访问权限。所以这排除了虚拟机、硬件和文件系统类型。
/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
虽然现在我看到交换的规模相对较小,但这有关系吗?
我开始考虑碎片问题,或者说这个大分区上的 inode 使用情况,但最近对它的 fsck 显示碎片只有 0.5%。这让我想到了 inode 使用情况,但大型 inode 表或文件系统目录到底有多大影响?
我很想听听大家对此的看法。这让我很抓狂!
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%
答案1
在这种情况下,它仍然可能是 XFS 文件系统。您可能会遇到严重的碎片问题以及文件系统几乎已满导致的速度变慢。无论哪种情况,您都可以从更多空间中受益。
请检查 XFS 文件系统的碎片。您可以使用命令执行此操作。例如,xfs_db
如果文件系统是,那么您的命令将如下所示:/dev/sdb1
xfs_db -r -c frag /dev/sdb1
这将输出碎片因子:
actual 66524, ideal 55966, fragmentation factor 15.87%
xfs_fsr -v
您可以在会话中运行在线碎片整理实用程序screen
来尝试纠正此问题。默认情况下,该命令在文件系统上运行 2 小时或 TEN 次。您可能需要多次运行它。在运行之间检查碎片因素。
答案2
Unix 文件系统不喜欢满载。尝试增加慢速文件系统。如果这不可能,请尝试使用以下方法对其进行碎片整理:xfs_fsr
答案3
您可以使用两种工具来查看服务器上发生的情况。 iostat和iotop,将帮助您定位问题。
如果你想要重新分配服务器上不同进程与 IO 相关的优先级,你可以使用伊奥尼采。这可能足以解决您的问题,但这可能是一个临时解决方案。您可能需要研究服务器的不同存储或资源分配。
iostat
Iostat 可用于识别哪些存储/内存设备正在拖慢您的服务器速度。它有一些不错的统计数据 iowait。一旦您知道哪个设备正在拖慢速度,您可能会更好地了解应该将注意力集中在哪里。
$ iostat Linux 3.2.0-30-generic (aaron-laptop) 2012 年 11 月 9 日 _x86_64_ (4 CPU) 平均 CPU:%用户%nice%系统%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 TID PRIO 用户磁盘读取磁盘写入 SWAPIN IO> 命令 349 be/3 根 0.00 B/s 1012.49 B/s 0.00 % 1.79 % [jbd2/sda3-8] 1 be/4 根 0.00 B/s 0.00 B/s 0.00 % 0.00 % 初始化 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-设置或获取进程 io 调度类和优先级。 用法: ionice [选项] -p PID [PID...] ionice [选项] 命令 选项: -c, --class 调度类名称或编号 0:无,1:实时,2:尽力而为,3:空闲 -n, --classdata 调度类数据 0-7 表示实时和尽力而为类 -p, --pid=PID查看或修改已经运行的进程 -t, --ignore 忽略失败 -V, --version 输出版本信息并退出 -h, --help 显示此帮助并退出