41 votes

Comment puis-je diagnostiquer/déboguer les erreurs "nombre maximal de clients atteints" X ?

Je rencontre un problème où X empêche les processus de créer des fenêtres, en disant quelque chose comme ce qui suit dans ~/.xsession-errors:

cannot open display: :0.0
Maximum number of clients reached

En cherchant un peu, il y a beaucoup d'exemples de personnes confrontées à ce problème, et parfois les gens identifient quel programme ils exécutent qui utilise tous les emplacements des clients. Voir par exemple LP 70872 (Firefox), LP 263211 (gnome-screensaver).

Pour ce que ça vaut, j'utilise gnome-terminal, thunderbird, chromium-browser, empathy, tomboy et virtualbox presque tout le temps, en plus des éléments normaux que vous obtenez avec le bureau GNOME, et occasionnellement quelques autres morceaux.

Cependant, ma question n'est pas "quel de mes programmes cause ce problème" mais plutôt, comment peut-on diagnostiquer ce problème?

Dans les bugs, rapports de forum, etc., un certain nombre d'outils sont suggérés:

  • xlsclients - liste les applications clientes pour l'affichage donné, mais je ne pense pas que cela corresponde aux 'clients X'
  • xrestop - un outil de ressources X de style top, une ligne par client X. Beaucoup de clients '' ne sont pas affichés dans la sortie de xlsclients
  • xwininfo -root -children liste les objets de fenêtre X

D'après ce que j'ai pu comprendre, le problème pourrait ne pas être un trop grand nombre de clients, mais plutôt des ressources conservées dans le serveur X pour des clients qui se sont détachés depuis longtemps. Mais il semblerait aussi que vous ne pouvez (facilement?) relier les ressources X à leur client. Peut-on diagnostiquer efficacement ce problème une fois qu'il est survenu, ou est-ce qu'une approche laborieuse de divis et conquiers pour les applications que j'exécute est la seule voie qui s'offre à moi?

Mise à jour Janv 2011: Je pense avoir résolu ce problème. Pour le bénéfice de quiconque tomberait dessus, nautilus et/ou compiz ou quelque chose dans cette chaîne de logiciels plantait à cause d'un fond d'écran que j'avais. J'avais choisi un fichier XML comme fond d'écran, qui définissait une galerie d'images en rotation. C'était fait à la main, mais basé sur /usr/share/backgrounds/contest/background-1.xml ou similaire. Désactiver le fond d'écran et je n'ai pas eu de crash depuis.

Je ne marque pas encore cela comme résolu, car le problème spécifique réel n'était pas ma question, mais comment le diagnostiquer l'était. Malheureusement, c'était principalement un jeu de devinettes, ce qui est ennuyeux.

5voto

J'ai la même question, car je pense que ce problème est important pour toute personne qui ne redémarre pas souvent son ordinateur. Une chose que j'ai vraiment aimée à propos de UNIX/Linux/Ubuntu au fil des ans est que je peux utiliser mon ordinateur portable de manière fiable pendant des mois sans redémarrer (suspendre uniquement), sauf lorsque j'installe un nouveau noyau. Depuis la mise à niveau vers le "suite" Maverick (Ubuntu 10.10), j'ai rencontré ce problème et je ne peux utiliser mon ordinateur que pendant une semaine.

J'ai également essayé 'xrestop'; j'ai arrêté les effets de fenêtre compiz (qui ralentissaient la fuite de ressources), mais je ne peux toujours pas comprendre pourquoi cela se produit. C'est presque comme être de retour sur une machine WinXP... :-(

Donc oui! De meilleurs outils de débogage X seraient bienvenus. Un problème avec 'xrestop' est qu'il nécessite également des ressources, donc une fois que vous atteignez la limite, même lui ne fonctionnera pas.

Comme conseil à ceux qui sont bloqués par cela (par exemple : lorsque vous reprenez depuis la veille et attendez la fenêtre de mot de passe qui ne s'affichera jamais car il n'y a pas assez de ressources pour la créer), passer à un terminal de framebuffer (Ctrl-Alt-F1, puis Ctrl-Alt-F7) semble libérer quelques ressources critiques.

Doug

4voto

Viktor Klang Points 14826

Voici quelques expériences de débogage de ce problème sur Ubuntu 16.04.

En effet, xlsclients semble rapporter des nombres incorrects : même lorsque le débogueur montre que Xorg atteint la limite MaxClients (par exemple 256), xlsclients | wc -l rapporte un nombre beaucoup plus bas (par exemple 164 clients). Je ne suis pas sûr des clients exclus par xlsclients, mais sa sortie n'est pas utile pour détecter la cause des erreurs "Nombre maximum de clients atteint".

lsof -U semble également donner des résultats incomplets : il ne signale que certaines des connexions clients, mais pas toutes. Il signale uniquement les connexions qui utilisent le fichier de socket abstrait @/tmp/.X11-unix/X0; mais il y a beaucoup plus de connexions (affichées comme type sock avec la description "protocole : UNIX") qui n'apparaissent pas dans lsof -U. Je n'ai trouvé aucun drapeau lsof qui limite l'affichage à ces sockets; mais au moins ils sont affichés si vous listez tous les fichiers ouverts pour un processus.

Ainsi, cette commande semble donner un compte assez précis des connexions clients :

lsof -p $(pgrep Xorg) | grep -E 'X11-unix|(protocole : UNIX)' | wc -l

Seulement partiellement lié : il semble que la dernière version de Firefox (72) ouvrira pour chaque nouvelle instance 2 connexions qui apparaîtront comme @/tmp/.X11-unix/X0, et 6 autres supplémentaires qui apparaîtront comme protocole : UNIX. Et chaque nouvel onglet ouvrira 2 autres sockets du type protocole : UNIX. Ainsi, avec de nombreuses instances et onglets de Firefox, vous pouvez atteindre assez facilement la limite de 256 MaxClients.

2voto

tronda Points 1201

Chromium/Chrome a quelques problèmes connus qui entraînent ce message d'erreur. Utilisez-vous l'extension Lastpass?

réf: http://www.ngohaibac.com/how-to-solve-maximum-number-of-clients-reached-gtk-warning-cannot-open-display-in-ubuntu-9-10-64-bit/

0voto

blahster Points 218

Je fais : lsof -U et j'observe beaucoup d'instances de vlc.

Pour résoudre mon problème, j'exécute :

killall vlc

0voto

MattyG Points 5126

lsof -U montre un grand nombre d'instances de xcape.

tuer xcape résout le problème.

Maintenant je peux à nouveau utiliser rofi et tor-browser.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X