我遇到了一个问题,即 X 阻止进程创建窗口,说出类似以下内容~/.xsession-errors
:
cannot open display: :0.0
Maximum number of clients reached
搜索周围有很多人面临这个问题的例子,有时人们会确定他们正在运行的程序正在使用所有客户端插槽。参见例如 LP 70872 (Firefox)、 LP 263211 (gnome-screensaver)。
对于它的价值,我几乎一直在运行 gnome-terminal、thunderbird、chromium-browser、empathy、tomboy 和 virtualbox,除了您使用 GNOME 桌面获得的正常内容之外,偶尔还会运行一些其他零碎的东西。
但是我的问题不是“我的哪个程序导致了这个问题”,而是如何诊断这个问题?
在上述(和其他)错误、论坛报告等中,建议使用一些工具:
xlsclients
- 列出给定显示的客户端应用程序,但我认为这与“X 客户端”不对应xrestop
- 顶级风格的 X 资源工具,每个 X 客户端一行。许多''客户,未显示在xlsclients
输出中xwininfo -root -children
列出 X 窗口对象
据我所知,问题可能根本不是太多的客户端,而是 X 服务器中为长期分离的客户端保留的资源。但是您似乎也不能(很容易?)将 X 资源与他们的客户相关联。一旦它开始发生,一个人能否有效地诊断这个问题,或者对于我运行的应用程序来说,一种乏味的分而治之的方法是唯一对我开放的方法?
2011 年 1 月更新:我想我已经解决了这个问题。为了任何偶然发现此问题的人的利益,nautilus 和/或 compiz 或该软件链中的某些东西由于我拥有的墙纸而出现了段错误。我选择了一个 XML 文件作为我的墙纸,它定义了一个旋转的图像画廊。它是手工制作的,但基于 /usr/share/backgrounds/contest/background-1.xml 或类似文件。禁用墙纸,从那以后我就没有崩溃过。
我还没有将此标记为已回答,因为实际的具体问题不是我的问题,而是如何诊断它。不幸的是,这主要是反复试验,这很糟糕。
我设法解决了这个“死锁”,其中没有一个 x-tools 工作,因为它们也需要连接到 X 服务器,通过使用
lsof -U
which 列出正在使用套接字文件的进程。在这个例子中,它是一个错误的启动脚本,它产生了新的“badproc”进程越界。
示例输出
lsof -U
:我有同样的问题,因为我认为这个问题对于不经常重启计算机的人来说很重要。多年来,我真正喜欢 UNIX/Linux/Ubuntu 的一件事是,我可以可靠地运行笔记本电脑数月而无需重新启动(仅暂停),除非我安装了新内核。自从升级到 Maverick (Ubuntu 10.10) 的“套件”后,我遇到了这个问题,只能运行一周。
我也试过'xrestop';停止了compiz窗口效果(减慢了资源泄漏),但仍然无法找出发生这种情况的原因。这几乎就像回到 WinXP 机器上...... :-(
所以是的!更好的 X 调试工具会很好。'xrestop' 的一个问题是它也需要资源,所以一旦你碰壁,即使它也不会运行。
作为对其他被此卡住的人的提示(例如:从待机状态恢复并等待永远不会出现的密码窗口,因为没有资源可以创建它),切换到帧缓冲终端并返回(Ctrl-Alt- F1,然后是 Ctrl-Alt-F7)似乎释放了一些关键资源。
道格
以下是在 Ubuntu 16.04 上调试此问题的一些经验。
Indeed
xlsclients
报告的数字似乎不正确:即使调试器显示 Xorg 达到 MaxClients 限制(例如 256),xlsclients | wc -l
报告的数字也会低得多(例如 164 个客户端)。我不确定哪些客户端被 忽略了xlsclients
,但它的输出对于检测“已达到最大客户端数”错误的原因没有用处。lsof -U
也出现给出不完整的结果:它只报告一些客户端连接,但不是全部。它只报告使用抽象@/tmp/.X11-unix/X0
套接字文件的连接;但是还有更多的连接(显示为sock
带有描述“协议:UNIX”的类型)没有出现在lsof -U
. 我还没有找到任何lsof
限制显示这些套接字的标志;但如果您列出进程的所有打开文件,至少会显示它们。所以这个命令似乎给出了一个很好的客户端连接计数:
lsof -p $(pgrep Xorg) | grep -E 'X11-unix|(protocol: UNIX)' | wc -l
仅部分相关:看起来最新的 Firefox (72) 将为每个新实例打开 2 个显示为 的连接
@/tmp/.X11-unix/X0
,以及另外 6 个显示为 的连接protocol: UNIX
。protocol: UNIX
每个新标签都会再打开 2 个该类型的套接字。因此,对于许多 Firefox 实例和选项卡,您可以非常可靠地达到 256 MaxClients 的限制。Chromium/Chrome 存在一些导致此错误消息的已知问题。您使用 Lastpass 扩展程序吗?
参考:http ://www.ngohaibac.com/how-to-solve-maximum-number-of-clients-reached-gtk-warning-cannot-open-display-in-ubuntu-9-10-64-bit/
lsof -U
显示大量的 xcape 实例。kill xcape
解决这个问题。现在我可以再次使用 rofi 和 tor-browser 了。
我做:
lsof -U
我观察了很多 vlc 实例。为了解决我的问题,我执行:
与openoffice面临同样的问题,它是因为内存(RAM),
尝试关闭所有终端(包括应用程序),如果没有工作尝试
sudo reboot now