LINUX.ORG.RU

Постепенный memory leak на на manjaro-awesome

 , , ,


1

2

Здравствуйте! Заметил, что иксы постепенно отъедают память в течение дня, пока полностью не забьют саму память и своп...
Заметил, что при перезагрузке Awesomw-WM (Ctrl+Super+R) память откушивается более интенсивно и это хорошо заметно в таких утилитах как htop. Наглядное демо.
Сам процесс: /usr/lib/Xorg :0 -seat seat0 -auth /run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch
Может это какой-то известный баг? И может можно что-то с этим сделать?

Непосредственно с иксов отжирание памяти или осом жирнеет? Может стоит collectgarbage() попробовать запустить(из lua prompt).

Если сами иксы жирнеют, то попробуй сменить версию.

raven_cler ★★
()

я бы подождал новое ядро, наверняка там все исправят

chenbr0
()

GC в Lua — кал. Нужно писать код так, чтобы он не жрал, что на Lua задачка занятная.

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

Коряво писанные виджеты текут, это проблема Lua. GC в Lua при вызове грохает ВСЕ таблицы, даже если они используются, потому делать collectgarbage() — стрелять себе в ногу.

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

Это позволит задетектить проблему, я ж не в конфиг прошу повесить.

Иксы так-то тоже периодически протекают в том же арче, манжаро как я понимаю от него не особо отличается.

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

Это позволит задетектить проблему, я ж не в конфиг прошу повесить.

Задетектить проблему позволит и простое awesome.restart(), если уж на то пошло.

Иксы так-то тоже периодически протекают в том же арче, манжаро как я понимаю от него не особо отличается.

Иксы чаще всего текут из-за compton/xcompmgr, за многие годы использования много раз убеждался в этом. Периодический SIGHUP не спасает, про SIGUSR не помню.

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

Не должно. Я долго тестил, и дефолт (почти) не течёт.

А вот виджеты нормально писать умеют не только лишь все, мало кто может это делать.

mord0d ★★★★★
()

отъедают память в течение дня, пока полностью не забьют саму память и своп

Что делаешь при исчерпании памяти? Повисает, срабатывает ядерный киллер? Как обрабатываешь нехватку памяти?

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

Иксы чаще всего текут из-за compton/xcompmgr, за многие годы использования много раз убеждался в этом

pacman -Ss compton
community/compton-conf 0.14.1-1 (lxqt) [installed]
    A graphical configuration tool for Compton X composite manager
community/picom 7.5-2 [installed]
    X compositor that may fix tearing issues

нууууу блииииин… и что делодь теперь? искать альтернативы?

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

picom (ex-compton) самый адекватный из WM-независимых

если без него утечки памяти не происходит - то экспериментируй с его настройками, или обратить к ним в гитхаб или в чятик

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

большинство случаев из жизни проще покрыть тупо используя https://awesomewm.org/apidoc/widgets/awful.widget.watch.html

(к тому же там можно base_widget заменить на что угодно типа https://awesomewm.org/apidoc/widgets/wibox.widget.progressbar.html или https://awesomewm.org/apidoc/widget_containers/wibox.container.radialprogressbar.html, просто потом надо будет соответственно callback тоже поменять под них)

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

почти в каждом виджет-паке есть какая-нибудь жесть типа глобальных переменных или чего-нибудь еще

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

честно говоря, не знаю – в отличии от арчика (https://git.archlinux.org/svntogit/community.git/tree/trunk?h=packages/awesome) там не понятно из чего они эти пакеты собирают, можно только на слово верить: https://forum.manjaro.org/t/how-to-find-the-source-codes-for-a-package/66331/8

для чистоты эксперимента можешь установить awesome-luajit-git или awesome-git из AUR-а и переименовать ~/.config/awesome/rc.lua в rc.lua.bak

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

picom

Я его пробовал пару недель назад, но он у меня так дико тормозит (в линуксах дела может обстоят лучше, но мне не повезло), что изображение просто встаёт колом, пока не грохнешь композитор.

Я юзаю tryone144/compton, он показал себя лучше остальных форков и оригинала, но вот с тирингом без видеокарты не справляется. В AUR он вроде был.

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

picom (ex-compton) самый адекватный из WM-независимых

Видимо, ему нужна видеокарта. Или линукс. Или линукс с видеокартой. На FreeBSD с i915 что с дефолтным конфигом, что с моим, оно перестаёт перерисовывать после запуска.

Ну и снова повторюсь: меньше всех форков течёт tryone144/compton.

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

большинство случаев из жизни проще покрыть тупо используя awful.widget.watch

Уже несколько месяцев собираюсь переписать свой виджет погоды с awful.spawn.easy_async()+gears.timer() на awful.widget.watch(). Но это совершенно ничего не меняет, потому пофиг. Можно было бы запользовать luasocket, но во время забора данных будет подлагивать.

к тому же там можно base_widget заменить на что угодно типа wibox.widget.progressbar или wibox.container.radialprogressbar, просто потом надо будет соответственно callback тоже поменять под них

Сейчас уже во многих виджетах это можно (я к штатному календарю прикрутил подсветку дат с тултипами, можно использовать для праздников). А вот с keyboardlayout пришлось немного извратиться, чтобы прикрутить замену текста (у меня us(dvorak-alt-intl) просто не помещается на вертикальную панель) и индивидуально назначить шрифт.

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

Всё равно понадобится хоть немного интеллекта и руки не из задницы. Заставить код течь — проще простого.

почти в каждом виджет-паке есть какая-нибудь жесть типа глобальных переменных или чего-нибудь еще

На код в этих виджет-паках страшно смотреть (пользоваться ещё страшнее). Они их даже тупо через luacheck не прогоняют.

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

awful.spawn.easy_async()+gears.timer() на awful.widget.watch()

технически ничего не поменяется, т.к. watch это и есть комбинация их двух + textbox или как там его

про виджеты это я так, к слову

Заставить код течь — проще простого.

единственная хитрость касательно утечек памяти, сборщика мусора и вот этого всего – это http://lua-users.org/wiki/WeakTablesTutorial

actionless ★★★★★
()
Последнее исправление: actionless (всего исправлений: 3)

собственно, вопрос топик стартеру всё еще остается, течет ли память с выключенным композитором или нет

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

технически ничего не поменяется

Ну и конструкция в коде виджета не особо изменится. Нагляднее или проще не станет.

про виджеты это я так, к слову

Я тоже просто поддерживаю беседу. ☺

единственная хитрость касательно утечек памяти, сборщика мусора и вот этого всего – это http://lua-users.org/wiki/WeakTablesTutorial

Можно и без этого, если код писать нормально. И по поводу GC в Lua у меня позиция однозначная.

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