¿Por qué el nautilus es lento?

19

Me pregunto por qué Nautilus es muy lento al abrir un directorio que contiene muchos archivos. Mi / usr / lib dir, por ejemplo, tiene 1900 archivos y se tarda aproximadamente más de 5 segundos en mostrar todo. Ha sido así desde que instalé Ubuntu hace unos meses y a veces es bastante molesto. No tengo un hardware potente, pero sé que Windows Explorer es mucho más rápido que esto.

¿Hay algo que se pueda hacer para acelerarlo?

Ubuntu 10.04

Distrito de codificación
fuente
1
Supongo que Nautilus utiliza ls para hacer su lista mientras Explorer tiene un caché.
digitxp
¿Qué tipo de sistema es? Creo que este es un gran factor. Sería "lento" en mi netbook, pero no tanto en un i7 con 4+ GB de RAM.
Chris
Relacionado con Ask Ubuntu: Nautilus es muy lento
slhck

Respuestas:

27

El seguimiento de la ejecución de nautilusmuestra que la lentitud se debe a una combinación de dos factores:

  • Es inteligente mostrar información útil sobre cada archivo. Busca dentro del contenido de los archivos para determinar qué icono usar, y posiblemente muestra una vista previa. Esto puede atenuarse desactivando las vistas previas en las preferencias.

  • Hace mucho trabajo inútil (como statcrear cada archivo varias veces y verificar /proc/filesystemsincluso si no hay directorios). Todo lo que puede hacer es aprender programación, mejorar el programa y enviar un parche. O al menos envíe a los autores una solicitud de función (hágalo más rápido).

  • Llama a varios procesos externos para cada directorio, no he explorado lo que hacen.

Gilles 'SO- deja de ser malvado'
fuente
Buena respuesta: D! +1 para parchear + solicitud de función: D
BloodPhilia
Soy programador, aunque todavía no soy lo suficientemente bueno como para contribuir. Solo por curiosidad, ¿cómo hiciste el rastro?
Coding District
2
@Derek: strace -f -ttt -p1234 -o nautilus.stracedonde 1234 es el pid de nautilus. No he analizado la traza en detalle, solo he echado un vistazo al adelanto (muchas cosas que involucran subprocesos) y las cosas por archivo (múltiples statsy una openpara algunos archivos).
Gilles 'SO- deja de ser malvado'
1
Muchos de los múltiples stat () provienen de llamadas a la biblioteca, muchos de glibc.
Tim Post
¡Ay, esto ha sido un problema desde hace más de 6 años! ¿Cómo es que nadie ha invertido el tiempo en esto? Para comenzar, las vistas previas y las estadísticas deben hacerse DESPUÉS de enumerar los archivos. Por lo tanto, enumerar carpetas enormes será tan instantáneo como posible lsy será posible navegar mientras se cargan las vistas previas. El Explorador de Windows funciona así, si no recuerdo mal. Increíble para un programa Ubuntu muy utilizado como este. sin embargo, no debería quejarme sino contribuir en su lugar
phil294
5

En la pestaña "Vista previa" en "Editar -> Preferencias", intente cambiar todas las opciones a "Nunca".

También me ayudó enormemente a desactivar las "Tecnologías de asistencia". Puede hacerlo en "Sistema -> Preferencias -> Tecnologías de asistencia". Desmarca "Habilitar tecnologías de asistencia".

Tendrá que cerrar sesión y volver a iniciarla para que el último cambio surta efecto.

Arrendajo
fuente
Esto me da mejoras muy modestas. Eliminar marcadores hizo una diferencia mucho mayor.
Peter Jenkins el
5

Esto me recordó una conversación que tuve con Alexander Larsson , el desarrollador principal de Nautilus y otros proyectos, incluido GVFS.

Su respuesta de Giles , específicamente la parte sobre Nautilus que mira dentro del contenido de los archivos, toca la razón principal por la cual Nautilus es "lento". Sin embargo, Giles no explica por qué esto es lento, lo que puede ser obvio para algunos, pero no para otros. Esto es lo que Alex tuvo que decir:

Digamos que comienza con una pizarra en blanco, es decir, no ha accedido al sistema de archivos en absoluto. Ahora digamos que ejecuta stat ("/ some / dir / file"). Primero, el núcleo tiene que encontrar el archivo, que en términos técnicos se llama inodo. Comienza buscando en el superbloque del sistema de archivos, que almacena el inodo del directorio raíz. Luego abre el directorio raíz, encuentra "algunos", abre eso, encuentra "dir", etc., finalmente encuentra el inodo para el archivo.

Entonces tienes que leer los datos del inodo. Después de la primera lectura, esto también se almacena en caché en la RAM. Entonces, una lectura solo tiene que suceder una vez.

Piense en la HD como un viejo tocadiscos, una vez que esté en el lugar correcto con la aguja, puede seguir leyendo rápidamente mientras gira. Sin embargo, una vez que necesita mudarse a un lugar diferente, llamado "buscar", está haciendo algo muy diferente. Debe mover físicamente el brazo, luego esperar a que el plato gire hasta que el lugar correcto esté debajo de la aguja. Este tipo de movimiento físico es inherentemente lento, por lo que los tiempos de búsqueda de discos son bastante largos.

Entonces, ¿cuándo buscamos? Depende del diseño del sistema de archivos, por supuesto. Los sistemas de archivos intentan almacenar archivos consecutivamente para aumentar el rendimiento de lectura, y generalmente también intentan almacenar inodos para un solo directorio cerca uno del otro, pero todo depende de cosas como cuándo se escriben los archivos, fragmentación del sistema de archivos, etc. caso, cada estadística de un archivo provocará una búsqueda y luego cada apertura del archivo provocará una segunda búsqueda. Entonces, es por eso que las cosas tardan tanto tiempo cuando nada se almacena en caché.

Algunos sistemas de archivos son mejores que otros, la desfragmentación puede ayudar. Puedes hacer algunas cosas en las aplicaciones. Por ejemplo, GIO ordena los inodos recibidos de readdir () antes de declararlos esperando que el número de inodo tenga algún tipo de relación con el orden del disco (generalmente lo tiene), minimizando así las búsquedas aleatorias de un lado a otro.

Una cosa importante es diseñar su almacenamiento de datos y aplicaciones para minimizar la búsqueda. Por ejemplo, esta es la razón por la cual la lectura / usr / bin de Nautilus es lenta, porque los archivos allí generalmente no tienen extensión, necesitamos hacer un sniffing mágico para cada uno. Entonces, necesitamos abrir cada archivo => una búsqueda por archivo => slooooow. Otro ejemplo son las aplicaciones que almacenan información en muchos archivos pequeños, como solía hacer gconf, también una mala idea. De todos modos, en la práctica no creo que haya mucho que puedas hacer, excepto tratar de ocultar las latencias.

Terminó con la siguiente nota:

La solución real para todo este dilema es alejarse de los medios rotativos. Escuché que los SSD Intel son increíbles. Linus jura por ellos.

:-)

Bruce van der Kooij
fuente
3
Interesante :) Sin embargo, si la búsqueda es la causa de la lentitud, todavía me pregunto por qué Windows Explorer es mucho más rápido. Ciertamente no debido al hardware.
Distrito de codificación
44
Si tuviera que adivinar, diría que no hace sniffing mágico, sino que simplemente hace la detección de archivos según la extensión (puedo confirmar esto para Windows XP).
Bruce van der Kooij
2
Exactamente. Explorer (en su mayor parte) no hace ningún tipo de rastreo de archivos, simplemente usa la extensión. Si necesita mostrar una vista previa o leer un icono, bueno, entonces tiene que abrir el archivo. Puede ver esto si abre una carpeta grande llena de archivos .exe. Una extensión de shell podría obligar a Explorer a abrir un archivo para hacer un poco de rastreo también. Por ejemplo, algunas utilidades de archivo examinarán los archivos .exe para ver si son archivos SFX. MS ha invertido mucho esfuerzo en hacer cosas para tratar de acelerar el Explorer, tanto en velocidad real como en velocidad aparente.
Afrazier
3

Finalmente descubrí qué es lo que hace que el nautilus sea tan lento: los marcadores.

Para solucionarlo, elimine todos sus marcadores, reinicie y luego vuelva a agregar aquellos sin los que no puede vivir.

Usando strace me di cuenta de que nautilus estaba indicando muchos archivos para cada vista. Incluso los archivos que no estaban en el directorio que estaba navegando durante el seguimiento. Creo que nautilus está tratando de pre-cachear estos marcadores.

Tenía una unidad de red como marcador ... esta podría haber sido la razón por la que nautilus tardaba varios segundos en cargarse.

Peter Jenkins
fuente
1

Intente usar un administrador de archivos alternativo como Thunar. Thunar es mucho más rápido al cargar listados de directorio y más estable para copiar archivos de mi disco duro NTFS USB a ext4, aunque con grandes conjuntos de archivos parece tener problemas como Nautilus.

Aquí hay un enlace para cambiar la secuencia de comandos https://help.ubuntu.com/community/DefaultFileManager

mut1na
fuente
Gran solución! Me encantan las aplicaciones "sudo apt-get install thunar" y "exo-Preferred-Applications" y luego selecciono Thunar en la solución (Utilidades> Administrador de archivos).
Doud
1

Si tiene instalado xfce en un sistema Gnome y nunca lo está utilizando, elimine exo-utils

Solucionó mi problema, junto con el problema de que Chrome no abre los archivos correctamente después de que se descargan.

Adam H
fuente
No me ayudó. exo-utils también es requerido por muchos paquetes, incluido el paquete xfdesktop4, por lo que es bastante difícil de eliminar: sudo dpkg -r --ignore-dependen = xfce4-terminal, thunar-volman, squeeze, thunar, xfce4-panel, xfce4-verve -plugin, xfdesktop4 exo-utils
Peter Jenkins
1

En la pestaña "Vista previa" en "Editar -> Preferencias", intente cambiar todas las opciones a "Nunca".

También me ayudó enormemente a desactivar las "Tecnologías de asistencia". Puede hacerlo en "Sistema -> Preferencias -> Tecnologías de asistencia". Desmarca "Habilitar tecnologías de asistencia".

Tendrá que cerrar sesión y volver a iniciarla para que el último cambio surta efecto.

wsmart
fuente
1
El tiempo para abrir una carpeta grande se redujo de unos 30 segundos a unos dos segundos. Caramba.
wsmart
Mi publicación fue eliminada aquí por otro usuario. aparentemente. Quería agradecer a Jay por su publicación, ya que marcó una gran diferencia para mi problema lento de Nautius. Sé real, sé sobrio.
wsmart