| Summary: | Plasma often hangs due to creating tons of QML components and over-consuming memory | ||
|---|---|---|---|
| Product: | [Plasma] plasmashell | Reporter: | kdeuzver <asdf-kd> |
| Component: | generic-performance | Assignee: | Plasma Bugs List <plasma-bugs-null> |
| Status: | RESOLVED WORKSFORME | ||
| Severity: | normal | CC: | aspotashev, ivan.cukic, kde, nate, nicolas.fella, notmart, ozonehelix |
| Priority: | NOR | Keywords: | efficiency-and-performance |
| Version First Reported In: | 6.2.5 | ||
| Target Milestone: | 1.0 | ||
| Platform: | Neon | ||
| OS: | Linux | ||
| Latest Commit: | Version Fixed/Implemented In: | ||
| Sentry Crash Report: | |||
|
Description
kdeuzver
2025-02-07 06:40:24 UTC
one thing that might be done while the plasma process is hang is to attach the gdb process to it then doing a backtrace: ps -C plasmashell -o pid h it will output the pid number then gdb attach pidnumber when is started up, hit ctrl+c then type bt it should output a full backtrace, it might be useful if gdb complains it has no permissions to attach to the process, it might be necessary to run this command beforehand: echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope Waiting for info until actionable 🐛🧹 ⚠️ This bug has been in NEEDSINFO status with no change for at least 15 days. Please provide the requested information, then set the bug status to REPORTED. If there is no change for at least 30 days, it will be automatically closed as RESOLVED WORKSFORME. For more information about our bug triaging procedures, please read https://community.kde.org/Guidelines_and_HOWTOs/Bug_triaging. Thank you for helping us make KDE software even better for everyone! Ok, i upgraded to 6.3.1 Now I caught it at least 3 times: https://fars.ee/1e5H.log pasting inline.
it catched it in the mid of a component creation. i wonder if there is some repeater that for some reason creates thousands and thousands of objects.
is ram usage of plasmashell unusually high when this freeze occurs?
#0 _int_malloc (av=av@entry=0x7f82c8e03ac0 <main_arena>, bytes=bytes@entry=32) at ./malloc/malloc.c:4336
iters = <optimized out>
nb = <optimized out>
idx = <optimized out>
bin = 0x7f82c8e03b60 <main_arena+160>
victim = 0x7f82c8e03b50 <main_arena+144>
size = <optimized out>
victim_index = <optimized out>
remainder = <optimized out>
remainder_size = <optimized out>
block = <optimized out>
bit = 32
map = 76
fwd = <optimized out>
bck = <optimized out>
tcache_unsorted_count = <optimized out>
tcache_nb = 48
tc_idx = 1
return_cached = <optimized out>
__PRETTY_FUNCTION__ = "_int_malloc"
#1 0x00007f82c8cad6f4 in __GI___libc_malloc (bytes=32) at ./malloc/malloc.c:3336
ar_ptr = 0x7f82c8e03ac0 <main_arena>
victim = <optimized out>
tbytes = <optimized out>
tc_idx = <optimized out>
__PRETTY_FUNCTION__ = "__libc_malloc"
#2 0x00007f82c97da6f1 in QArrayData::allocate(QArrayData**, long long, long long, long long, QArrayData::AllocationOption) ()
at /lib/x86_64-linux-gnu/libQt6Core.so.6
#3 0x00007f82c1a379bd in ??? () at /lib/x86_64-linux-gnu/libQt6QuickTemplates2.so.6
#4 0x00007f82c19f47e5 in QQuickAbstractButton::setAction(QQuickAction*) () at /lib/x86_64-linux-gnu/libQt6QuickTemplates2.so.6
#5 0x00007f82c19f5aba in QQuickAbstractButton::qt_metacall(QMetaObject::Call, int, void**) () at /lib/x86_64-linux-gnu/libQt6QuickTemplates2.so.6
#6 0x00007f82c1a18e2e in QQuickItemDelegate::qt_metacall(QMetaObject::Call, int, void**) () at /lib/x86_64-linux-gnu/libQt6QuickTemplates2.so.6
#7 0x00007f82ca89ba0e in QQmlObjectCreator::setPropertyBinding(QQmlPropertyData const*, QV4::CompiledData::Binding const*) ()
--Type <RET> for more, q to quit, c to continue without paging--
at /lib/x86_64-linux-gnu/libQt6Qml.so.6
#8 0x00007f82ca89d8f6 in QQmlObjectCreator::setupBindings(QFlags<QQmlObjectCreator::BindingMode>) () at /lib/x86_64-linux-gnu/libQt6Qml.so.6
#9 0x00007f82ca8a4f29 in QQmlObjectCreator::populateInstance(int, QObject*, QObject*, QQmlPropertyData const*, QV4::CompiledData::Binding const*) ()
at /lib/x86_64-linux-gnu/libQt6Qml.so.6
#10 0x00007f82ca899386 in QQmlObjectCreator::createInstance(int, QObject*, bool) () at /lib/x86_64-linux-gnu/libQt6Qml.so.6
#11 0x00007f82ca8968fd in QQmlObjectCreator::create(int, QObject*, QQmlInstantiationInterrupt*, int) () at /lib/x86_64-linux-gnu/libQt6Qml.so.6
#12 0x00007f82ca899b51 in QQmlObjectCreator::createInstance(int, QObject*, bool) () at /lib/x86_64-linux-gnu/libQt6Qml.so.6
#13 0x00007f82ca8968fd in QQmlObjectCreator::create(int, QObject*, QQmlInstantiationInterrupt*, int) () at /lib/x86_64-linux-gnu/libQt6Qml.so.6
#14 0x00007f82ca899b51 in QQmlObjectCreator::createInstance(int, QObject*, bool) () at /lib/x86_64-linux-gnu/libQt6Qml.so.6
#15 0x00007f82ca8968fd in QQmlObjectCreator::create(int, QObject*, QQmlInstantiationInterrupt*, int) () at /lib/x86_64-linux-gnu/libQt6Qml.so.6
#16 0x00007f82ca952968 in QQmlIncubatorPrivate::incubate(QQmlInstantiationInterrupt&) () at /lib/x86_64-linux-gnu/libQt6Qml.so.6
#17 0x00007f82ca9531e7 in QQmlEnginePrivate::incubate(QQmlIncubator&, QQmlRefPointer<QQmlContextData> const&) () at /lib/x86_64-linux-gnu/libQt6Qml.so.6
#18 0x00007f82c81cfef0 in ??? () at /lib/x86_64-linux-gnu/libQt6QmlModels.so.6
#19 0x00007f82caf109d8 in ??? () at /lib/x86_64-linux-gnu/libQt6Quick.so.6
#20 0x00007f82caefc7ff in ??? () at /lib/x86_64-linux-gnu/libQt6Quick.so.6
#21 0x00007f82caf09854 in ??? () at /lib/x86_64-linux-gnu/libQt6Quick.so.6
#22 0x00007f82cafad3af in ??? () at /lib/x86_64-linux-gnu/libQt6Quick.so.6
#23 0x00007f82caf08e9a in QQuickItemView::modelUpdated(QQmlChangeSet const&, bool) () at /lib/x86_64-linux-gnu/libQt6Quick.so.6
#24 0x00007f82caf16010 in ??? () at /lib/x86_64-linux-gnu/libQt6Quick.so.6
#25 0x00007f82c9876964 in ??? () at /lib/x86_64-linux-gnu/libQt6Core.so.6
#26 0x00007f82c81a5a27 in QQmlInstanceModel::modelUpdated(QQmlChangeSet const&, bool) () at /lib/x86_64-linux-gnu/libQt6QmlModels.so.6
#27 0x00007f82c81ccf5d in ??? () at /lib/x86_64-linux-gnu/libQt6QmlModels.so.6
#28 0x00007f82c81d2adc in ??? () at /lib/x86_64-linux-gnu/libQt6QmlModels.so.6
#29 0x00007f82c81d3e30 in QQmlDelegateModel::handleModelReset() () at /lib/x86_64-linux-gnu/libQt6QmlModels.so.6
#30 0x00007f82c98763e9 in ??? () at /lib/x86_64-linux-gnu/libQt6Core.so.6
#31 0x00007f82c9718857 in QAbstractItemModel::layoutChanged(QList<QPersistentModelIndex> const&, QAbstractItemModel::LayoutChangeHint) ()
at /lib/x86_64-linux-gnu/libQt6Core.so.6
#32 0x00007f825906d91f in ??? () at /usr/lib/x86_64-linux-gnu/qt6/qml/org/kde/plasma/private/kicker/libkickerplugin.so
#33 0x00007f825908d5ed in ??? () at /usr/lib/x86_64-linux-gnu/qt6/qml/org/kde/plasma/private/kicker/libkickerplugin.so
#34 0x00007f82c980385d in QObject::event(QEvent*) () at /lib/x86_64-linux-gnu/libQt6Core.so.6
#35 0x00007f82cba01158 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /lib/x86_64-linux-gnu/libQt6Widgets.so.6
#36 0x00007f82c98aefa0 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () at /lib/x86_64-linux-gnu/libQt6Core.so.6
#37 0x00007f82c98af9fd in QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) () at /lib/x86_64-linux-gnu/libQt6Core.so.6
--Type <RET> for more, q to quit, c to continue without paging--
#38 0x00007f82c9667a2f in ??? () at /lib/x86_64-linux-gnu/libQt6Core.so.6
#39 0x00007f82c7f1a5b5 in ??? () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
#40 0x00007f82c7f79717 in ??? () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
#41 0x00007f82c7f19a53 in g_main_context_iteration () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
#42 0x00007f82c966e6ef in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () at /lib/x86_64-linux-gnu/libQt6Core.so.6
#43 0x00007f82c98b14d3 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () at /lib/x86_64-linux-gnu/libQt6Core.so.6
#44 0x00007f82c98b2ffd in QCoreApplication::exec() () at /lib/x86_64-linux-gnu/libQt6Core.so.6
#45 0x00005b979563c453 in ??? ()
#46 0x00007f82c8c2a1ca in __libc_start_call_main (main=main@entry=0x5b979563b720, argc=argc@entry=2, argv=argv@entry=0x7ffd5b3c8bc8)
at ../sysdeps/nptl/libc_start_call_main.h:58
self = <optimized out>
result = <optimized out>
unwind_buf = {cancel_jmp_buf = {{jmp_buf = {140726134148040, 3876612357006281422, 2, 0, 100706605474648, 140199749177344, 3876612356966435534, 3833506226096687822}, mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x2, 0x7ffd5b3c8bc0}, data = {prev = 0x0, cleanup = 0x0, canceltype = 2}}}
not_first_call = <optimized out>
#47 0x00007f82c8c2a28b in __libc_start_main_impl
(main=0x5b979563b720, argc=2, argv=0x7ffd5b3c8bc8, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7ffd5b3c8bb8)
at ../csu/libc-start.c:360
#48 0x00005b979563c585 in ??? ()
(gdb) q
(In reply to Marco Martin from comment #5) > pasting inline. > it catched it in the mid of a component creation. i wonder if there is some > repeater that for some reason creates thousands and thousands of objects. > > is ram usage of plasmashell unusually high when this freeze occurs? I haven't noticed any jumps in RAM consumption (In reply to Marco Martin from comment #5) > is ram usage of plasmashell unusually high when this freeze occurs? Although today I caught a long plasmashell hang, and I have to say you are right, there is a large memory consumption by the plasmashell process - 2.8GB - during the hang. And then after the hang it goes down to 1.8GB. https://0x0.st/8_1p.jpg The process usually consumes about 1GB of memory, while not hanging https://0x0.st/8_Op.png I am noticing this too. where plasma panels will be unresponsive for 30-45 secs and launching apps and interacting with panels can be unresponsive. might be related to this issue this is the output I got when monitoring journamctl https://pastebin.com/DUFjLu8S I have upgraded to 6.3.4 but te hangs still occur. The only thing that helps me is kill 9 the plasma: ``` kill -9 `ps -C plasmashell -o pid h`; plasmashell --replace >& /dev/null & ``` Plasma hangs when saving any file in the ~/.local/share/applications folder, including mimeinfo.cache I have figured out what is going on with my KDE setup. plasmashell seems to have a race condition. if I interact with widgets while an app is starting up. plasmashell will freeze for a few seconds and then resume working. it can get bad if you have a bunch of apps set to autostart on the system. also if you have restore session enabled this is the output when I tested this with plasmashell just running in my terminal https://fars.ee/BmPU Ben, can you open a new bug report for that so we can track it separately? I ask because it's very likely not the same issue that kdeuzver is experiencing. Thanks! I'm not having this issue anymore it appears to be resolved sorry about that. I'll try and bug report correctly in the future (In reply to Ben from comment #16) > I'm not having this issue anymore it appears to be resolved sorry about > that. I'll try and bug report correctly in the future I thought it was related to this but I was wrong. Does it still happen in Plasma 6.4.5? 🐛🧹 ⚠️ This bug has been in NEEDSINFO status with no change for at least 15 days. Please provide the requested information, then set the bug status to REPORTED. If there is no change for at least 30 days, it will be automatically closed as RESOLVED WORKSFORME. For more information about our bug triaging procedures, please read https://community.kde.org/Guidelines_and_HOWTOs/Bug_triaging. Thank you for helping us make KDE software even better for everyone! 🐛🧹 This bug has been in NEEDSINFO status with no change for at least 30 days. Closing as RESOLVED WORKSFORME. |