LINUX.ORG.RU

Найти неряшливое иксовое приложение.


0

0

В продолжение темы XFCE. «Maximum number of clients reached».

Возникла проблема: какая-то программа устанавливает соединения с X-сервером и не закрывает их. После двухнедельного аптайма перестаёт работать ряд функций WM. Перезагрузкой иксов успешно лечится, но хотелось бы найти виновную программу.

  1. Каким образом можно посмотреть число соединений с работающими программами?
  2. Закрываются ли эти соединения при выходе из программы?
  3. Если программа не отображается по ps -A, значит ли это, что все её соединения закрыты?
  4. Научился ли X.org увеличивать число доступных соединений на лету (8 лет назад не умел, новее информации не нашёл)?
  5. Если на эти вопросы нет однозначных ответов, то можно ли дать такой ответ для программ на Qt3, Qt4 и GTK2?

Подозреваемые программы: Goldendict, Qbittorrent, XFCE-Terminal, Thunar, Thunderbird, апплеты XFCE: netload, cpugraph, systemload, mount, mixer, clipman, sensors, screenshot, xkb.

Если ответ на 3-й вопрос «нет», к списку добавляются OpenOffice, Firefox, DosBox, WINE, Bouml, Inkscape, Gimp, Audacity, DjView, ePDFviewer, Mirage.

★★★★★

можно попробовать понаблюдать с помощью xrestop , я правда не знаю насколько это будет информативно и насколько поможет

Sylvia ★★★★★
()
Ответ на: комментарий от Sylvia

> xrestop

Спасибо. А на который пункт в выдаче
xrestop -b -m 1
обратить внимание? Там есть:
res_base
   res_mask
   windows
   GCs
   fonts
   pixmaps
   pictures
   glyphsets
   colormaps
   passive grabs
   cursors
   unknowns
   pixmap bytes
   other bytes
   total bytes
Что означают GCs и passive grabs? Остальные — явно не то.

question4 ★★★★★
() автор топика
Ответ на: комментарий от anonymous

> А перезапуском всех подозреваемых программ лечится?

1. Как перезапускать апплеты без перезапуска XFCE и без удаления вручную с последующим ручным же добавлением? Вручную не годится потому, что так теряются настройки.

2. Перезапуск GoldenDict помог. На полчаса. Ранее эта же версия работала неделями. Скорее всего, течёт не он один, а что-то течёт гораздо сильнее. И это приводит к 3-му вопросу:

3. Как узнать, какая программа установила сколько соединений? Потому что пока я тыкаюсь вслепую. Нашёл описание похожих симптомов, но ту программу 2 года как починили, и у меня её нет и не было.

question4 ★★★★★
() автор топика

s/screenshot/screenshooter/

question4 ★★★★★
() автор топика
Ответ на: комментарий от iSage

> на 2) - убить xfce4-panel и запустить заного.

А как убедиться, что течёт именно один из апплетов, без 2-недельного ожидания?

question4 ★★★★★
() автор топика
Ответ на: комментарий от question4

думаю, что никак. только дождаться повторения и смотреть по xrestop на сколько упадет кол-во коннектов при убивании панели

iSage ★★★★
()
Ответ на: комментарий от iSage

> смотреть по xrestop на сколько упадет кол-во коннектов

Какой пункт в xrestop смотреть? Как обозначаются коннекты?

question4 ★★★★★
() автор топика

Можно просто сделать netstat -xp и посмотреть, какой программе принадлежит большинство всех соединений.

ikm ★★
()
Ответ на: комментарий от ikm

> Можно просто сделать netstat -xp и посмотреть, какой программе принадлежит большинство всех соединений.

Как эту таблицу анализировать? Я правильно понимаю, что с ключом -x выводятся не только соединения с X-сервером? Нужны только те процессы, за номером I-Node которых следует номер, которому соответствует имя программы X и путь «@/tmp/.X11-unix/X0» ? Колонка RefCnt на что-нибудь влияет?

Из соседних с X программ по 2 раза встретились dbus-launch и xfrun4. Это нормально, или уже неправильно?

question4 ★★★★★
() автор топика
Ответ на: комментарий от question4

Интересно. После закрытия golgendict, nenstat продолжал его показывать ещё с минуту. Это тоже в пределах нормы?

question4 ★★★★★
() автор топика
Ответ на: комментарий от question4

> Я правильно понимаю, что с ключом -x выводятся не только соединения с X-сервером?

Да, выводятся все соединения с unix-сокетами.

Как эту таблицу анализировать?

Там есть имя программы — достаточно посчитать, сколько раз оно встречается во всем списке. Похоже, что для каждого соединения есть отдельная строчка для самого X, и отдельная строчка для приложения. Так это или нет, по-моему неважно. Если кто-то создает миллион соединений, его сразу будет видно.

ikm ★★
()
Ответ на: комментарий от ikm

Кажется, нашёл. 2 часа назад Thunderbird занимал 4 сокета, сейчас уже 7. Подожду ещё пару дней...

question4 ★★★★★
() автор топика
Ответ на: комментарий от question4

> Интересно. После закрытия golgendict, nenstat продолжал его показывать ещё с минуту. Это тоже в пределах нормы?

да, нормально. точнее, он висел еще время равное 2*MSL.

val-amart ★★★★★
()
Ответ на: комментарий от val-amart

> он висел еще время равное 2*MSL

Maximum Segment Lifetime? Спасибо.

question4 ★★★★★
() автор топика

Да, это оказался Thunderbird. Точнее — дополнение «Minimixe to Tray Plus». На каждое сворачивание окна в трей оно создаёт 1 дополнительный сокет, на каждое разворачивание — ещё 3. Автор знает про баг и обещает исправить в следующем релизе: http://codefisher.org/forum/viewtopic.php?id=653

Спасибо всем за попытки помочь, а особенно ikm за правильный способ поиска.

question4 ★★★★★
() автор топика

> Если программа не отображается по ps -A, значит ли это, что все её соединения закрыты?

Если программа не отображается по ps -A, то она и вовсе не запущена.

drull ★☆☆☆
()
Ответ на: комментарий от drull

> Если программа не отображается по ps -A, то она и вовсе не запущена.

Я спрашивал, остаются ли сокеты открыты после закрытия программы-клиента. Правильно ли я понял, что её исчезновение из списка ps -A означает закрытие всех сокетов (немедленное или через несколько минут)?

question4 ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.