emacs-nativecomp emacs-native-comp-git 建议使用这两个包
执行 (malloc-trim) 后会缓解吗?
(malloc-trim)
在gc之前运行没有效果;在gc之后运行可以把内存返回给操作系统,从2G降到400M。之后内存占用仍会继续增加。
我之前遇到过严重的内存泄漏,把剩余几十G硬盘空间都占满了,卡死后,我重启了电脑。
尝试了emacs-native-comp-git-enhanced,不能解决问题。不过感谢
有没有可能是用了gcmh,然后把gcmh-high-cons-threshold
设的太高了,导致emacs一直没有进行GC操作?
是的,我设置了很高的gc阈值,用的gc-cons-threshold
。
doom的配置(setq gcmh-high-cons-threshold (* 16 1024 1024))
,阈值如果高到GC会导致emacs卡顿就得不偿失了。。。这个设置gchm会在用户没有操作的时候进行GC,一般情况下不会卡手。
感谢!我去试一试
总结:
内存占用增长过快:可能是因为配置里有run-with-timer
,而且timer的重复间隔过短,调用的函数复杂。可以增加重复间隔来解决。
内存占用过多,不返回给操作系统:(garbage-collect)后,执行 (malloc-trim)
gc-cons-threshold不要设置过大。可以在idle时执行gc,或者使用gcmh。
(malloc-trim)
是emacs自身的命令吗?
运行htop -F emacs
.
daemon 340M内存.
独立的emacs -nw
进程400M左右。spellcheck, flymake, emms, pyim都开了。
emacs内存消耗不会太大,否则一般都有优化的空间.
Emacs 28 可以 M-x memory-report
检查内存消耗.
可以在 idle timer 中运行 malloc-trim。。。不过我猜根本原因是你的 gc-cons-threshold 太高。
这是 emacs 29 引入的函数
内存泄露和硬盘没关系把
可能是系统把内存缓存到硬盘上了。
虚拟内存有大小限制的,除非专门配置,否则不会无限制增大
(13.29.5 malloc_trim) This function is missing on some platforms: macOS 11.1,…
malloc-trim
好像并不能在所有的系统上用, 那么在 macOS 这样的坑爹系统上有没有其他的替代方案呢? (还是只能够设置一个很小的上限妥协呢? )
症状: 因为启动的时候设置了一个较大的阀值, 如果从零开始配置的话就会看到进程管理器里面的 Emacs 内存暴涨 (up-to 2~3 GB💦), 尽管最终会掉下来, 但是稳定在 1 GB 左右就不会继续掉了, 而 Emacs 中的 Memory Report 总占用在 300MB 左右.
配置文件: (macOS 13.3, emacs-plus@30)
(let ((normal-gc-cons-threshold (* 32 1024 1024))
(init-gc-cons-threshold most-positive-fixnum))
(setq gc-cons-threshold init-gc-cons-threshold)
(add-hook 'emacs-startup-hook
(lambda () (setq gc-cons-threshold normal-gc-cons-threshold))))
目前是把 init-gc-cons-threshold
设成只比 normal-gc-cons-threshold
大一点.
看gcmh作者的说明,其实gs-cons-threshold设置16M就够了,最好不要超过512M