为什么有时候执行ls命令非常缓慢

来源:互联网 发布:抓娃娃机技巧知乎 编辑:程序博客网 时间:2024/05/14 11:00

在碰到系统资源紧张,海量文件的情况下,执行ls命令,特别是ls -laRt命令,会很慢,笔者就碰到在几百万~几千万个海量小文件的情况下,执行ls -laRt命令要花1分钟到数个小时的情况。这种情况因属正常,要解释为什么会这么慢,就必须先说明下Linux中的内部命令和外部命令


内部命令 VS 外部命令

内部命令:所谓内部命令是指写在bash源码里面的,其执行速度比外部命令快,因为解析内部命令shell不需要创建子进程。 比如:exit,history,cd,jobs,bg,fg,echo

外部命令:bash之外额外安装的,通常放在/bin,/usr/bin,/sbin,/usr/sbin等等 
比如:ls,vi,cat

用type命令可以分辨内部命令与外部命令,带builtin命令的就是内部命令
# type cd                       cd is a shell builtin# type echoecho is a shell builtin# type ls                       ls is aliased to `ls --color=tty'# type vivi is aliased to `vim'


有了上面的认识,接着就必需了解ls命令的详细执行步骤:

ls命令执行步骤
第一步: 通过$PATH找到ls命令的存放路径,默认是/bin/ls,并执行ls命令.
第二步: 扫描所要打印的目录
第三步: 获取该目录下的所有文件的所有信息
第四步: 将获取的上述信息读取到内存
第五步: 最后将内存中相关的信息输出到屏幕中

所有ls的最终执行结果主要取决于:
1. ls目录下子目录,子文件的数目
2. 所用磁盘速度大小,比如说: SSD盘的速度> NL_SAS盘 > SATA盘
3. 内存大小
4. 内核个数和大小,处理能力

备注:
1)  一般固态盘: 200-800MB/s
2)  一般机械盘: 20-120MB/s

3)  一般内存速度: DDRIII1333的读取速度 8-9G/s,写的速度:7-8G


最后总结

综合上面来看,一般ls命令执行个几分钟,几个小时都属于正常,取最终执行结果,取决于文件个数,硬盘速度,内存大小,CPU个数和性能(这个在处理并行执行ls命令,效果尤其明显),需要用top,free, iostat等性能分析工具,看具体瓶颈出现在哪里。

1 0
原创粉丝点击