매우 느린 Emacs 문제를 어떻게 해결할 수 있습니까?


41

문서를 작성 중이며 어제 등장한 것으로 보이는 Emacs의 성능에 문제가 있습니다. init 파일을 변경하거나 새 패키지를 설치하지 않았습니다.

문제는 내가 쓰는 동안 키보드의 문자를 누르고 화면에 표시하는 것 사이에 매우 눈에 띄는 지연이 있다는 것입니다. 단어를 입력 한 후에도 여전히 화면에 인쇄되는 것을 볼 수 있습니다.

타이핑 속도를 제외하고 다른 문제가 있는지는 모르겠지만 (단지 추측 할 수는 있지만) 눈치 채지 못했습니다.

이 문제의 원인은 무엇입니까?
Emacs에 의한 것이거나 내 PC의 성능 때문입니까? 일반적으로 Emacs의 성능에 영향을 미치는 변수는 무엇입니까?

My Emacs의 버전은 GNU Emacs 24.3.1입니다.

주요 활성 모드는 다음과 같습니다.

  1. 유액

부 활성 모드는 다음과 같습니다.

  1. 자동 완성
  2. 자동 구성
  3. 자동 압축
  4. 자동 암호화
  5. 깜박이 커서
  6. 파일 이름 그림자
  7. 글꼴 잠금
  8. 글로벌 자동 완성
  9. Global-Font-Lock Global-Hl-Line
  10. 줄 번호
  11. 마우스 휠
  12. 쉘-더 트랙
  13. 쇼 패런
  14. 스마트 파렌
  15. 스마트 파렌-글로벌
  16. 툴팁 과도 마크

5
C-h m주요 모드와 활성화 된 모든 부 모드가 표시됩니다. 원인을 추적 할 때까지 각 부 모드를 천천히 비활성화 할 수 있습니다. 주요 모드 자체가 될 수 있지만 부 모드는 가장 의심스러운 부분입니다. 사용중인 모드를 지정하지 않으면 여기있는 모든 사람이 문제와 관련하여 어두워 질 것입니다. 일부 특수 이미지에서 발생하는 드문 상황이 있습니다 (예 : 누군가가 iPhone에 전화 기호 또는 다른 특수 기호가있는 이메일을 보내는 경우). 이는 특수 기호로 인해 격리 된 속도 저하 문제입니다.
lawlist

2
linum-mode큰 버퍼에서 성능이 느려집니다. nlinum-mode더 큰 버퍼에는 Stefan이 작성하는 것이 좋습니다.
lawlist

컴퓨터에서 무슨 일이 일어나고 있습니까? 얼마나 많은 메모리가 사용되고 있습니까? 귀하의 CPU는 얼마나 활동적이고 어떤 프로그램이 가장 많이 사용됩니까? 다른 프로그램 일 수도 있습니다.
Dave

2
아, 나는이 참조를 다른 스레드에 게시했습니다 : gnu.org/software/emacs/manual/html_node/elisp/Profiling.html- 이것은 좋은 시작이 될 것입니다. 또한 어둠 속에서 촬영하십시오 : font-lock gnu.org/software/emacs/manual/html_node/emacs/Font-Lock.html을 비활성화 하십시오 -이것은 나의 첫 번째 평범한 용의자입니다. ).
wvxvw

1
이 의견에 대한 수많은 제안은이 질문이 너무 모호하다는 것을 보여줍니다. 해결책 대신 지침을 요구하는 제목을 다시 작성했습니다. 또한 이에 따라 답변을 제공했습니다. 해당 지시 사항을 따른 후에는 새로운 질문을하거나 명확하지 않은 경우 의견을 남겨주십시오.
Malabarba

답변:


64

이 문제의 원인은 무엇입니까? Emacs에 의한 것이거나 내 PC의 성능 때문입니까? 일반적으로 Emacs의 성능에 영향을 미치는 변수는 무엇입니까?

Emacs에는 약 50,000 개의 내부 변수와 각각 수십 개의 변수에서 평균 수천 개의 외부 패키지가 있으며, 일반적인 의미에서 누군가가 이에 대해 답변 할 것으로 기대할 수 없습니다. :-)

당신은 당신의 질문 아래에 댓글 스레드를보고 그것을 볼 수 있습니다. 거기에는 십여 가지의 다른 제안이 있으며 모두 똑같이 유효합니다.

문제를 정확히 파악하기 위해 무엇을 할 수 있습니까?

옵션 1 : 비활성화 모드

나열된 마이너 모드를 비활성화하고 성능 문제를 해결하는 모드를 확인하십시오. 나는 시작하는 것 smartparens, auto-complete, line-numberfont-lock다음 목록을 따릅니다.

"어제이 문제가 없었습니다" 는 아주 작은 것을 의미 합니다. 너무 많이 의존하지 마십시오 . 문제가 해결 될 때까지 마이너 모드를 비활성화하십시오.

부 모드에서 문제가 해결되지 않으면이 문제를 일으키는 스 니펫을 찾을 때까지 init 파일의 일부를 주석 처리하십시오. 어쨌든 더 구체적인 것이 있으면 새로운 질문을하십시오.

옵션 2 : 프로파일 러

  1. 호출하십시오 M-x profiler-start RET RET(두 번째 RET는 확인하는 것입니다 cpu).
  2. 바람직하게는 전체 단락 또는 그 이상을 입력하십시오.
  3. 를 호출하십시오 M-x profiler-report.

각 함수가 사용하는 CPU 시간을 설명하는 버퍼를 제공합니다. TAB라인에 치면 라인이 확장되어 그 안에 기능이 표시됩니다. 어떤 함수가 많은 CPU 시간을 소비하는지 알 때까지이 버퍼를 탐색하십시오.

나중에 어떻게해야합니까?

지연을 일으키는 함수 또는 패키지 또는 스 니펫을 찾으면 (특별한 순서없이) 다음을 수행 할 수 있습니다.

  • 특정 마이너 모드 (또는 기능 또는 스 니펫) 와 관련하여 여기에 새로운 질문을하십시오 .
  • 패키지 관리자에게 버그를보고하십시오.
    • 패키지 소스 파일 상단의 주석을 확인하십시오. URL (특히 github)이 포함되어 있으면 문제 추적기가있을 수 있습니다.
    • 일부 패키지는 다음과 같은 명령을 제공합니다 M-x PACKAGE-bug-report.
    • 그의 이메일은 패키지 소스 파일의 맨 위에 있어야합니다.
  • 내장 패키지 인 경우로 신고 할 수 있습니다 M-x report-emacs-bug.
  • 기본 제공 패키지가 아닌 경우에도 help-gnu-emacs메일 링리스트 에서 도움을 요청할 수 있습니다 .

4
이것들은 훌륭한 지침입니다. 대단히 감사합니다! 내 qusetion의 의견에서 말했듯이 나는 그것이 모호해질 것이라는 것을 몰랐습니다. 나는 이맥스에 대한 전문가의 대답이 기본이라고 생각했다. 어쨌든이 "가이드"는 훌륭하고 내 질문이 그것을 이끌어 낸 것이 기쁘다. :)
Adam

3
프로파일 러 사용시 +100000 어리석은 (나처럼) 실수로 모든 버퍼의 모드 라인에 비싼 함수 호출을 추가하는 것과 같은 일을하는 경우, 무슨 일이 일어나고 있는지 알아내는 방법입니다.
Radon Rosborough

마이너 모드를 어떻게 비활성화합니까? 활성화 된 보조 모드 : 비동기 바이트 구성 패키지 자동 완성 자동 구성 자동 압축 파일 이름-그림자 플라이 체크 철자 글꼴 잠금 전역 자동 완성 전역 자동 복귀 전역 Eldoc 전역 비행 전역 글꼴 잠금 전역 -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-Smartparens-Global 크기 표시 Smartparens Smartparens-Global
Stryker
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.