mezi
2022 年4 月 6 日 03:42
1
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’
dcy
2022 年4 月 6 日 04:23
3
应该是开启了native-comp吧,我用doom他的cli会native compile所有elisp文件
native-comp-async-jobs-number这个变量设置一下试一试?
我没有使用过 staright.el,也许是它做了一些工作?
我编译插件的方式是:首先字节编译所有插件,然后重启emacs,emacs 就会在我require 时对其进行 native compile
straight.el好像提供了不进行 native-comp的选项
mezi
2022 年4 月 6 日 05:59
8
是的,straight.el 做了编译的工作。
我尝试把 native-comp-async-jobs-number
设为1,然后以最小配置启动,依然能看到自动递增的emacs进程,
不过做多到120多个,电脑还能承受,然后让他跑一阵子,emacs进程数就掉到7-8个了。然后正常启动,就可以了。
由此看来,应该是和native-comp相关,初次启动,好像有些工作必须做完。做完了,后面启动就正常了。不知道是不是和straight.el的build机制有关。我没法定位到问题。目前这个算是临时的办法吧。
1 个赞
3vau
2022 年4 月 7 日 01:24
9
其实非native comp也会在挂机时编译elisp的,不过那个的cpu占用就很低了,基本体会不到哈哈
我当初就被native comp的自动编译吓跑过,当初都不知道检查一下native compile log的buffer,还以为是电脑问题
后来我才知道native comp的正确使用方法是先load所有包,然后把电脑插教室后面挂一节课再用
虽然会麻烦些,不过,怎么说呢,用native comp不就图个这个嘛,不编译哪来的速度2333