调试“已达到最大客户端数...无法打开显示“:0””

调试“已达到最大客户端数...无法打开显示“:0””

我正在使用 KDE Plasma 5.4.3 运行 openSUSE Tumbleweed 安装。我倾向于使用相当多的程序(Eclipse、Firefox、Slack、Evolution、Konsole、各种 Java 应用程序),一段时间后我无法再打开新程序,因为

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

我无法确定哪个程序导致了错误。工作时xlsclients它会显示大约 20-30 个程序,所以我怀疑它没有显示正确的信息。

如何调试此问题并找出导致错误的程序?

答案1

xlsclientsxrestop没有告诉我太多。研究这个问题的大多数人的文章都集中在寻找全部的打开 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

相关内容