如何诊断/调试“达到的最大客户端数量”X错误?

我遇到了一个问题,即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月更新:我想我已经解决了这个问题。 为了任何绊脚石的人的利益,鹦鹉螺和/或compiz或该软件链中的某些东西因为我的壁纸而产生了分段。 我选择了一个XML文件作为我的壁纸,它定义了一个旋转的图像库。 它是手工制作的,但基于/usr/share/backgrounds/contest/background-1.xml或类似的。 禁用壁纸,我没有崩溃。

我没有将此标记为已回答,因为实际的具体问题不是我的问题,而是如何诊断它。 不幸的是,这主要是试错,这很糟糕。

我设法解决了这个“死锁”,其中没有任何x-tools工作,因为他们太需要连接到X服务器,使用lsof -U列出了使用套接字文件的进程。

在这个例子中,它是一个糟糕的启动脚本,它产生了新的“badproc”进程超出范围。

lsof -U输出示例:

 COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME badproc 4770 bohrax 3u unix 0xf3ba9540 13011 socket xfce4-ses 4773 bohrax 3u unix 0xf3bd21c0 13024 socket xfce4-ses 4773 bohrax 4u unix 0xf39ef000 13080 /tmp/.ICE-unix/4773 xfce4-ses 4773 bohrax 13u unix 0xf3bf81c0 13563 socket xfce4-ses 4773 bohrax 14u unix 0xf3bf8a80 13565 /tmp/orbit-bohrax /linc-12a5-0-78fe5c0776a06 xfce4-ses 4773 bohrax 15u unix 0xf3bf8e00 13568 /tmp/orbit-bohrax /linc-12a5-0-78fe5c0776a06 xfce4-ses 4773 bohrax 16u unix 0xf3b411c0 13580 /tmp/.ICE-unix/4773 xfce4-ses 4773 bohrax 17u unix 0xf0074380 13688 /tmp/.ICE-unix/4773 xfce4-ses 4773 bohrax 18u unix 0xf3b6e380 13621 /tmp/.ICE-unix/4773 xfce4-ses 4773 bohrax 21u unix 0xf0074c40 13778 /tmp/.ICE-unix/4773 badproc 4775 bohrax 1u unix 0xf3bd2540 13013 socket badproc 4781 bohrax 1u unix 0xf3bd2c40 13021 socket xfce-mcs- 4821 bohrax 3u unix 0xf3be5540 13456 socket xfce-mcs- 4821 bohrax 5u unix 0xf3ba98c0 13484 socket xfwm4 4827 bohrax 3u unix 0xf3be5a80 13573 socket xfwm4 4827 bohrax 4u unix 0xf3b41000 13579 socket Thunar 4831 bohrax 3u unix 0xf3b6b000 13598 socket Thunar 4831 bohrax 8u unix 0xf3b6be00 13613 socket Thunar 4831 bohrax 9u unix 0xf3b41e00 13617 socket Thunar 4831 bohrax 10u unix 0xf3b6e1c0 13620 socket Thunar 4831 bohrax 13u unix 0xf0022000 13643 socket gam_serve 4834 bohrax 4u unix 0xf3b6b540 13607 socket gam_serve 4834 bohrax 7u unix 0xf3b41c40 13614 socket gam_serve 4834 bohrax 8u unix 0xf0020000 13656 socket xfdesktop 4836 bohrax 3u unix 0xf3b6ee00 13652 socket xfdesktop 4836 bohrax 8u unix 0xf3be5000 13655 socket xfdesktop 4836 bohrax 9u unix 0xf0020540 13665 socket xfdesktop 4836 bohrax 10u unix 0xf0020380 13667 socket xfdesktop 4836 bohrax 13u unix 0xf0074000 13687 socket python 4837 bohrax 4u unix 0xf00208c0 13672 socket python 4837 bohrax 8u unix 0xf3b6bc40 13880 socket dbus-laun 4841 bohrax 3u unix 0xf3b6ec40 13627 socket dbus-laun 4841 bohrax 6u unix 0xf0022c40 13644 socket dbus-laun 4841 bohrax 8u unix 0xf3b6be00 13613 socket dbus-daem 4842 bohrax 3u unix 0xf00221c0 13640 socket dbus-daem 4842 bohrax 8u unix 0xf3b6be00 13613 socket dbus-daem 4842 bohrax 9u unix 0xf00228c0 13641 socket dbus-daem 4842 bohrax 10u unix 0xf0022a80 13642 socket dbus-daem 4842 bohrax 13u unix 0xf0022380 13646 socket dbus-daem 4842 bohrax 14u unix 0xf00201c0 13666 socket dbus-daem 4842 bohrax 15u unix 0xf3b41540 13796 socket dbus-daem 4842 bohrax 16u unix 0xf3bd28c0 13881 socket badproc 6314 bohrax 3u unix 0xde00d380 95944 socket badproc 6315 bohrax 1u unix 0xde00d540 95946 socket badproc 6322 bohrax 3u unix 0xde00d8c0 96515 socket badproc 6323 bohrax 1u unix 0xde00de00 96517 socket badproc 6330 bohrax 3u unix 0xdf7ea000 97181 socket badproc 6331 bohrax 1u unix 0xdf7ea540 97184 socket badproc 6338 bohrax 3u unix 0xdf7ea8c0 97736 socket badproc 6339 bohrax 1u unix 0xde0481c0 97737 socket badproc 6345 bohrax 3u unix 0xde048700 98209 socket badproc 6346 bohrax 1u unix 0xde0488c0 98210 socket badproc 6352 bohrax 3u unix 0xde048e00 98776 socket badproc 6353 bohrax 1u unix 0xde058000 98778 socket badproc 6359 bohrax 3u unix 0xde058700 99293 socket badproc 6360 bohrax 1u unix 0xde0588c0 99296 socket badproc 6367 bohrax 3u unix 0xde08c000 99841 socket badproc 6368 bohrax 1u unix 0xde08c540 99842 socket badproc 6375 bohrax 3u unix 0xde08c8c0 100365 socket badproc 6376 bohrax 1u unix 0xde058c40 100367 socket badproc 6383 bohrax 3u unix 0xde09d1c0 101008 socket badproc 6384 bohrax 1u unix 0xde09d540 101010 socket badproc 6392 bohrax 3u unix 0xde09dc40 101681 socket badproc 6393 bohrax 1u unix 0xdf70a1c0 101682 socket badproc 6400 bohrax 3u unix 0xdf70a380 102324 socket badproc 6401 bohrax 1u unix 0xdf70a700 102325 socket badproc 6409 bohrax 3u unix 0xdf70ae00 102982 socket badproc 6410 bohrax 1u unix 0xde0ce1c0 102984 socket badproc 6417 bohrax 3u unix 0xde0ce380 103556 socket badproc 6418 bohrax 1u unix 0xde0ce8c0 103561 socket badproc 6424 bohrax 3u unix 0xde0cee00 104133 socket badproc 6425 bohrax 1u unix 0xde0bd000 104135 socket badproc 6432 bohrax 3u unix 0xde0bd380 104716 socket badproc 6433 bohrax 1u unix 0xde0bd8c0 104717 socket badproc 6440 bohrax 3u unix 0xde120000 105280 socket badproc 6441 bohrax 1u unix 0xde120540 105285 socket badproc 6448 bohrax 3u unix 0xde1208c0 105907 socket badproc 6449 bohrax 1u unix 0xde0bdc40 105908 socket badproc 6456 bohrax 3u unix 0xf01701c0 106486 socket badproc 6457 bohrax 1u unix 0xf0170540 106488 socket badproc 6465 bohrax 3u unix 0xf0170c40 107123 socket badproc 6466 bohrax 1u unix 0xf0170e00 107126 socket badproc 6473 bohrax 3u unix 0xde140000 107774 socket badproc 6474 bohrax 1u unix 0xde140540 107778 socket badproc 6479 bohrax 3u unix 0xde1408c0 108239 socket badproc 6480 bohrax 1u unix 0xde1881c0 108240 socket badproc 6488 bohrax 3u unix 0xde188700 108825 socket badproc 6489 bohrax 1u unix 0xde1888c0 108828 socket badproc 6495 bohrax 3u unix 0xde188e00 109377 socket badproc 6496 bohrax 1u unix 0xde18f000 109379 socket badproc 6503 bohrax 3u unix 0xde18f380 109907 socket badproc 6504 bohrax 1u unix 0xde18f8c0 109909 socket badproc 6511 bohrax 3u unix 0xde1c8000 110488 socket badproc 6512 bohrax 1u unix 0xde1c8540 110489 socket badproc 6519 bohrax 3u unix 0xde1c88c0 111070 socket badproc 6520 bohrax 1u unix 0xde18fc40 111071 socket badproc 6527 bohrax 3u unix 0xde1fa1c0 111629 socket badproc 6528 bohrax 1u unix 0xde1fa540 111631 socket badproc 6531 bohrax 3u unix 0xde1fa8c0 111899 socket badproc 6532 bohrax 1u unix 0xde1fae00 111901 socket badproc 6535 bohrax 3u unix 0xde219000 111998 socket badproc 6536 bohrax 1u unix 0xde219540 112000 socket badproc 6539 bohrax 3u unix 0xde2198c0 112114 socket badproc 6540 bohrax 1u unix 0xde2431c0 112116 socket badproc 6547 bohrax 3u unix 0xde243380 112663 socket badproc 6548 bohrax 1u unix 0xde2438c0 112664 socket badproc 6555 bohrax 3u unix 0xde243c40 113256 socket badproc 6556 bohrax 1u unix 0xde251000 113258 socket badproc 6564 bohrax 3u unix 0xde251700 113931 socket badproc 6565 bohrax 1u unix 0xde2518c0 113932 socket badproc 6572 bohrax 3u unix 0xde291000 114525 socket badproc 6573 bohrax 1u unix 0xde291540 114526 socket badproc 6579 bohrax 3u unix 0xde291c40 115112 socket badproc 6580 bohrax 1u unix 0xde251c40 115113 socket badproc 6588 bohrax 3u unix 0xde274380 115733 socket badproc 6589 bohrax 1u unix 0xde274540 115738 socket 

我有同样的问题,因为我认为这个问题对于那些不经常重启计算机的人来说非常重要。 多年来我非常喜欢UNIX / Linux / Ubuntu的一件事是我可以可靠地运行我的笔记本电脑几个月而无需重启(仅暂停),除非我安装新内核。 升级到Maverick(Ubuntu 10.10)的“套件”后,我遇到过这种情况,只能运行一周。

我也试过’xrestop’; 停止了compiz窗口效果(减慢了资源泄漏),但仍然无法找出发生这种情况的原因。 这几乎就像回到了WinXP机器…… 🙁

所以是的! 更好的X调试工具会很好。 ‘xrestop’的一个问题是它也需要资源,所以一旦你碰壁,即使它不会运行。

作为对其他因此而陷入困境的人的提示(例如:从Standby恢复并等待因为没有资源创建它而永远不会出现的密码窗口时),切换到帧缓冲终端并返回(Ctrl-Alt- F1,然后是Ctrl-Alt-F7)似乎释放了一些关键资源。

道格

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和我观察了很多vlc实例。

为了解决我的问题,我执行:

 killall vlc 

lsof -U显示了大量的xcape实例。

kill xcape解决问题。

现在我可以再次使用rofi和tor-browser。