iDvel / rime-ice

Rime 配置:雾凇拼音 | 长期维护的简体词库
https://dvel.me/posts/rime-ice/
GNU General Public License v3.0
9.7k stars 651 forks source link

出现内存泄露(Squirrel 18.0 复现,一天上升到 150m) #850

Closed doviscn closed 5 months ago

doviscn commented 6 months ago

内存随着使用时间而增长,不知道是否跟lua有关,目前使用的是默认配置并且部署后退出进程重新开始的。

环境:M2 max,mac 14.4.1

mirtlecn commented 6 months ago

把长词优先和词条置顶的 lua 禁用了(注释掉)再测试下

doviscn commented 6 months ago

把长词优先和词条置顶的 lua 禁用了(注释掉)再测试下

原来的0.16版本没啥问题,升级到0.18后就这样了。

mirtlecn commented 6 months ago

那你去 Squirrel 那里反馈好了

这里近一个月都没有 lua 大体积占用的东西改动,甚至还加了一个用于回收内存的 gc 函数,不太可能是配置的问题。

mirtlecn commented 6 months ago

问一些问题:

  1. 同文,fcitx5 android、Weasel 用户,出现过内存泄露问题吗?(同样作为 librime 1.11.x)
  2. 完全一样的配置,16.2 有问题吗(Squirrel 18.0 有重大改动)
  3. 把 search.lua,长词优先 lua,和置顶词 lua 禁用了,再看看内存,还有问题吗?(排除指定 lua)

https://github.com/iDvel/rime-ice/blob/ea7770e408ffebada5da5079f4af0275837a3591/rime_ice.schema.yaml#L77-L78

https://github.com/iDvel/rime-ice/blob/ea7770e408ffebada5da5079f4af0275837a3591/rime_ice.schema.yaml#L82

search.lua 之前一直没有内存问题,16.2 也没人说有问题;但最近重写过;长词优先和置顶词 lua 曾经造成过鼠须管的内存问题。因为 librime 改动挺大的,librime-lua 那边有一些函数失效了,看看是不是有这个问题。

  1. 如果可以的话,用 1.10 的 librime 替换掉 Squirrel 18.0 的 librime,试试还有没有对应问题。 (验证)
Redv123 commented 6 months ago

这个方案在 Fcitx5 内存泄露的还挺厉害的,只要打字就会上升内存占用,一次性打的句子越长内存占用越多。每次部署都会占用接近 1GB 左右的内存,然后就再也没有降下去。我开机不到一个小时反复打字测试了一会,内存就会从 65.8 MB 以下逐渐上升到 200 MB 的内存占用。我用 Squirrel 0.18 4 天都没有超过 100 MB 的内存占用。 image Screenshot 2024-05-21 at 9 39 47 AM

mirtlebot commented 6 months ago

每次部署都会占用接近 1GB 左右的内存,然后就再也没有降下去

Linux 上是这样的,ibus 也是这样。是词库过大导致的。和配置本身没什么关系,原版方案也这样,不过因为词库小,是变成 400 m,什么 lua 都没加。

一次性打的句子越长内存占用越多。内存就会从 65.8 MB 以下逐渐上升到 200 MB 的内存占用

你用的是最新的配置吗?

librime 什么版本。

之前有这种现象,是因为 librime-lua 的 bug。这个 bug 在 1.11 还是 1.10 这样修好的。最新的配置也做了兼容。

我用 Squirrel 0.18 4 天都没有超过 100 MB 的内存占用

也就是说没有内存泄漏的问题喽 @Redv123

mirtlecn commented 6 months ago

我复现了,fcitx5 确实如此。另开一个 issue @Redv123 我看看能不能搞定

Redv123 commented 6 months ago

我用的就是仓库最新的配置,除了关掉 Emoji 以外没什么变化。除了输入超长句子以外,日常输入不会造成内存提升。

mirtlebot commented 6 months ago

可能是模糊音的问题吗?

877

如果是这样:

J-StrawHat commented 5 months ago

3. 把 search.lua,长词优先 lua,和置顶词 lua 禁用了,再看看内存,还有问题吗?(排除指定 lua)

@mirtlecn 如果将 double_pinyin_flypy.schema.yaml 的这三项注释掉并重新部署后,仍然在涨

mirtlebot commented 5 months ago

这样交流太累了,我不用 Squirrel,看谁用 Squirrel 来解决这个问题好了。

iDvel commented 5 months ago

你把 rime.lua 里的 force_gc()collectgarbage("step") 改成 collectgarbage() 试试看看还有没有问题?

mirtlecn commented 5 months ago

不太可能是 lua 的问题,本身 librime-lua 就是每次处理候选就会 gc 回收内存,实际上 1.11 后本库里面的 force_gc 已经没用了,librime-lua 内部的 gc 比这猛多了

配置引起内存泄露大概率要么是 librime 的 bug(比如某个函数炸了),但 Weasel、fcitx5 android 明明内存都很稳;我还是倾向于是客户端的改动造成的

有问题的是试试最新的 CI 版吧(1.0),我简单试了下,内存很稳啊,怎么复现内存泄露?

1716690587.webm

mirtlecn commented 5 months ago

尝试 CI 版,我测试没泄露问题。那边的 issue 也被关掉了。

配置是不太可能引发一个前端的内存泄露问题的,至今为止碰到的都是 librime(lua)或者前端自己的问题。

还有问题的话

提供更多信息另开 issue。锁了