LINUX.ORG.RU

Утечка памяти в иксах из-за psi

 , , ,


1

3

Помогите поймать баг и составить багрепорт(или исправить проблему).

Пока что я точно знаю, что именно из-за psi иксы со временем начинают жрать огромное количество памяти, но хотелось бы как-то более точно локализовать проблему.

Как выяснил, что из-за psi утечка.

После того, как заметил, что память течёт, стал проверять систему. Среди прочего нарисовал вот такой вот скрипт:

#!/bin/bash

PROGRAM=$1
PID=$(ps -C $PROGRAM -o pid=)
TIME=$(date +%Y%m%d%H%M%S)
LOGFILE="${PROGRAM}-${TIME}.log"
TIMEOUT="60"

while true
do
        TIME=$(date +%d.%m.%Y\ %H:%M:%S)
        MEMORY=$(ps -p $PID -o size=)
        echo "[ $TIME ]: $PROGRAM memory usage: $MEMORY Kb"
        echo "[ $TIME ]: $PROGRAM memory usage: $MEMORY Kb" >> $LOGFILE
        sleep $TIMEOUT
done

Вот, как выглядит выхлоп этого скрипта в нормальном состоянии:

$ bash find_leek-1.0.sh X
[ 26.03.2013 19:51:42 ]: X memory usage: 26416 Kb
[ 26.03.2013 19:52:42 ]: X memory usage: 26416 Kb
[ 26.03.2013 19:53:42 ]: X memory usage: 26416 Kb
[ 26.03.2013 19:54:42 ]: X memory usage: 26416 Kb
[ 26.03.2013 19:55:42 ]: X memory usage: 26416 Kb
Со временем, конечно, тоже слегка подтекает, но не критично. Десяток-второй метров в неделю - это для меня мелочи. А вот так оно ведёт себя, когда запущен psi:
[ 19.11.2012 01:05:46 ]: X memory usage: 36960 Kb
[ 19.11.2012 01:06:46 ]: X memory usage: 36960 Kb
[ 19.11.2012 01:07:46 ]: X memory usage: 36960 Kb
[ 19.11.2012 01:08:46 ]: X memory usage: 36960 Kb
[ 19.11.2012 01:09:46 ]: X memory usage: 37224 Kb
[ 19.11.2012 01:10:46 ]: X memory usage: 37620 Kb                                                                                                                                                          
[ 19.11.2012 01:11:46 ]: X memory usage: 38148 Kb                                                                                                                                                          
[ 19.11.2012 01:12:46 ]: X memory usage: 38544 Kb                                                                                                                                                          
[ 19.11.2012 01:13:46 ]: X memory usage: 38940 Kb                                                                                                                                                          
[ 19.11.2012 01:14:46 ]: X memory usage: 39468 Kb                                                                                                                                                          
[ 19.11.2012 01:15:46 ]: X memory usage: 39864 Kb 
Обратите внимание на 01:09:46. Примерно в это время пришло сообщение от кого-то. Потихоньку память забивалась, вплоть до:
[ 19.11.2012 04:22:49 ]: X memory usage: 202752 Kb
[ 19.11.2012 04:23:49 ]: X memory usage: 203544 Kb
[ 19.11.2012 04:24:49 ]: X memory usage: 204336 Kb
[ 19.11.2012 04:25:49 ]: X memory usage: 205128 Kb
[ 19.11.2012 04:26:49 ]: X memory usage: 206052 Kb
[ 19.11.2012 04:27:49 ]: X memory usage: 206844 Kb
[ 19.11.2012 04:28:49 ]: X memory usage: 207636 Kb
[ 19.11.2012 04:29:49 ]: X memory usage: 208560 Kb
[ 19.11.2012 04:30:49 ]: X memory usage: 209352 Kb
[ 19.11.2012 04:31:49 ]: X memory usage: 210144 Kb
[ 19.11.2012 04:32:49 ]: X memory usage: 211068 Kb
[ 19.11.2012 04:33:49 ]: X memory usage: 211860 Kb
[ 19.11.2012 04:34:49 ]: X memory usage: 411308 Kb
Т.е. до двухсот метров он сам натикал, а потом в 04:34:49 я открыл это сообщение и виден скачок потребления памяти в два раза!

Как видно по датам, тесты веду давно, ошибка у меня повторяется стопроцентно.

Попробовал натравить strace на psi, но тут уже моих навыков недостаточно, чтобы найти ошибку. Вот кусок лога. Там именно такого повторяется очень много, но моих знаний недостаточно, чтобы понять, что это значит.

На данный момент версии софта такие: xorg-server 1.13.1, nvidia-drivers 313.26, qt 4.8.4, kde 4.5.9, psi 0.14-r4(флаг extra выключен; с ним проблема так же проявлялась и я отключил его, решив, что проблема может быть как раз в psi-plus-патчах - не помогло). Дистрибутив Gentoo. С каких версий начала проявляться проблема, сложно сказать, но в стабильном дебиане с fluxbox всё нормально, в тестируемом с kde тоже всё отлично.

Какие есть идеи? Что ещё можно проверить? И, если писать багрепорт, то кому - авторам psi, иксов, qt, kde или nvidia?

P.S. Пока что использую kopete, но хочется вернуться на psi. Как-то он теплее и ламповее.

И, если писать багрепорт, то кому - авторам psi, иксов, qt, kde или nvidia?

Psi, а там уже пусть разбираются. Предварительно поискав похожие баги, разумеется

anonymous
()
Ответ на: Шозахерня от Deleted

Большое спасибо, но ты сам-то читал, что там написано? Давай-ка расскажи, каких шагов из того, что предложено там для отслеживания ошибки я не сделал.

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

Я пока нашёл похожие баги только для psi-plus(то, что в gentoo отключается юз-флагом extras, что я и сделал, но проблема не исчезла). Ну и плюс к этому всё, что мне удалось найти, касается версии 0.15 и в дебиане. На гитхабе в трекере пси по ключевым словам memory и leak багов нет.

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

Большое спасибо, но ты сам-то читал, что там написано?

Пожалуйста, разумеется.

Давай-ка расскажи, каких шагов из того, что предложено там для отслеживания ошибки я не сделал.

А ты разве переcобирал своё psi с флагом debug, фичей nostrip и -ggdb в С- и СXXFLAGS? А в gdb тоже трейсил?

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

Пока не пересобрал, потому что есть один небольшой момент. Полный лог strace до появления ошибки(т.е. до скачка потребления памяти в два раза, течёт-то он постоянно и кусок лога я выложил) занимает, к примеру, 2 с половиной гига в несжатом состоянии. Ковыряться в таком количестве отладочной информации я не осилю и выкладывать куда-то это целиком тоже проблемно. Пока я сделал всё, что можно для отлова ошибки. Если никто такого не встречал и не появится идей, что ещё можно сделать средствами, так сказать, простого пользователя, то тогда уже буду закапываться дальше.

Если бы всё было так просто, то я бы точно быстренько сделал всё по готовой HOWTO, а не экспериментировал сам.

shell-script ★★★★★
() автор топика
Последнее исправление: shell-script (всего исправлений: 2)
Ответ на: комментарий от shell-script

Без debug и nostrip разраб скорее всего сольёт это в корзину.

imul ★★★★★
()

В общем, пересобрал с дебагом, запустил через gdb, буду ждать.

Если у кого есть ещё какие-нибудь идеи, буду рад выслушать.

Да. Отдельно хочу ещё раз уточнить - течёт память у иксов при запущенном psi, а не у него самого.

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

Разумеется, много. Я бы на твоём месте связался с разрбом по ирке или по почте, сообщил ситуацию, а он уже скажет, где брейкпойнты ставить и не будет лога в два гига.

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

А вот по ссылке в комментариях как раз сказано, что мантейнер появился и ник у него Pinkbyte.

Это случайно не местный Pinkbyte?

shell-script ★★★★★
() автор топика

P.S. Пока что использую kopete, но хочется вернуться на psi. Как-то он теплее и ламповее.

отключи анимацию значка в трее -__-

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

Если проблема окажется в этом, то это жесть. :)

Сейчас уже для очистки совести дождусь, чего там gdb надебажит(кстати, течь уже начало потихоньку), а потом попробую.

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

я почему-то его сторонился по-началу... как-то он не в первых строчках стоял в списке жаббер-клиентов... а потом задолбали эти бесконечные «собрать/настроить/доставить плагины» в пси и пси+. Взял и попробовал. :)

bvn13 ★★★★★
()
Ответ на: комментарий от shell-script

по ссылке в комментариях как раз сказано, что мантейнер появился и ник у него Pinkbyte.

 * net-im/psi [gentoo]
Herd:        net-im (net-im@gentoo.org)
Herd:        proxy-maintainers (proxy-maint@gentoo.org)
Maintainer:  nikoli@lavabit.com (Nikoli)
Upstream:    None specified
Homepage:    http://psi-im.org/
Location:    /usr/portage/net-im/psi
Keywords:    0.14-r4:0: amd64 hppa ppc ppc64 x86
Keywords:    0.15:0: ~amd64 ~arm ~hppa ~ppc ~ppc64 ~x86 ~x86-fbsd
Keywords:    9999:0: 

Как видишь, я не являюсь мэйнтэйнером. Тем не менее не буду отрицать - ебилд на 0.15 закоммитил именно я. Потому что лучше рабочий ебилд без фич Psi+ чем угроза выпиливания Psi из главного дерева

Pinkbyte ★★★★★
()
Последнее исправление: Pinkbyte (всего исправлений: 1)
Ответ на: комментарий от anonymous

Это устаревшая информация и паника была поднята зря: местный контингент был не в курсе моих договоренностей с Gentoo Qt team. Я уговорил их не только отложить выпиливание Psi из дерева, но также пообещал лично заняться ебилдом.

Pinkbyte ★★★★★
()

В общем, предварительные результаты дебага ничего не дали.

Собрал psi вот так:

USE="${USE} debug" FEATURES="nostrip" CFLAGS="-O1 -pipe -ggdb" CXXFLAGS="${CFLAGS}" emerge -v psi
Далее запустил и на протяжении нескольких часов получил только это:
$ gdb --args /usr/bin/psi
GNU gdb (Gentoo 7.5.1 p2) 7.5.1
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-pc-linux-gnu".
For bug reporting instructions, please see:
<http://bugs.gentoo.org/>...
Reading symbols from /usr/bin/psi...Reading symbols from /usr/bin/psi.debug...done.
done.
(gdb) run
Starting program: /usr/bin/psi 
warning: Could not load shared library symbols for linux-vdso.so.1.
Do you need "set solib-search-path" or "set sysroot"?
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib64/libthread_db.so.1".
[New Thread 0x7ffff58d3700 (LWP 26356)]
[New Thread 0x7fffeffff700 (LWP 26357)]
qca-gnupg: disabling keyring monitoring due to buggy Qt version
Unknown signature value:  668 
Unknown signature value:  668 
Unknown signature value:  669 
Unknown signature value:  795 
Unknown signature value:  795 
Unknown signature value:  795 
Unknown signature value:  668 
Unknown signature value:  668 
Unknown signature value:  668 
Unknown signature value:  668 
Unknown signature value:  668 
Unknown signature value:  668 
Unknown signature value:  668 
Unknown signature value:  668 
Unknown signature value:  668 
Unknown signature value:  795 
Unknown signature value:  668 
Unknown signature value:  7 
Unknown signature value:  795 
Unknown signature value:  668 
[New Thread 0x7fffed32c700 (LWP 26363)]
Accessing missing option options.ui.mac.use-brushed-metal-windows
Accessing missing option options.ui.mac.use-brushed-metal-windows
Accessing missing option options.ui.mac.use-brushed-metal-windows
Accessing missing option options.ui.mac.use-brushed-metal-windows
"capsmanager.cpp: Disco to 'gyzma13@gmail.com/TalkGadget5A1CC402' at node 'http://talkgadget.google.com/client/caps#vavinvite-v1' failed." 
Accessing missing option options.ui.mac.use-brushed-metal-windows
Accessing missing option options.ui.mac.use-brushed-metal-windows
[New Thread 0x7fffe6754700 (LWP 26720)]
[Thread 0x7fffe6754700 (LWP 26720) exited]
[New Thread 0x7fffe6754700 (LWP 26721)]
Iconset::load("/usr/share/psi/iconsets/roster/README"): Failed to load iconset.xml
[Thread 0x7fffe6754700 (LWP 26721) exited]
[New Thread 0x7fffe6754700 (LWP 26725)]
Iconset::load("/usr/share/psi/iconsets/system/README"): Failed to load iconset.xml
[Thread 0x7fffe6754700 (LWP 26725) exited]
Ошибки, показанные в этом выхлопе связаны с теми моментами, когда я сам рылся в настройках запущенного приложения.

Потребление памяти, фиксируемое моим скриптом слегка увеличилось, но незначительно. Мне писали в это время случайно, писали по моему запросу, сам я тоже со своего жаббер-сервера уже тестировал это дело. В дебаге не могу поймать ошибку.

shell-script ★★★★★
() автор топика
Ответ на: комментарий от Pinkbyte

Спасибо за поддержку ебилда.

А описанной у меня ошибки не встречал? Или может там где в changelog'ах или репортах видел? Я попробую завтра воткнуть 0.15 и посмотреть. Пока что ещё продолжу дебаг, мало ли чего, может выдаст какую-нить ошибку.

shell-script ★★★★★
() автор топика
Ответ на: комментарий от bvn13

Vacuum-IM не на PSI, никогда не был на нем и не будет. Хватит уже.

bhfq ★★★★★
()
Ответ на: комментарий от shell-script

GDB (без address sanitizer) не предназначен для отлова ошибок подобного рода, он может быть полезен только если программа падает.

Тут может быть полезен http://code.google.com/p/address-sanitizer/wiki/AddressSanitizer (то есть собирать придется шлангом). Но и то утечки памяти у тебя в иксах, а не в самом процессе PSI. (Санитизить иксы, незнаю, возможно и взлетит такая идея.)

bhfq ★★★★★
()
Последнее исправление: bhfq (всего исправлений: 1)
Ответ на: комментарий от bhfq

А блин вспомнил же. http://software.intel.com/en-us/intel-vtune-amplifier-xe под линукс бесплатная версия для некоммерческого использования. Покажет хотспот функций кода которые очень наглеют по отношению к ресурсам.

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

Можешь чуть подробнее объяснить?

Если я правильно тебя понял, то для отлова этой ошибки мне нужно будет

1. Поставить clang

2. Скомпилить им psi и, возможно, иксы(а за ними и кусок системы).

3. Запустить это все дело по отдельности в gdb.

Не уверен, что осилю подобное.

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

Есть другой вариант. Установи этот сабж http://software.intel.com/en-us/intel-vtune-amplifier-xe он бинарный. Собери PSI дебажный, запусти amplifier, а уже из него запускай пси. Воспроизведи утечку памяти в иксах, выйти из PSI как обычно (не убивай процесс). Amplifier нарисует графики.

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

Nikoli тоже считает, что не надо. Как подготовит новую ревизию(чтобы вернуть Psi+), тогда и это отсмотрим

Pinkbyte ★★★★★
()
Ответ на: комментарий от shell-script

Не встречал. Но я сидел на снапшот-ебилдах 0.15 из оверлея rion(сейчас, т.к. снапшоты протухли - сижу на -9999 оттуда же)

Pinkbyte ★★★★★
()

gdb
утечки памяти

Valgrind, норкоманы!

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

И действительно. С выключенной анимацией в трее ошибки нет. Два дня гонял.

Это в версии 0.14. На днях попробую собрать последнюю, проверю, появляется ли там баг или уже исправили. Если появляется, буду писать разработчикам. Так хотя бы понятно, в какой части ошибка.

Спасибо всем за подсказки. В этот раз, похоже, мне не придётся с дебаггерами бороться, но на будущее информация интересная.

shell-script ★★★★★
() автор топика
Ответ на: комментарий от snoopcat

хехе, у меня постоянно воспроизводится такой баг:

1. В трее висит psi+ (из транка собирал месяц-два назад), сообщений нет

2. Через SMPlayer смотрю в fullscreen сериал в 1080p или 720p.

3. Кто-то пишет из «Вконтакте», в трее значёк Psi+ превращается в анимированный

4. В SMPlayer начинаются дикие визуальные лаги или даже полностью зависает картинка, но само приложение отзывчивое, звук идёт нормально, перемотка работает.

5. При переключении SMPlayer в оконный режим лаги чудесным образом исчезают.

6. Читаю сообщение в Psi+, переключаю SMPlayer в fullscreen и продолжаю смотреть дальше. До следующего сообщения.

Вот поэтому Psi+ порой вырубаю при просмотре видео, если это не 3-4 ночи, когда никто не пишет.

KDE 4.10.1, KWin + OpenGL, воспроизведение видео через xv, видеодрайвер Catalyst 13.1

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

Присоединяюсь к предыдущему оратору. Заметил также, что любая анимация в трее затормаживает фулскрин. Поэтому поотключал все анимированые иконки в трее. По ходу это очередная багофича Qt+nvidia-blob.

Delirium_veritas
()
Ответ на: комментарий от Chaser_Andrey

Проверил.

Да, с анимацией есть такой глюк. После отключения всё нормально. Надо будет поискать, что там на багтрекере KDE, есть такая бага или нет.

shell-script ★★★★★
() автор топика
Ответ на: комментарий от snoopcat

Дык неудобно в остальное время без анимации — она привлекает внимание при новом сообщении, т.к. звуковые сообщения отключены, а статическая картинка малозаметна. Надо решать проблему, а не искать обходные пути.

/me полез в баг-треккер

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

Надо решать проблему, а не искать обходные пути.

Разумеется, надо решать. Отключение анимации - временный костыль, чтобы работать можно было.

Если найду багрепорт, сразу отпишу. Вечером смотреть буду.

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