🪲

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

2024/05/26に公開

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のデバッガ表示
  • restart

    • rと同じ。gnome-shellの再起動。セッションは維持される
  • `set loglevel <level>

    • gnome-shellのログレベルを指定
    • 例えばdebug, info, warn, errorなど。
  • gsettings set <schema> <key> <value>

  • `gsettings reset <schema> <key>

    • GSettingsをリセット
  • gsettings list-recursively

    • GSettings設定をリスト表示
    • 仮想端末でやったほうが良くない?
  • メモリ開放前: 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

gnome-shell
参考:Technology
上記ページには、gnome-shellは「コンポジットマネージャである」と書かれています。
gnome-shellの下層にはOpenGLClutter, Mutterがあります。

  • Window Manager: Mutter
  • シーングラフベースのAPIを提供するClutter
    • 2D, 3Dグラフィック描画のためのライブラリ。
    • 強力なアニメーションフレームワークを提供→UIトランジッションやエフェクト効果
    • gnome-shell以外にもメディアプレーヤーやゲームなどでも使用されるScene graphs in games and 3D applications
  • Shell Toolkit: ボックス、ボタン、スクロールバーなどカスタムウィジェットを提供。CSSをサポートしているためテーマ設定が容易。
  • GObject Introspection: GObjectJavaScriptバインディングを自動的に生成。

ログの確認

# `journalctl`で`gnome-shell`が1日に吐き出したログをファイルに出力する
journalctl _COMM=gnome-shell --since "2024-05-24" --until "2024-05-25" > journalctl_gnome-shell.txt

補足

上記コマンドラインの_COMM=フィールド指定子です。
_COMM=gnome-shellgnome-shellによって生成されたログエントリをフィルタリングします。

他のフィールド指定子

ログ精査結果

メモリ増大に関連する可能性のあるログをピックアップします

  1. リピ回数が多い、キーシンボルの上書き警告
Window manager warning: Overwriting existing binding of keysym 32 with keysym 32 (keycode b).

Window Manager(Mutter)関連のエラーと思われる。
Input Remapperでキーの入れ替えをしているので、ここは調査が必要。
2. 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

  1. 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のメモリーリークだとしたら、対策が必要なシステムはありそうだな…というのが気がかりです。(機能拡張など全て外していることが前提)

以上です。ありがとうございました。

参考文献

Discussion