私はopenSUSE Tumbleweedインストールを実行するKDE Plasma 5.4.3を使用しています。私はかなり多くのプログラム(Eclipse、Firefox、Slack、Evolution、Konsole、さまざまなJavaアプリ)を使用していますが、時間が経つと新しいプログラムを開くことはできません。
Maximum number of clients reachedxlsclients: unable to open display ":0"
どのプログラムがエラーを引き起こしているかを判断できません。作業時にxlsclients
20~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