我正在使用 KDE Plasma 5.4.3 运行 openSUSE Tumbleweed 安装。我倾向于使用相当数量的程序(Eclipse、Firefox、Slack、Evolution、Konsole、各种 Java 应用程序),一段时间后我无法再打开新程序,因为
Maximum number of clients reachedxlsclients: unable to open display ":0"
Run Code Online (Sandbox Code Playgroud)
我无法确定是哪个程序导致了错误。当xlsclients工作,所以我怀疑它不显示正确的信息显示20-30程序。
如何调试此问题并找出导致错误的程序?
xlsclients也xrestop没有告诉我太多。研究这个问题的大多数人的文章都集中在查找总的开放 Unix 套接字上。但lsofc -c Xorg建议要好得多。
但是,ss现在您可以更直接地获取该信息。此命令显示连接到 Xorg 的 unix(本地)套接字:
sudo ss -x src "*/tmp/.X11-unix/*"
Run Code Online (Sandbox Code Playgroud)
您可能需要试验过滤器部分以使其在您的环境中工作。单独进行实验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
Run Code Online (Sandbox Code Playgroud)
输出看起来像这样:
8 "slack"
8 "code"
7 "brave"
5 "kded5"
2 "kwin_x11"
2 "ksmserver"
2 "kscreen_backend"
1 "zoom"
1 "zim"
:
Run Code Online (Sandbox Code Playgroud)
当我在遇到“达到最大客户端数”问题时运行此命令时,此搜索显示了 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
Run Code Online (Sandbox Code Playgroud)