¿Cómo puedo solucionar un Emacs muy lento?


42

Estoy escribiendo un documento y tengo un problema con el rendimiento de Emacs que creo que apareció ayer. No he realizado ninguna modificación en mi archivo init ni he instalado ningún paquete nuevo.

El problema es que mientras escribo, hay un retraso muy notable entre presionar las letras en el teclado y hacer que aparezcan en la pantalla. A veces los veo todavía imprimiéndose en la pantalla después de haber terminado de escribir la palabra.

No sé si hay otros problemas, excepto la velocidad de escritura (solo puedo suponer que los hay), pero no los he notado.

¿Qué puede causar este problema?
¿Es causado por Emacs o se debe al rendimiento de mi PC? En general, ¿cuáles son las variables que afectan el rendimiento de Emacs?

La versión de mi Emacs es GNU Emacs 24.3.1

El modo activo principal es:

  1. Látex

y los modos activos menores son:

  1. Autocompletar
  2. Composición automática
  3. Autocompresión
  4. Cifrado automático
  5. Cursor de parpadeo
  6. Nombre-Archivo-Sombra
  7. Font-Lock
  8. Global-Auto-Complete
  9. Global-Font-Lock Global-Hl-Line
  10. Número de línea
  11. Rueda de ratón
  12. Shell-Dirtrack
  13. Show-Paren
  14. Smartparens
  15. Smartparens-Global
  16. Información sobre herramientas Transient-Mark

55
C-h mrevelará el modo mayor y todos los modos menores que estén activos. Puede deshabilitar lentamente cada modo menor hasta localizar la causa. Podría ser el modo principal en sí mismo, pero los modos menores son los sospechosos más probables. Sin especificar qué modos está utilizando, cualquiera aquí estaría apuñalando en la oscuridad lo que está sucediendo con su problema. Tengo una situación rara que ocurre con algunas imágenes especiales, por ejemplo, cuando alguien me envía un correo electrónico con un símbolo de teléfono u otros símbolos especiales en el iPhone, pero ese es un problema aislado de desaceleración causado por símbolos especiales.
ley

2
linum-moderalentiza el rendimiento en grandes buffers. nlinum-modeescrito por Stefan es mejor para buffers más grandes.
ley

¿Qué está pasando en tu computadora? ¿Cuánta memoria se está usando? ¿Qué tan activa es su CPU y qué programas son responsables de la mayor parte de su uso? El problema bien puede ser algún otro programa.
Dave

2
Oh, acabo de publicar esta referencia en otro hilo: gnu.org/software/emacs/manual/html_node/elisp/Profiling.html , este sería un buen comienzo. Además, una oportunidad en la oscuridad: intente deshabilitar font-lock gnu.org/software/emacs/manual/html_node/emacs/Font-Lock.html : este es mi primer sospechoso habitual (que a menudo justificadamente ocupa la mayoría de los ciclos de la CPU )
wvxvw

1
La gran cantidad de sugerencias en estos comentarios muestra que esta pregunta es demasiado vaga. Reescribí el título para pedir instrucciones, en lugar de una solución. También he proporcionado una respuesta en consecuencia. Haga una nueva pregunta una vez que haya seguido esas instrucciones, o deje un comentario si no fueron claras.
Malabarba

Respuestas:


65

¿Qué puede causar este problema? ¿Es causado por Emacs o se debe al rendimiento de mi PC? En general, ¿cuáles son las variables que afectan el rendimiento de Emacs?

Emacs tiene alrededor de 50,000 variables internas y unos pocos miles de paquetes externos con un promedio de unas pocas docenas de variables cada uno, no puede esperar que alguien responda esto en un sentido general. :-)

Puedes ver eso solo mirando el hilo de comentarios debajo de tu pregunta. Hay media docena de sugerencias diferentes, todas igualmente válidas.

¿Qué puedes hacer para identificar el problema?

Opción 1: modos de desactivación

Comience a deshabilitar los modos menores que ha enumerado y vea cuál resuelve su problema de rendimiento. Me gustaría empezar con smartparens, auto-complete, line-numbery font-lock, a continuación, siga por la lista.

"No tuve este problema ayer" significa muy poco, no confíes demasiado en él . Simplemente comience a deshabilitar los modos menores hasta que algo lo resuelva.

Si ninguno de los modos menores soluciona el problema, comience a comentar partes de su archivo de inicio hasta que descubra qué fragmento está causando esto. En cualquier caso, haga una nueva pregunta cuando tenga algo más específico.

Opción 2: el perfilador

  1. Invocar M-x profiler-start RET RET(el segundo RETes confirmar cpu);
  2. Escriba algo, preferiblemente un párrafo entero o más;
  3. Invoke M-x profiler-report.

Eso le dará un búfer que describe el tiempo de CPU que toma cada función. Golpear TABuna línea la expande para mostrar las funciones dentro de ella. Navegue por este búfer hasta que descubra qué función está tomando tanto tiempo de CPU.

¿Qué hago después?

Una vez que encuentre la función o paquete o fragmento que causa el retraso, puede (sin ningún orden en particular):

  • Haga una nueva pregunta aquí con respecto a ese modo menor específico (o función o fragmento).
  • Informe un error al mantenedor del paquete.
    • Verifique los comentarios en la parte superior del archivo fuente del paquete. Si contiene una URL (especialmente en github), probablemente haya un rastreador de problemas allí.
    • Algunos paquetes ofrecen un comando como M-x PACKAGE-bug-report.
    • Su correo electrónico debe estar en la parte superior del archivo fuente del paquete.
  • Si es un paquete integrado, puede informarlo con M-x report-emacs-bug.
  • Incluso para los paquetes que no están integrados, puede pedir ayuda en la help-gnu-emacslista de correo.

44
Estas son excelentes instrucciones. ¡Muchas gracias! Como he dicho en los comentarios de mi pregunta, no sabía que iba a ser vago. Pensé que la respuesta sería elemental para alguien experto en Emacs (como muchos de ustedes son). De todos modos, esta "guía" es genial y estoy feliz de que mi pregunta conduzca a eso. :)
Adam

3
+100000 por usar el generador de perfiles. Si eres tonto (como yo) y accidentalmente haces algo como agregar una costosa llamada de función a la línea de modo en cada búfer, esta es seguramente la forma de descubrir qué está sucediendo.
Radon Rosborough

¿Cómo se desactiva el modo menor? Modos menores habilitados: Async-Bytecomp-Package Auto-Complete Auto-Composition Auto-Compression File-Name-Shadow Flycheck Flyspell Font-Lock Global-Auto-Complete Global-Auto-Revert Global-Eldoc Global-Flycheck Global-Font-Lock Global -Git-Commit Global-Hl-Line Global-Hungry-Delete Global-Linum Line-Number Linum Magit-Auto-Revert Org-Bullets Org-Indent Override-Global Projectile Pyvenv Recentf Save-Place Shell-Dirtrack Show-Paren Show-Smartparens Show-Smartparens-Global Size-Indication Smartparens Smartparens-Global
Stryker
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.