Warum ist Nautilus langsam?

19

Ich frage mich, warum Nautilus beim Öffnen eines Verzeichnisses mit vielen Dateien sehr langsam ist. Mein / usr / lib-Verzeichnis hat zum Beispiel 1900 Dateien und es dauert ungefähr 5+ Sekunden, um alles anzuzeigen. Es ist so, seit ich Ubuntu vor ein paar Monaten installiert habe und es ist manchmal wirklich ziemlich nervig. Ich habe keine leistungsstarke Hardware, aber ich weiß, dass der Windows Explorer so viel schneller ist.

Gibt es etwas, das getan werden kann, um es zu beschleunigen?

Ubuntu 10.04

Coding District
quelle
1
Ich vermute, dass Nautilus ls verwendet, um seine Liste zu erstellen, während der Explorer einen Cache hat.
digitxp
Um was für ein System handelt es sich? Ich denke, das ist ein großer Faktor. Es wäre "langsam" auf meinem Netbook, aber nicht so sehr auf einem i7 mit 4 + GB RAM.
Chris
Related on Ask Ubuntu: Nautilus ist sehr langsam
slhck

Antworten:

27

Die Verfolgung der Ausführung von nautiluszeigt, dass die Langsamkeit auf eine Kombination von zwei Faktoren zurückzuführen ist:

  • Es ist klug, nützliche Informationen zu jeder Datei anzuzeigen. Es untersucht den Inhalt von Dateien, um festzustellen, welches Symbol verwendet werden soll, und zeigt möglicherweise eine Vorschau an. Dies kann durch Deaktivieren der Vorschau in den Voreinstellungen verringert werden.

  • Es erledigt eine Menge nutzloser Arbeit (z. B. statmehrfache Überprüfung jeder Datei und Überprüfung /proc/filesystemsauch auf Nicht-Verzeichnisse). Alles was Sie tun können, ist das Programmieren zu lernen, das Programm zu verbessern und einen Patch zu senden. Oder senden Sie den Autoren zumindest eine Feature-Anfrage (bitte beschleunigen Sie diese).

  • Es werden mehrere externe Prozesse für jedes Verzeichnis aufgerufen. Ich habe nicht untersucht, was sie tun.

Gilles 'SO - hör auf böse zu sein'
quelle
Gute Antwort: D! +1 für das Patchen + featurerequestrequest: D
BloodPhilia
Ich bin Programmierer, aber noch nicht gut genug, um einen Beitrag zu leisten. Wie haben Sie aus Neugier die Spur verfolgt?
Codierungsbezirk
2
@Derek: strace -f -ttt -p1234 -o nautilus.stracewo 1234 ist die PID von Nautilus. Ich habe die Spur nicht im Detail analysiert, habe nur einen Blick auf den Vorlauf (viele Dinge, die Unterprozesse betreffen) und die Dinge pro Datei (mehrere stats und openfür einige Dateien) geworfen.
Gilles 'SO - hör auf böse zu sein'
1
Viele der multiple stat () stammen aus Bibliotheksaufrufen, viele von glibc.
Tim Post
woah, das ist seit über 6 Jahren ein Problem! wie kommt es, dass noch niemand die zeit dafür investiert hat? Zu Beginn sollten Voransichten und Statistiken NACH dem Auflisten der Dateien erstellt werden. Auf diese Weise werden riesige Ordner so schnell wie möglich aufgelistet lsund das Durchsuchen ist möglich, während die Vorschau geladen wird. Windows Explorer funktioniert so, wenn ich mich richtig erinnere. Irgendwie unglaublich für ein häufig genutztes Ubuntu-Programm wie dieses. sollte sich aber nicht beschweren, sondern dazu beitragen
phil294
5

Versuchen Sie auf der Registerkarte "Vorschau" unter "Bearbeiten -> Einstellungen", alle Optionen auf "Nie" zu setzen.

Es hat mir auch enorm geholfen, "Assistive Technologies" auszuschalten. Sie können dies unter "System -> Einstellungen -> Hilfstechnologien" tun. Deaktivieren Sie "Unterstützende Technologien aktivieren".

Sie müssen sich abmelden und wieder anmelden, damit die letzte Änderung wirksam wird.

Jay
quelle
Dies gibt mir sehr bescheidene Verbesserungen. Das Löschen von Lesezeichen machte einen viel größeren Unterschied.
Peter Jenkins
5

Das erinnerte mich an ein Gespräch, das ich geführt hatte mit Alexander Larsson , dem Hauptentwickler von Nautilus und anderen Projekten, einschließlich GVFS.

Giles ' Antwort , insbesondere die Tatsache, dass Nautilus sich den Inhalt von Dateien ansieht, berührt den Hauptgrund, warum Nautilus "langsam" ist. Giles erklärt es jedoch nicht warum dies langsam ist, was für einige offensichtlich sein könnte, für andere jedoch nicht. Das hatte Alex zu sagen:

Angenommen, Sie beginnen mit einer leeren Tabelle, dh Sie haben überhaupt nicht auf das Dateisystem zugegriffen. Angenommen, Sie führen stat aus ("/ some / dir / file"). Zuerst muss der Kernel die Datei finden, die in technischer Hinsicht als Inode bezeichnet wird. Zunächst wird im Superblock des Dateisystems gesucht, in dem der Inode des Stammverzeichnisses gespeichert ist. Dann öffnet es das Stammverzeichnis, findet "some", öffnet das, findet "dir" usw. und findet schließlich den Inode für die Datei.

Dann müssen Sie die Inode-Daten tatsächlich lesen. Nach dem ersten Lesen wird dies auch im RAM zwischengespeichert. Ein Lesevorgang muss also nur einmal erfolgen.

Stellen Sie sich die HD wie einen alten Plattenspieler vor. Wenn Sie sich mit der Nadel an der richtigen Stelle befinden, können Sie die Daten während der Rotation schnell lesen. Wenn Sie jedoch an einen anderen Ort, der als "Suchen" bezeichnet wird, umziehen müssen, tun Sie etwas ganz anderes. Sie müssen den Arm physisch bewegen und warten, bis sich der Plattenteller dreht, bis sich die richtige Stelle unter der Nadel befindet. Diese Art der physischen Bewegung ist von Natur aus langsam, so dass die Suchzeiten für Festplatten ziemlich lang sind.

Also, wann suchen wir? Das hängt natürlich vom Dateisystem-Layout ab. Dateisysteme versuchen, Dateien nacheinander zu speichern, um die Leseleistung zu erhöhen, und sie versuchen im Allgemeinen auch, Inodes für ein einzelnes Verzeichnis nebeneinander zu speichern, aber es hängt alles von Dingen wie dem Zeitpunkt des Schreibens der Dateien, der Fragmentierung des Dateisystems usw. ab In diesem Fall wird bei jedem Status einer Datei ein Suchvorgang ausgeführt, und bei jedem Öffnen der Datei wird ein zweiter Suchvorgang ausgeführt. Deshalb dauert es so lange, bis nichts zwischengespeichert ist.

Einige Dateisysteme sind besser als andere. Eine Defragmentierung kann hilfreich sein. Sie können einige Dinge in Apps tun. Zum Beispiel sortiert GIO die empfangenen Inodes von readdir (), bevor er angibt, dass die Inode-Nummer in irgendeiner Beziehung zur Festplattenreihenfolge steht (was im Allgemeinen der Fall ist), wodurch zufällige Suchvorgänge hin und her minimiert werden.

Eine wichtige Sache ist es, Ihren Datenspeicher und Ihre Apps so zu gestalten, dass die Suche minimiert wird. Dies ist zum Beispiel der Grund, warum das Lesen von / usr / bin in Nautilus langsam ist, da die darin enthaltenen Dateien im Allgemeinen keine Erweiterung haben, für die jeweils ein Magic Sniffing durchgeführt werden muss. Also müssen wir jede Datei öffnen => eine Suche pro Datei => slooooow. Ein weiteres Beispiel sind Apps, die Informationen in vielen kleinen Dateien speichern, wie es früher bei gconf der Fall war. Auch dies ist eine schlechte Idee. In der Praxis gibt es meines Erachtens sowieso nicht viel zu tun, außer zu versuchen, die Latenzen zu verbergen.

Er endete mit folgender Bemerkung:

Die eigentliche Lösung für dieses ganze Dilemma besteht darin, sich von rotierenden Medien zu entfernen. Ich höre, dass die Intel-SSDs fantastisch sind. Linus schwört auf sie.

:-)

Bruce van der Kooij
quelle
3
Interessant :) Wenn jedoch die Suche die Hauptursache für die Langsamkeit ist, frage ich mich immer noch, warum Windows Explorer dann so viel schneller ist? Sicher nicht an der Hardware.
Coding District
4
Wenn ich raten müsste, würde ich sagen, dass es kein magisches Schnüffeln macht, sondern einfach eine Dateierkennung basierend auf der Erweiterung (ich kann dies für Windows XP bestätigen).
Bruce van der Kooij
2
Genau. Der Explorer schnüffelt (größtenteils) nicht an Dateien, sondern verwendet einfach die Erweiterung. Wenn eine Vorschau gerendert oder ein Symbol gelesen werden soll, muss die Datei geöffnet werden. Sie können dies sehen, wenn Sie einen großen Ordner voller EXE-Dateien öffnen. Eine Shell-Erweiterung könnte den Explorer dazu zwingen, eine Datei zu öffnen, um auch ein bisschen zu schnüffeln. Einige Archivdienstprogramme untersuchen beispielsweise EXE-Dateien, um festzustellen, ob es sich um SFX-Archive handelt. MS hat große Anstrengungen unternommen, um den Explorer sowohl in der tatsächlichen als auch in der scheinbaren Geschwindigkeit zu beschleunigen.
afrazier
3

Endlich habe ich herausgefunden, was Nautilus so langsam macht: Lesezeichen.

Um das Problem zu beheben, löschen Sie alle Ihre Lesezeichen, starten Sie sie neu und fügen Sie diejenigen wieder hinzu, ohne die Sie nicht leben können.

Unter Verwendung von strace wurde mir klar, dass nautilus für jede Ansicht viele Dateien angibt. Sogar Dateien, die sich nicht in dem Verzeichnis befanden, das ich während der Verfolgung durchsucht habe. Ich denke, Nautilus versucht, diese Lesezeichen vorab zwischenzuspeichern.

Ich hatte ein Netzwerklaufwerk als Lesezeichen. Dies könnte der Grund dafür gewesen sein, dass das Laden von Nautilus einige Sekunden dauerte.

Peter Jenkins
quelle
1

Versuchen Sie es mit einem alternativen Dateimanager wie Thunar. Thunar ist viel schneller beim Laden von Verzeichnislisten und stabiler beim Kopieren von Dateien von meiner NTFS-USB-Festplatte auf ext4, obwohl es bei großen Dateigruppen Probleme zu geben scheint, wie bei Nautilus.

Hier ist ein Link für das Switch-Skript https://help.ubuntu.com/community/DefaultFileManager

mut1na
quelle
Problemumgehung! Ich mag "sudo apt-get install thunar" und "exo-preferred-applications" und wähle dann Thunar in der (Utilities> File Manger) -Lösung.
Doud
1

Wenn Sie xfce auf einem Gnome-System installiert haben und es niemals verwenden, entfernen Sie exo-utils

Es hat mein Problem behoben, zusammen mit dem Problem, dass Chrome Dateien nach dem Herunterladen nicht richtig öffnet.

Adam H
quelle
Hat mir nicht geholfen. exo-utils werden auch von vielen Paketen benötigt, einschließlich des xfdesktop4-Pakets, so dass es ziemlich schwer zu entfernen ist: sudo dpkg -r --ignore-depend = xfce4-terminal, thunar-volman, squeeze, thunar, xfce4-panel, xfce4-verve -plugin, xfdesktop4 exo-utils
Peter Jenkins
1

Versuchen Sie auf der Registerkarte "Vorschau" unter "Bearbeiten -> Einstellungen", alle Optionen auf "Nie" zu setzen.

Es hat mir auch enorm geholfen, "Assistive Technologies" auszuschalten. Sie können dies unter "System -> Einstellungen -> Hilfstechnologien" tun. Deaktivieren Sie "Unterstützende Technologien aktivieren".

Sie müssen sich abmelden und wieder anmelden, damit die letzte Änderung wirksam wird.

wsmart
quelle
1
Die Zeit zum Öffnen eines großen Ordners wurde von etwa 30 Sekunden auf etwa zwei Sekunden reduziert. Guter Kummer.
wsmart
Mein Beitrag wurde hier von einem anderen Benutzer gelöscht. anscheinend. Ich wollte mich bei Jay für seinen Beitrag bedanken, da er für meine langsame Nautius-Ausgabe einen großen Unterschied machte. Sei real, sei nüchtern.
wsmart