为什么鹦鹉螺慢?


19

我想知道为什么Nautilus在打开包含很多文件的目录时会非常慢。例如,我的/ usr / lib目录有1900个文件,大约需要5秒钟以上才能显示所有内容。自几个月前我安装Ubuntu以来,就一直这样,有时候确实很烦人。我没有功能强大的硬件,但是我知道Windows资源管理器比这快得多。

有什么可以做的加快它吗?

Ubuntu 10.04


1
我的猜测是,Nautilus在资源管理器具有缓存时利用ls列出了它。
digitxp 2010年

它是什么样的系统?我认为这是一个很大的因素。在我的上网本上,它会“变慢”,但在具有4GB以上的ram的i7上却不会那么快。
克里斯,2010年

与Ask Ubuntu相关:Nautilus的运行速度很慢
slhck

Answers:


27

跟踪show的执行情况nautilus,发现速度慢是由于两个因素的组合:

  • 显示有关每个文件的有用信息很聪明。它在文件内容中查找以确定要使用的图标,并可能显示预览。可以通过在首选项中关闭预览来减弱此效果。

  • 它做了很多无用的工作(例如stat多次访问每个文件,/proc/filesystems甚至检查非目录)。您所能做的就是学习编程,完善程序并发送补丁。或者至少向作者发送功能请求(请使其更快)。

  • 它为每个目录调用了多个外部进程,但我没有探讨它们的作用。


好的答案:D!+1用于补丁+ featurerequestrequest:D
BloodPhilia,2010年

我是一个程序员,尽管还不够出色。出于好奇,您是如何进行追踪的?
编码区

2
@Derek:strace -f -ttt -p1234 -o nautilus.strace其中1234是鹦鹉螺的pid。我没有详细分析跟踪,只是浏览了引导(很多涉及子流程的内容)和按文件的内容(多个statopen对于某些文件而言)。
吉尔(Gilles)'所以

1
多个stat()的很多来自库调用,很多来自glibc。
Tim Post

哇,这已经超过6年了!为何没人花时间在这上面呢?首先,应在列出文件后进行预览和统计。因此,列出大型文件夹将是即时的,ls并且在加载预览时可以进行浏览。如果我没记错的话,Windows资源管理器就是这样工作的。对于像这样的高度使用的Ubuntu程序来说,这是令人难以置信的。但是,不应抱怨,而应该做出贡献
phil294

5

在“编辑->首选项”下的“预览”选项卡中,尝试将所有选项切换为“从不”。

这也极大地帮助我关闭了“辅助技术”。您可以在“系统->首选项->辅助技术”中执行此操作。取消选中“启用辅助技术”。

您必须先注销然后重新登录,后一项更改才能生效。


这给了我非常适度的改进。删除书签的区别更大。
彼得·詹金斯

5

这让我想起了我与Nautilus和其他项目(包括GVFS)的首席开发人员Alexander Larsson进行的一次谈话

Giles 的答案,特别是关于Nautilus在文件内容中查找内容的一点,触及了Nautilus速度缓慢的主要原因。但是,Giles没有解释为什么这样做速度很慢,这对某些人可能是显而易见的,但对另一些人却不明显。这是亚历克斯不得不说的:

假设您从空白开始,即您根本没有访问文件系统。现在说您运行stat(“ / some / dir / file”)。首先,内核必须找到文件,从技术上讲,该文件称为inode。首先查找文件系统超级块,该文件存储超级目录的inode。然后,它打开根目录,找到“ some”,打开它,找到“ dir”,依此类推,最终找到文件的inode。

然后,您必须实际读取inode数据。第一次读取后,它也缓存在RAM中。因此,只读操作必须发生一次。

将HD视为旧的电唱机,一旦您用针将其放在正确的位置,您就可以在旋转时继续快速读取内容。但是,一旦您需要转移到另一个地方(称为“寻找”),您所做的事情就会大为不同。您需要物理移动手臂,然后等待盘旋转直到正确的位置在针下。这种物理运动本质上是缓慢的,因此磁盘的搜索时间很长。

那么,我们什么时候寻找?当然,这取决于文件系统的布局。文件系统尝试连续存储文件以提高读取性能,并且它们通常还尝试存储彼此靠近的单个目录的inode,但这全都取决于诸如何时写入文件,文件系统碎片等问题。因此,在最坏的情况下在这种情况下,文件的每个统计信息都会引起搜索,然后文件的每次打开都会引起第二次搜索。因此,这就是为什么在什么都没有缓存的情况下要花这么长时间的原因。

一些文件系统比其他文件系统更好,碎片整理可能会有所帮助。您可以在应用中执行某些操作。例如,GIO在声明接收到的索引节点希望索引节点编号与磁盘顺序(通常具有)之间存在某种关系之前,对它们从readdir()进行排序,从而最大程度地减少了来回随机查找。

重要的一件事是设计您的数据存储和应用程序,以最大程度地减少搜索量。例如,这就是Nautilus读取/ usr / bin速度很慢的原因,因为其中的文件通常没有扩展名,因此我们需要对每个文件进行魔术嗅探。因此,我们需要打开每个文件=>每个文件一个查找=> slooooow。另一个示例是将信息存储在许多小文件中的应用程序,例如曾经使用过的gconf,这也是一个坏主意。无论如何,在实践中,除了尝试隐藏延迟之外,我认为您无能为力。

他以以下注释结尾:

解决整个难题的真正方法是远离旋转介质。我听说英特尔SSD非常棒。莱纳斯向他们发誓。

:-)


3
有趣的是:)但是,如果搜索是速度缓慢的根本原因,我仍然想知道为什么Windows资源管理器那么快?当然不是由于硬件。
编码区

4
如果我不得不猜测,我会说它不会进行魔术嗅探,而只是基于扩展名进行文件检测(我可以在Windows XP中确认这一点)。
2010年

2
究竟。资源管理器(大部分情况下)不执行任何类型的文件嗅探,它仅使用扩展名。如果它需要渲染预览或阅读图标,那么它必须打开文件。如果打开一个充满.exe文件的大文件夹,则可以看到此信息。Shell扩展名可能会迫使Explorer也会打开文件来进行嗅探。例如,某些存档实用程序将检查.exe文件以查看它们是否为SFX存档。MS已投入大量精力来尝试提高Explorer的实际速度和视在速度。
afrazier 2011年

3

我终于想出了让鹦鹉螺这么慢的原因:书签。

要解决此问题,请删除所有书签,重新启动,然后重新添加您不能没有的书签。

使用strace,我意识到nautilus在每个视图中都声明了很多文件。甚至在跟踪过程中浏览的目录中也没有文件。我认为Nautilus正在尝试预缓存这些书签。

我有一个网络驱动器作为书签...这可能是鹦鹉螺需要花费几秒钟来加载的原因。


1

尝试使用备用文件管理器,例如Thunar。Thunar在加载目录列表时速度更快,并且对于将文件从我的NTFS usb硬盘复制到ext4而言更加稳定,尽管文件很大,似乎像Nautilus一样有麻烦。

这是切换脚本的链接 https://help.ubuntu.com/community/DefaultFileManager


很好的解决方法!我喜欢“ sudo apt-get install thunar”和“ exo-preferred-applications”,然后在(实用程序>文件管理器)解决方案中选择Thunar。
杜德

1

如果您在Gnome系统中安装了xfce,并且从未使用过,请删除exo-utils

它解决了我的问题,以及Chrome在文件下载后无法正确打开文件的问题。


对我没有帮助。许多软件包(包括xfdesktop4软件包)也需要exo-utils,因此很难删除:sudo dpkg -r --ignore-depends = xfce4-terminal,thunar-volman,squeeze,thunar,xfce4-panel,xfce4-verve -plugin,xfdesktop4 exo-utils
Peter Jenkins

1

在“编辑->首选项”下的“预览”选项卡中,尝试将所有选项切换为“从不”。

这也极大地帮助我关闭了“辅助技术”。您可以在“系统->首选项->辅助技术”中执行此操作。取消选中“启用辅助技术”。

您必须先注销然后重新登录,后一项更改才能生效。


1
打开大文件夹的时间从大约30秒减少到大约2秒。真是的
wsmart 2012年

我的帖子已被其他用户删除。显然。要感谢Jay的帖子,因为这对我的Nautius慢速杂志产生了巨大的影响。要真实,要清醒。
wsmart 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.