【问题标题】:Emacs takes unbelievably long to startEmacs 的启动时间令人难以置信
【发布时间】:2014-05-12 22:19:09
【问题描述】:

昨天,我:q'd Vim 尝试了一段时间的 Emacs。我已经开始使用 Elisp(它比 VimScript 好一百倍),但即使我第一次安装它(通过yum),也没有改变任何东西,它需要大约 30 秒才能启动,并且仍然如此(两个 GUI和-nw)。

我检查了*Messages* 缓冲区:

Loading /usr/share/emacs/site-lisp/site-start.d/desktop-entry-mode-init.el (source)...done
Loading /usr/share/emacs/site-lisp/site-start.d/rpmdev-init.el (source)...done

这些文件似乎特定于我安装的 RPM 包。我试着改变他们的名字,但没有任何区别。仍然需要 30 秒。

我已经通过从不退出 emacs(我只是暂停它)并尝试在其中做所有事情来部分解决它,但是偶尔打开两个 Emacs 会很好,特别是因为我倾向于使用终端模拟器的拆分函数而不是像tmux 这样的东西。

我意识到 Emacs 的加载速度会比 Vim 慢,但这对于全新安装来说似乎很荒谬。有人知道发生了什么吗?

谢谢!

【问题讨论】:

  • 很多 Emacs 用户实际上每个会话启动一次 Emacs;您可以打开任意数量的帧(登录时启动emacs -d 并运行emacsclient 编辑文件)。但是30s的启动时间是不正常的;你有一个包做了一些奇怪的事情。 emacs -q 加载速度快吗?如果没有,查看 Messages 缓冲区,哪个 init 文件需要很长时间?您从哪里获得 Emacs(哪个发行版的包),以及慢速 init 文件来自哪里?
  • emacs -q 并不快。删除两个初始化文件并不能解决它。我简单地使用yum install emacs 安装了它。根据yum,它被称为emacs.x86_641:24.3-11.fc19
  • 哦,对不起,我应该问:emacs -Q 更快吗? (-q 不会加载您的个人 init 文件,-Q 也不会加载系统 init 文件。)如果是(我怀疑是),那么其中一个系统包就是罪魁祸首。如果没有,这需要更大的枪。运行strace -tt -o emacs.strace emacs -q -nw 并发布跟踪。 (即使它是一个暂停很长时间的系统包,这也很有用。)
  • 为了在 Mac 上为您提供参考,emacs -Q 在 0.05 秒内启动。 “我的”emacs 完全配置在 3 秒内启动。
  • 哦,我刚刚有了一个巨大的认识。当我启动计算机时,我目前必须手动运行dhclient em1 才能访问互联网。不过,今天我之前启动了 Emacs,加载速度非常快,几秒钟之内。运行命令一段时间后,我再次尝试启动 Emacs,但它又变慢了。我不是 100% 确定这是原因,但似乎是这样。我将重新启动并重试。

标签: emacs elisp loading


【解决方案1】:

Emacs 的问题文件说:

*** Emacs startup on GNU/Linux systems (and possibly other systems) is slow.

This can happen if the system is misconfigured and Emacs can't get the
full qualified domain name, FQDN.  You should have your FQDN in the
/etc/hosts file, something like this:

127.0.0.1   localhost
129.187.137.82  nuc04.t30.physik.tu-muenchen.de nuc04

The way to set this up may vary on non-GNU systems.

这种“启动缓慢”通常来自超时,30 秒听起来差不多。

附带说明:在(几乎)所有机器都有静态 IP 地址的时代,导致这种速度变慢的 DNS 查找被认为是重要/有用的。如今,以这种方式收集的信息并不能证明付出的努力是合理的,所以从 Emacs-25 开始,Emacs 不再执行这种 DNS 查找,所以这个问题应该不再存在了。

【讨论】:

  • /etc/hosts 似乎没有任何问题。它说:127.0.0.1 localhost.localdomain localhost::1 localhost6.localdomain6 localhost6。我把它改成了你的,没有帮助。
  • 斯特凡是正确的。如果hostname -f 命令返回一个值,那么你的全限定域名就设置好了,emacs 会快速启动。
【解决方案2】:

好的,我有一个(古怪且临时的)解决方案。我必须运行dhclient em1 才能访问互联网,这使得 Emacs 需要 30 秒才能加载,可能是因为一些超时。因此,已经运行 dhclient em1,我使用 shell 脚本启动 Emacs,它执行以下操作:

sudo pkill dhclient
sudo ifconfig em1 down
emacs -nw -daemon 2> /dev/null
sudo ifconfig em1 up
sudo dhclient em1

这会禁用网络,将 Emacs 作为守护程序启动,然后重新启用网络。这很丑陋,但它现在有效。如果其他人有更好的答案,我很乐意听到。当然,em1 必须替换为您的以太网设备(我猜可能是 eth0)。

【讨论】:

    【解决方案3】:

    我遇到了一个问题,emacs 启动大约需要 15 秒。就我而言,原因是 DNS 超时。出于某种原因,使用我的宿舍 DNS,反向查找失败(主机 127.0.0.1)大约需要 10 秒。用 google 名称服务器 (8.8.8.8) 替换 DNS 服务器会产生几乎即时的“未找到:3(NXDOMAIN)”响应。同时,emacs 的启动时间下降到不到 2 秒。感谢@Stefan 为我指明了 DNS 问题的方向。

    编辑:在网络管理器中添加谷歌名称服务器作为附加 NS 也可以完成这项工作。 (即当您的 resolv.conf 具有此顺序的 NS 时:

    nameserver a.b.c.d
    nameserver 8.8.8.8
    

    )

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-22
      • 1970-01-01
      • 2019-06-05
      • 1970-01-01
      • 2013-01-06
      • 2018-08-05
      • 1970-01-01
      相关资源
      最近更新 更多