您尚未登录。

#1 2020-12-28 10:55:02

fondu
会员
注册时间: 2020-03-27
帖子: 6

电脑断网后火狐吃满内存至电脑卡死

最近两个月,我发现只要电脑断网后,然后一段时间不操作设备,火狐就会慢慢吃满内存。等我反映过来的时候,鼠标已经不能移动,只能强制重启了。我也是最近才发现是火狐导致的这个问题,发现过程是把 KDE 的 System Activity 放在窗口最前,然后复现这个问题。等卡死的时候就可以看到火狐的主进程占内存比平常大,然后 CPU 也不正常。请问我该做些什么才能有助于解决这个问题呢?

我的火狐版本是 83.0 (64-bit)。arch 上 uname -a 结果如下:

$ uname -a  
Linux thinkpad 5.9.11-arch2-1 #1 SMP PREEMPT Sat, 28 Nov 2020 02:07:22 +0000 x86_64 GNU/Linux

我们学校使用一个叫做哆点的软件来进行校园网认证,该软件同一时间只允许一个帐号在一台设备使用。使用前先连接一个指定的校园网 WIFI,然后登入哆点就可以上网了。每次登入,就会把可能已登入的设备的哆点帐号挤下线,然后被下线的那台设备就不可以上网了。

我每次在另一台设备上把 arch 上的哆点挤下线后,然后一段时间不操作电脑,arch 上的火狐就会吃满内存。

但奇怪的是,只要我在挤下线之前,人为的断连校园网 WIFI,就几乎不会出现火狐就会吃满内存的情况。

今早又出现了这个问题, journalctl -b -1 -n 100 的结果如下:(因为我应该是 10 点 16 分出现的问题,出问题后我就重启了,所以结果中只贴了10点到现在的输出,奇怪的是没有这时刻的信息)

$ journalctl -b -1 -n 100
Dec 28 10:00:23 thinkpad plasmashell[595]: qrc:/plasma/plasmoids/org.kde.plasma.volume/contents/ui/main.qml:494:39: QML StreamListItem: Binding loop detected for property "width"
Dec 28 10:01:34 thinkpad plasmashell[595]: qrc:/plasma/plasmoids/org.kde.plasma.volume/contents/ui/main.qml:494:39: QML StreamListItem: Binding loop detected for property "width"
Dec 28 10:02:45 thinkpad plasmashell[595]: qrc:/plasma/plasmoids/org.kde.plasma.volume/contents/ui/main.qml:494:39: QML StreamListItem: Binding loop detected for property "width"
Dec 28 10:03:56 thinkpad plasmashell[595]: qrc:/plasma/plasmoids/org.kde.plasma.volume/contents/ui/main.qml:494:39: QML StreamListItem: Binding loop detected for property "width"
Dec 28 10:05:08 thinkpad plasmashell[595]: qrc:/plasma/plasmoids/org.kde.plasma.volume/contents/ui/main.qml:494:39: QML StreamListItem: Binding loop detected for property "width"
Dec 28 10:06:19 thinkpad plasmashell[595]: qrc:/plasma/plasmoids/org.kde.plasma.volume/contents/ui/main.qml:494:39: QML StreamListItem: Binding loop detected for property "width"
Dec 28 10:07:30 thinkpad plasmashell[595]: qrc:/plasma/plasmoids/org.kde.plasma.volume/contents/ui/main.qml:494:39: QML StreamListItem: Binding loop detected for property "width"
Dec 28 10:08:41 thinkpad plasmashell[595]: qrc:/plasma/plasmoids/org.kde.plasma.volume/contents/ui/main.qml:494:39: QML StreamListItem: Binding loop detected for property "width"
Dec 28 10:09:52 thinkpad plasmashell[595]: qrc:/plasma/plasmoids/org.kde.plasma.volume/contents/ui/main.qml:494:39: QML StreamListItem: Binding loop detected for property "width"
Dec 28 10:11:03 thinkpad plasmashell[595]: qrc:/plasma/plasmoids/org.kde.plasma.volume/contents/ui/main.qml:494:39: QML StreamListItem: Binding loop detected for property "width"
Dec 28 10:12:14 thinkpad plasmashell[595]: qrc:/plasma/plasmoids/org.kde.plasma.volume/contents/ui/main.qml:494:39: QML StreamListItem: Binding loop detected for property "width"
Dec 28 10:13:25 thinkpad plasmashell[595]: qrc:/plasma/plasmoids/org.kde.plasma.volume/contents/ui/main.qml:494:39: QML StreamListItem: Binding loop detected for property "width"
Dec 28 10:14:13 thinkpad kwin_x11[569]: qt.qpa.xcb: QXcbConnection: XCB error: 3 (BadWindow), sequence: 43658, resource id: 4194378, major code: 15 (QueryTree), minor code: 0
Dec 28 10:14:36 thinkpad plasmashell[595]: qrc:/plasma/plasmoids/org.kde.plasma.volume/contents/ui/main.qml:494:39: QML StreamListItem: Binding loop detected for property "width"
Dec 28 10:15:13 thinkpad baloo_file_extractor[1219736]: kf.baloo: Not busy, fast indexing
Dec 28 10:15:48 thinkpad plasmashell[595]: qrc:/plasma/plasmoids/org.kde.plasma.volume/contents/ui/main.qml:494:39: QML StreamListItem: Binding loop detected for property "width"

离线

#2 2020-12-28 12:22:42

依云
会员
所在地: a.k.a. 百合仙子
注册时间: 2011-08-21
帖子: 8,961
个人网站

Re: 电脑断网后火狐吃满内存至电脑卡死

限制一下火狐的内存占用以避免在出问题时你不能动,比如,启用了 cgroups v2 的话,可以
systemd-run -p MemoryMax=2G --scope firefox ....

没有 cgroups v2 的话,要么用 root 权限跑 systemd-run,要么用 ulimit 来限制内存。

离线

#3 2020-12-28 12:23:53

依云
会员
所在地: a.k.a. 百合仙子
注册时间: 2011-08-21
帖子: 8,961
个人网站

Re: 电脑断网后火狐吃满内存至电脑卡死

另外你如果没有自己授权过的话,普通用户是查不到系统日志的,只有用户自己的日志。需要 sudo journalctl。

离线

#4 2020-12-28 12:46:45

fondu
会员
注册时间: 2020-03-27
帖子: 6

Re: 电脑断网后火狐吃满内存至电脑卡死

谢谢依云,sudo journalctl -b -1 -n 100 的结果和没 sudo 一模一样。

一开始我也是想用限制火狐内存的思路来克服火狐吃满内存的问题,然后当时就搜了搜 kill process if takes too much memory,挑了个能看懂的 https://askubuntu.com/a/54753/1122866 这个回答,但是跑这个脚本的时候发现每次都要找 PID 挺麻烦的(后来发现 System Activity 里可以列出 PID)。火狐除了主进程之外,还有一些 Web,Web Extension,我不知道要不要把这些也算进去。而且每次都要多留一个 shell 跑这个脚本,于是就放弃了这种方法。

依云说的 cgroups v2 和用 root 权限跑 systemd-run 倒是第一次听说,我试试看。

离线

#5 2020-12-31 11:52:03

lily
会员
注册时间: 2020-12-31
帖子: 18

Re: 电脑断网后火狐吃满内存至电脑卡死

如果是为了避免系统卡死,可以安装并使用 earlyoom
该软件默认将在空余内存、空余swap两者均低于10%时,结束 oom_score 值最高的进程,避免系统内存耗尽卡死。

个人建议是安装 earlyoom 之后(避免系统卡死),重复之前操作,在 Firefox 内存使用开始上升,但 firefox 还没有被杀之前,在地址栏中输入 about:memory,生成并保存内存使用报告,搞清究竟是哪部分造成内存使用上升。

离线

#6 2020-12-31 12:35:56

fondu
会员
注册时间: 2020-03-27
帖子: 6

Re: 电脑断网后火狐吃满内存至电脑卡死

谢谢 lily 的建议,我刚又复现了一下,挤下线到内存上升,大概只用了 1 分半左右,而且内存上升的时候压根 measure 不出来,然后就卡死了。

1

2

3

离线

页脚