我该如何调试Emacs启动缓慢的问题?

13

我最近购买了一台搭载Mountain Lion系统的新款Retina MacBook Pro,但不幸的是emacs在我的新电脑上启动很慢(大约需要5秒左右)。我尝试安装了最新版homebrew版本的emacs,但问题仍然存在。我没有“.emacs”文件,所以我不知道是什么导致了启动速度变慢。

我可以利用哪些工具来调试并找出emacs启动时花费时间的原因?


你也可以运行 M-x emacs-init-time 命令来确定 Emacs 读取初始化文件所需的时间(如果你使用 -Q 参数启动,应该是 0 秒)。此外,你可能想要尝试一下这个优秀的 Emacs 端口,它在 Mac 上运行 flyspell、TRAMP 等功能更快。 - jmdeldin
我得到了0.0秒的时间。即使使用“-Q”开始,启动时间仍然很慢。 - Mike
如果你启动 emacs -Q --debug-init*Messages* 缓冲区中会有什么内容呢?为了明确起见,你是在控制台还是GUI模式下运行? - jmdeldin
这听起来有点疯狂,但显然其他人也遇到过:如果关闭无线网络,它是否启动缓慢?此外,您的hostname是否设置了完全限定域名,例如myretina.local相关信息)? - jmdeldin
@jmdelin 谢谢,解决了问题!sudo scutil --set HostName mike.local解决了问题。如果您写出答案,我会接受它。 - Mike
6个回答

22

看起来你需要为计算机的主机名拥有一个完全限定域名(例如,myretina.local); 否则,Emacs 启动会很慢

你可以通过终端验证你的主机名:

hostname

你可以使用它进行设置

sudo scutil --set HostName myretina.local

对我来说有效。正在运行 Lion,HostName 没有设置。Emacs 启动非常缓慢。设置 HostName。Emacs 立即启动。谢谢。 - etchasketch

4

首先,运行emacs -Q(这将完全不加载任何启动文件)来查看是否仍然很慢。

你可能需要阅读以下内容,其中解释了Emacs默认会查找的各种可能文件:

C-hig (emacs) Init File RET


1
"emacs -Q" 仍然很慢。当我执行 C-h i g Init 时,会出现 (No Match) 的提示,无法输入空格。 - Mike
看起来你没有输入 (emacs) 部分?或者使用 M-: (info "(emacs) Init File") RET。不过如果 emacs -Q 运行缓慢,阅读有关初始化文件的内容也无济于事。你可以尝试 http://emacsformacosx.com/,但这是我的建议极限了,抱歉。 - phils

2

更改主机名对我没有任何帮助。对我起了奇效的是一种看似违反常理的方法,但现在我的emacs可以立即从终端启动。以下是我所做的:

alias emacs=/Applications/Emacs.app/Contents/MacOS/Emacs --debug-init

然而,从图形界面启动仍需要几秒钟,有时甚至需要15秒钟。很奇怪!


1

在您的设置中,Emacs应该能够立即启动

Mac构建(来自源代码)

% time /Applications/Emacs.app/Contents/MacOS/Emacs --debug-init -eval '(kill-emacs)' -Q
/Applications/Emacs.app/Contents/MacOS/Emacs --debug-init -eval '(kill-emacs)  0.19s user 0.06s system 35% cpu 0.696 total

从emacsformacosx.com下载的NS构建

% time /Volumes/Emacs/Emacs.app/Contents/MacOS/Emacs --debug-init -eval '(kill-emacs)' -Q
/Volumes/Emacs/Emacs.app/Contents/MacOS/Emacs --debug-init -eval  -Q  0.17s user 0.08s system 35% cpu 0.691 total

我不使用Homebrew来安装Emacs,但应该是类似的。你确定你没有以某种方式加载非标准包吗?


0

Emacs 真的有一些非常严重的问题。如果 nameservice 崩溃或路由不正常,或者您的 VPN 隧道关闭等等。

对于我们系统管理员来说,启动 vi 总是一个选项:

# time emacs -debug-init -eval '(kill-emacs)' -Q

real    2m5.177s
user    0m0.029s
sys     0m0.024s

此时vpnc已经停止工作并引起了一些问题(路由和名称服务)。请注意超过2分钟!

使用emacs 30年后仍然不明白为什么它真的需要解析您的主机名。对于锁定文件,有比这更好的选择。

管理数百/数千台机器和虚拟机,并设置单独的主机文件并不是一个真正的答案。手动操作需要花费几天/几周的时间,而自动生成则几乎没有任何用处。


0

对我来说,通过在/etc/hosts中添加本地主机名和相应的IP地址进行修复


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接