Linux – Centos 5.5 / ext3上的cp和cat对于某些目录中的文件来说要慢10倍

当我注意到iostat -dxk 3显示非常慢的读取速度,介于5 MB / s和10 MB / s之间,磁盘利用率为100%时,我正在使用GNU排序对一些大文件(27个文件中的91GB)进行排序.我试过猫大文件> / dev / null,并获得了类似的性能,仅略高一些.对于cp large-file / tmp /,在单独的磁盘上使用/ tmp也是如此. vim体验相同,以及我在 Ruby阅读文件中编写的脚本,如果有帮助的话.写入速度虽然快但是很快.

编辑:看起来这些操作只对某个目录中的文件很慢.对兄弟目录(同一磁盘分区)中的其他文件执行相同操作,最终速度很快,读取速度超过90 MBPS.这对我没有意义.可能是由于这些文件的构建方式?我通过读入许多其他文件来创建它们,并将每行写入适当的“存储桶文件”,具体取决于行中的第一个字符(所以a-z和其他文件的单个文件).所以我几乎同时在27个文件添加行,一次一个,通过8个进程,同时读取几千个文件.这会导致代表文件的块顺序排序而不是顺序吗?因此之后的慢顺序读取?

但是,我尝试使用fio来测量顺序读取性能,它的时钟速度为73 MB / s.另外值得注意的是,当我从同一台机器上通过FTP下载某些文件时,我的老板得到了正确的读取速度.

所以我猜这是某个配置问题,但我不知道在哪里.原因是什么,我该如何解决

编辑:此计算机在Citrix Xen虚拟化下运行.

编辑:输出iostat -dxk,而sort将大文件加载到其缓冲区中(获取cat / cp的类似输出):

Device:         rrqm/s   wrqm/s   r/s   w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
xvdb              0.00     0.00 1000.00  0.00  6138.61     0.00    12.28    24.66   24.10   0.99  99.41
xvdb1             0.00     0.00 1000.00  0.00  6138.61     0.00    12.28    24.66   24.10   0.99  99.41
xvda              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
xvda1             0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00

编辑:几个小时后进一步性能下降(处理排序时磁盘中断).它几乎看起来像随机IO,但只有一个排序操作正在进行,没有其他进程在执行任何IO,因此读取应该是顺序= /:

Device:         rrqm/s   wrqm/s   r/s   w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
xvdb              0.00     0.00 638.00  0.00  2966.67     0.00     9.30    25.89   40.62   1.57 100.00

Device:         rrqm/s   wrqm/s   r/s   w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
xvdb              0.33     0.00 574.67  0.00  2613.33     0.00     9.10    27.82   47.55   1.74 100.00 

Device:         rrqm/s   wrqm/s   r/s   w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
xvdb              0.00     0.00 444.33  0.00  1801.33     0.00     8.11    28.41   65.27   2.25 100.00

解决方法

您的慢速文件是否高度分散?运行/usr/sbin / filefrag -vfilename查找.你会得到如下输出
Checking big.file
Filesystem type is: ef53
Filesystem cylinder groups is approximately 4272
Blocksize of file big.file is 4096
File size of big.file is 96780584 (23629 blocks)
First block: 88179714
Last block: 88261773
discontinuity: Block 6 is at 88179742 (was 88179719)
discontinuity: Block 12233 is at 88192008 (was 88191981)
discontinuity: Block 17132 is at 88197127 (was 88196911)
discontinuity: Block 17133 is at 88255271 (was 88197127)
big.file: 5 extents found,perfection would be 1 extent

或者更糟糕的是.

您提到系统正在虚拟化下运行.这是访问虚拟磁盘映像文件

相关文章

在Linux上编写运行C语言程序,经常会遇到程序崩溃、卡死等异...
git使用小结很多人可能和我一样,起初对git是一无所知的。我...
1. 操作系统环境、安装包准备 宿主机:Max OSX 10.10.5 虚拟...
因为业务系统需求,需要对web服务作nginx代理,在不断的尝试...
Linux模块机制浅析 Linux允许用户通过插入模块,实现干预内核...
一、Hadoop HA的Web页面访问 Hadoop开启HA后,会同时存在两个...