我使用的是Ubuntu20.04 (Linux 5.8.0-48-generic #54~20.04.1-Ubuntu
),今天我发现gnome-shell
正在使用大量的内存
USER PR NI VIRT RES SHR %CPU %MEM TIME+ COMMAND
2365 gdm 20 0 14.7g 11.0g 10.8g S 0.0 35.1 143:54.82 gnome-shell
76510 youran 20 0 8937064 3.2g 3.0g S 0.0 10.2 123:57.14 gnome-shell
这个服务器有32 no的RAM,但是即使没有工作负载也要使用21 no。
total used free shared buff/cache available
Mem: 31Gi 21Gi 2.5Gi 1.8Gi 6.7Gi 7.1Gi
注意这台服务器已经运行了123天,
$ uptime
13:08:18 up 123 days, 22:54, 4 users, load average: 0.79, 1.19, 1.00
所以我想是内存泄露了。我知道重新启动可以解决这个问题。但是,我想知道为什么,因为Linux用户不应该总是重新启动他们的计算机。我的gnome版本是
$ gnome-shell --version
GNOME Shell 3.36.7
相关问题:
发布于 2022-04-22 22:00:30
为了使@heynnema提到的解决方法自动化,我创建了一个每晚运行的cron作业。以普通用户的身份运行crontab -e
,并添加以下行:
20 4 * * * DISPLAY=:1 XDG_RUNTIME_DIR=/run/user/1000 dbus-send --type=method_call --print-reply --dest=org.gnome.Shell /org/gnome/Shell org.gnome.Shell.Eval string:'global.reexec_self()'
同样的事情,但是如果我熬夜而不想被打扰的话,可以使用gnome终端的确认窗口:
20 4 * * * DISPLAY=:1 XDG_RUNTIME_DIR=/run/user/1000 gnome-terminal --window -- /bin/bash -c "read -t 10 -p 'gnome-shell will be reloaded in ten seconds, HIT ENTER TO ABORT!' || dbus-send --type=method_call --print-reply --dest=org.gnome.Shell /org/gnome/Shell org.gnome.Shell.Eval string:'global.reexec_self()'"
检查当前显示环境变量是什么,并在需要时更改cron作业(echo $DISPLAY
)。如果您的UID不是1000,那么使用UID修改XDG_RUNTIME_DIR (使用id
命令获取UID)。
这样,我几乎没有注意到内存泄漏(有16 RAM内存)。
https://askubuntu.com/questions/1373685
复制相似问题