我正在使用 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
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