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
gnome-shell
のログレベルを指定- 例えば
debug
,info
,warn
,error
など。 - gsettings set
- システムコマンドと言えるか怪しい。
GSettings
を変更する。 - 参考:システム再インストールを楽にする手順: 専用BashScriptのすすめ
- `gsettings reset
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
参考: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
のメモリーリークだとしたら、対策が必要なシステムはありそうだな…というのが気がかりです。(機能拡張など全て外していることが前提)
以上です。ありがとうございました。