GNOME Shellがメモリーリークしてるかも知れない

目次
はじめに
わたしのシステムでは時間が経過するごとにgnome-shellのメモリ使用量が増大します。
このためAlt+F2でポップアップするコマンドダイアログにrと入力することでgnome-shellを再起動させます。
この再起動ではセッションが維持されるため、セッションが初期化されてしまうログアウトやシステムの再起動より使い勝手が良いです。
環境
inxi -S; gnome-shell --version
System:
Host: **user** Kernel: 6.5.0-35-generic x86_64 bits: 64 Desktop: Unity
Distro: Ubuntu 22.04.4 LTS (Jammy Jellyfish)
GNOME Shell 42.9
補足:他のシステムコマンド
rの他のシステムコマンドを載せておきます。GNOME Shellの機能拡張を開発したりしているなら、r(OR restart), lgなんかは役立つかも知れません。gsettingsは、再インストール時に済ませてありますし、なにかの設定を切り替えたいのならdconfエディターや設定から操作する方が見通しも良くていいのではないかと思います。
- lg
gnome-shellのデバッガ表示restartrと同じ。gnome-shellの再起動。セッションは維持される- `set loglevel
gnome-shellのログレベルを指定- 例えば
debug,info,warn,errorなど。 - gsettings set
- システムコマンドと言えるか怪しい。
GSettingsを変更する。 - 参考:システム再インストールを楽にする手順: 専用BashScriptのすすめ
- `gsettings reset
GSettingsをリセットgsettings list-recursivelyGSettings設定をリスト表示- 仮想端末でやったほうが良くない?
- メモリ開放前: 617MB

- メモリ開放後:384MB

さて、簡単お気軽にメモリの開放ができるとはいえ、システムとしてはよろしくない状態です。
とはいえ、この問題にあまり時間をかけたくありません。
ここでは、gnome-shellに関する簡単な知識の整理と、ログの確認、今現在の潜在的な問題を洗い出すにとどめようと思います。
簡単なまとめを残しておくことで、同じ問題を持つかも知れない方への助けとなれば幸いです。
gnome-shellとはなにか
参考:GNOME Shell, next generation desktop shell
Provides core interface functions like switching windows, launching applications or see your notifications.
(gnome-shellは)ウィンドウの切り替え、アプリケーションの起動、通知の確認などのコアインターフェイス機能を提供します。
GNOME Shell, next generation desktop shell

参考:Technology
上記ページには、gnome-shellは「コンポジットマネージャである」と書かれています。gnome-shellの下層にはOpenGLにClutter, Mutterがあります。
- Window Manager:
Mutter - シーングラフベースのAPIを提供する
Clutter - 2D, 3Dグラフィック描画のためのライブラリ。
- 強力なアニメーションフレームワークを提供→UIトランジッションやエフェクト効果
gnome-shell以外にもメディアプレーヤーやゲームなどでも使用されるScene graphs in games and 3D applicationsShell Toolkit: ボックス、ボタン、スクロールバーなどカスタムウィジェットを提供。CSSをサポートしているためテーマ設定が容易。GObject Introspection:GObjectのJavaScriptバインディングを自動的に生成。
ログの確認
# `journalctl`で`gnome-shell`が1日に吐き出したログをファイルに出力する
journalctl _COMM=gnome-shell --since "2024-05-24" --until "2024-05-25" > journalctl_gnome-shell.txt
補足
上記コマンドラインの_COMM=はフィールド指定子です。_COMM=gnome-shellでgnome-shellによって生成されたログエントリをフィルタリングします。
他のフィールド指定子
_PID: プロセスIDでフィルタリング_UID: ユーザーIDでフィルタリング_SYSTEMD_UNIT:systemdユニット名でフィルタリング_EXE:実行ファイルのパスでフィルタリング
参考:- journalctlコマンドの使い方
- journalctl – systemdで起動したサービスのログを確認する
ログ精査結果
メモリ増大に関連する可能性のあるログをピックアップします
- リピ回数が多い、キーシンボルの上書き警告
Window manager warning: Overwriting existing binding of keysym 32 with keysym 32 (keycode b).
Window Manager(Mutter)関連のエラーと思われる。Input Remapperでキーの入れ替えをしているので、ここは調査が必要。
Gio.DBusError
JS ERROR: Gio.DBusError: GDBus.Error:org.freedesktop.DBus.Error.Failed: error occurred in AboutToShow
Gio.DBusエラー
GNOMEの設定変更やシステム通知のエラー?error occurred in AboutToShow: メニューやUIコンポーネントが表示される直前に発生することが多いらしい。
参考: JS ERROR: Gio.DBusError: GDBus.Error:org.freedesktop.DBus. Error.Failed: error occurred in AboutToShow #445
Stage viewsの更新エラー
Can't update stage views actor <unnamed>[<MetaWindowGroup>:0x616babace360] is on because it needs an allocation.
特定のアクター(描画対象オブジェクト)が描画のためのメモリ空間の領域割り当てが行われていない?GPUの問題?
主メモリやVRAMの不足は見受けられない。
ウィンドウの最大化・最大化解除のたびにこのエラーが発生するとの報告もあり
参考:Can’t update stage views actor MetaWindowGroup is on because it needs an allocation
ログの対処
1に関してはInput Remapperの設定を見直してみて、それでもエラーが出るかどうか様子見する。
2, 3については深堀が必要そう。アップデートにより自然消滅する可能性もある。
最後に
結局、Input Remmaperの設定を見直すくらいしか対処のしようがないことになりました。
(それ以外については多くの時間が吸い込まれそうなので)
ただしgnome-shellのメモリーリークだとしたら、対策が必要なシステムはありそうだな…というのが気がかりです。(機能拡張など全て外していることが前提)
以上です。ありがとうございました。


