请教emacs占用内存持续增加的原因

emacs-nativecomp emacs-native-comp-git 建议使用这两个包

执行 (malloc-trim) 后会缓解吗?

1 个赞

(malloc-trim) 在gc之前运行没有效果;在gc之后运行可以把内存返回给操作系统,从2G降到400M。之后内存占用仍会继续增加。

我之前遇到过严重的内存泄漏,把剩余几十G硬盘空间都占满了,卡死后,我重启了电脑。

尝试了emacs-native-comp-git-enhanced,不能解决问题。不过感谢

有没有可能是用了gcmh,然后把gcmh-high-cons-threshold设的太高了,导致emacs一直没有进行GC操作?

1 个赞

是的,我设置了很高的gc阈值,用的gc-cons-threshold

doom的配置(setq gcmh-high-cons-threshold (* 16 1024 1024)),阈值如果高到GC会导致emacs卡顿就得不偿失了。。。这个设置gchm会在用户没有操作的时候进行GC,一般情况下不会卡手。

1 个赞

感谢!我去试一试

总结:

内存占用增长过快:可能是因为配置里有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检查内存消耗.

2 个赞

可以在 idle timer 中运行 malloc-trim。。。不过我猜根本原因是你的 gc-cons-threshold 太高。

1 个赞

这是 emacs 29 引入的函数

内存泄露和硬盘没关系把

可能是系统把内存缓存到硬盘上了。

虚拟内存有大小限制的,除非专门配置,否则不会无限制增大

这就不太懂了,我之前在论坛上提过问,[求助]怎么排查org 导出pdf速度很慢占用内存很大

Emacs占用内存40G,我内存才16G。

:cry: (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