「最大クライアント数に達しました...ディスプレイ「:0」を開けません」デバッグ中

「最大クライアント数に達しました...ディスプレイ「:0」を開けません」デバッグ中

私はopenSUSE Tumbleweedインストールを実行するKDE Plasma 5.4.3を使用しています。私はかなり多くのプログラム(Eclipse、Firefox、Slack、Evolution、Konsole、さまざまなJavaアプリ)を使用していますが、時間が経つと新しいプログラムを開くことはできません。

Maximum number of clients reachedxlsclients:  unable to open display ":0"

どのプログラムがエラーを引き起こしているかを判断できません。作業時にxlsclients20~30個程度のプログラムが表示されますが、正確な情報が表示されないのではないかと疑われます。

この問題をデバッグし、どのプログラムがエラーを引き起こすかを調べるにはどうすればよいですか?

答え1

xlsclients私に多くのことを言わなかったxrestop。この問題を研究している人が書いた記事のほとんどは、以下を見つけることに焦点を当てています。みんなUnixソケットを開きます。しかし、lsofc -c Xorgアドバイスははるかに良いです。

しかし、今、ssその情報をより直接的に得ることができます。このコマンドは、Xorgに接続されているUnix(ローカル)ソケットを表示します。

sudo ss -x src "*/tmp/.X11-unix/*" 

ご使用の環境で動作させるには、フィルタセクションを試す必要があります。個別に実験してsudo ss -xすべてを確認し、そこでフィルタリングしてみてください。

ssソースアプリケーションを識別する方法(例:この操作)は見つかりませんが、lsofc一部のパイプでは識別できます。

sudo ss -x src "*/tmp/.X11-unix/*" | grep -Eo "[0-9]+\s*$" | while read port
do sudo ss -p -x | grep -w $port | grep -v X11-unix 
done | grep -Eo '".+"' | sort | uniq -c | sort -rn

出力は次のとおりです。

  8 "slack"
  8 "code"
  7 "brave"
  5 "kded5"
  2 "kwin_x11"
  2 "ksmserver"
  2 "kscreen_backend"
  1 "zoom"
  1 "zim"
  :

「最大クライアント到達」問題が発生している間にこのコマンドを実行すると、この検索には256のクライアントのリストが表示されます。だから私はこれが犯人を見つけるのに適したツールだと確信しています。

ss次のページで詳細情報を確認できます。

おおよそのスクリプト行の注釈付きバージョンは次のとおりです。

sudo ss -x src "*/tmp/.X11-unix/*" |  # List X11 sessions
  grep -Eo "[0-9]+\s*$" |             # extract the port number
  while read port ; do                # For every connected port
    sudo ss -p -x | grep -w $port |   #   Find the connecting process
    grep -v X11-unix                  #   but ignore the x11 side
  done | grep -Eo '".+"' |            # extract process names
  sort | uniq -c |                    # Count the number of repeats
  sort -rn                            # And sort them descending by count

関連情報