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

在碰到系统资源紧张,海量文件的情况下,执行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 echo
echo is a shell builtin
# type ls                       
ls is aliased to `ls --color=tty'
# type vi
vi 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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值