Emacs28 启动时会不断启动好多emacs进程,且不断增加。

emacs28启动时,自动不断启动新的emacs进程,能到7/8百个,然后内存耗完,导致死机。 我在windows上使用emacs。我该怎么排查?

我尝试了:

  • 不加载我的配置可以启动正常。
  • 加载我的配置则会有这个问题,但我有没办法定位问题。
  • 加载个最小配置,可以正常启动起来,但是还是眼看着进程会不断增加,但又不知道emacs在后台干什么。不过发现 插件的build文件夹不断的被更新(我使用straight.el)。
  • 一个个插件模块逐渐增加去定位问题时,发现最后所有模块,都正常加载了后。再启动又没问题了。

希望大佬们提供我个思路,去定位问题。

我说下我看到的

第一次启动 emacs 28 后 cpu 飙满了,这个时候有 5 个 emacs 进程,其中一个是我打开的,另外 4 个应该是 emacs 打开的。我的电脑是 4 核 8 线程 cpu,看了下 comp.el 里面的注释,某个 option 为默认值的话就会使用一半 cpui

一段时间之后就恢复正常了,应该是 native-comp 编译完成了

要不检查一下插件是否先前进行了字节编译

在 info 的 library-search 一章相比 emacs 27 新增了以下内容:

If Emacs was compiled with support for native compilation (*note Native Compilation::), then when a ‘.elc’ byte-compiled file is found by searching ‘load-path’, Emacs will try to look for a corresponding ‘.eln’

应该是开启了native-comp吧,我用doom他的cli会native compile所有elisp文件 native-comp-async-jobs-number这个变量设置一下试一试?

插件没有进行字节编译,启动中,会编译。

这个值是默认值0,使用一半CPU。

不使用nativ-compile试试吧

我没有使用过 staright.el,也许是它做了一些工作?

我编译插件的方式是:首先字节编译所有插件,然后重启emacs,emacs 就会在我require 时对其进行 native compile

straight.el好像提供了不进行 native-comp的选项

是的,straight.el 做了编译的工作。

我尝试把 native-comp-async-jobs-number设为1,然后以最小配置启动,依然能看到自动递增的emacs进程, 不过做多到120多个,电脑还能承受,然后让他跑一阵子,emacs进程数就掉到7-8个了。然后正常启动,就可以了。

由此看来,应该是和native-comp相关,初次启动,好像有些工作必须做完。做完了,后面启动就正常了。不知道是不是和straight.el的build机制有关。我没法定位到问题。目前这个算是临时的办法吧。

1 个赞

其实非native comp也会在挂机时编译elisp的,不过那个的cpu占用就很低了,基本体会不到哈哈

我当初就被native comp的自动编译吓跑过,当初都不知道检查一下native compile log的buffer,还以为是电脑问题 :joy:

后来我才知道native comp的正确使用方法是先load所有包,然后把电脑插教室后面挂一节课再用 :rofl:

虽然会麻烦些,不过,怎么说呢,用native comp不就图个这个嘛,不编译哪来的速度2333