How would I find infos about why Plasma freezes sometimes on my system?

Plasmashell freezes on my computer on a regular basis. Sometimes for a few seconds, sometimes a few minutes, once 45 minutes.

Problem is, I don’t know what triggers it, and I’d like to submit a useful bug report.

I looked at the journalctl logs, but it only shows a big ol’ slice of nothing during the time when Plasma was frozen.

Any suggestions?

what does swapon say and how much ram do you have?

you can use `sudo dmesg -w to show a running account of what is happening (or not happening).

you can use sudo journalctl -b -1 -p3 to show you any critical log entries from the last boot

Also take note of what applications you have running at the time, not just the one you’re currently using.

Make sure your system is up to date.

Include some extra hardware and environment detail in your post. People with similar setups may have encountered similar issues. inxi -zv8 would be my recommendation.

There is a debugging guide here: Plasma/Debugging - KDE Community Wiki

when the system journal is empty during a plasmashell freeze, check the user session side:

journalctl --user -u plasma-plasmashell -b --no-pager

coredumpctl list | tail

leave sudo dmesg -w running in a terminal so the next freeze has live timestamps. if it lines up with disk thrash, free -h / iostat 1 during one helps more than an empty journal.

swapon returns

NAME TYPE SIZE USED PRIO
/swapfile file 8G 6,6G -1

I have 8 GiB of RAM (7.4 GiB usable) per kinfo.

I don’t think the boot entries are that relevant, but I’ll keep it in mind.

I already did journalctl /usr/bin/plasmashell --since "2026-08-28 21:30:00" --until "2026-08
-28 22:00:00"
which was the empty one I mentioned in the OP

would yours return a significantly different outcome?

Will do!

Now I just have to wait for the next noticeable freeze. Thanks for the suggestions.

yeah those two journalctl forms can differ. `/usr/bin/plasmashell` only filters by that binary path. `–user -u plasma-plasmashell` pulls the user systemd unit, which sometimes catches service restarts and related units the path filter misses. if both are empty during a freeze, the journal just isnt getting anything from plasmashell while its stuck.

the bigger thing in what you pasted though: 8g ram and 6.6g already used in the swapfile. that alone will freeze plasma for seconds to minutes when something page-faults hard. next freeze, run `free -h` and `vmstat 1` in another tty. if swap USED keeps climbing and si/so are busy, bump ram or cut whatever is chewing memory before chasing a plasmashell bug.

Okay, I doubled my swapfile.

Now, I wait and see.

So I had another freeze, dmesg’s few messages around the freeze were

[Sat Sep 26 16:44:35 2026] pcieport 0000:00:1c.5:   device [8086:9d15] error status/mask=00000001/00002000
[Sat Sep 26 16:44:35 2026] pcieport 0000:00:1c.5:    [ 0] RxErr                  (First)
[Sat Sep 26 16:47:21 2026] pcieport 0000:00:1c.5: AER: Correctable error message received from 0000:00:1c.5
[Sat Sep 26 16:47:21 2026] pcieport 0000:00:1c.5: PCIe Bus Error: severity=Correctable, type=Physical Layer, (Receiver ID)
[Sat Sep 26 16:47:21 2026] pcieport 0000:00:1c.5:   device [8086:9d15] error status/mask=00000001/00002000

and journalctl said (4 times in a row):

plasmashell[935]: time out polling for icon of window "{5604661f-4362-
4e7f-b9b3-dddf7a90f5c4}"

There were also a few errors from a plasmoid, but it’s not essential so I removed it for now (also I only added long after I started having these freezes).

ETA: my swap is less than 1/3 full right now.

Is it literally just Plasma that’s freezing? As in, panels and the desktop freeze, while the pointer can still be moved, apps can be interacted with, and stuff provided by KWin (e.g. the Meta+W Overview effect) remain un-frozen?

Yes. KWin is 100% functional, including scripts and effects, so are the applications.

Great. When plasmashell is frozen, get a backtrace of what it’s doing:

  1. sudo gdb attach $(pidof plasmashell)
  2. Press c
  3. type bt
  4. Copy and paste here what appears after “bt”.

And if plasmashell only freezes too briefly for you to complete the above, you can do:

  1. kill -QUIT $(pidof plasmashell)
  2. gdb plasmashell /var/lib/systemd/coredump/<the latest core file>
  3. Continue from the step 3 above.

#0 0x00007fefb70a0952 in ??? () at /usr/lib/libc.so.6
#1 0x00007fef744735fb in ??? () at /usr/lib/qt6/plugins/sqldrivers/../../../libsqlite3.so.0
#2 0x00007fef7448dd11 in ??? () at /usr/lib/qt6/plugins/sqldrivers/../../../libsqlite3.so.0
#3 0x00007fef7448e14b in ??? () at /usr/lib/qt6/plugins/sqldrivers/../../../libsqlite3.so.0
#4 0x00007fef74493d3f in ??? () at /usr/lib/qt6/plugins/sqldrivers/../../../libsqlite3.so.0
#5 0x00007fef74498319 in ??? () at /usr/lib/qt6/plugins/sqldrivers/../../../libsqlite3.so.0
#6 0x00007fef744b725b in ??? () at /usr/lib/qt6/plugins/sqldrivers/../../../libsqlite3.so.0
#7 0x00007fef744bb4c4 in sqlite3_step () at /usr/lib/qt6/plugins/sqldrivers/../../../libsqlite3.so.0
#8 0x00007fef7c7bdfc6 in ??? () at /usr/lib/qt6/plugins/sqldrivers/libqsqlite.so
#9 0x00007fef7c7c24a4 in ??? () at /usr/lib/qt6/plugins/sqldrivers/libqsqlite.so
#10 0x00007fefae30f341 in ??? () at /usr/lib/libQt6Sql.so.6
#11 0x00007fefae48c945 in KActivities::Stats::ResultSet::ResultSet(KActivities::Stats::Query) ()
at /usr/lib/libPlasmaActivitiesStats.so.1
#12 0x00007fefae49693d in ??? () at /usr/lib/libPlasmaActivitiesStats.so.1
#13 0x00007fefb79eeff3 in ??? () at /usr/lib/libQt6Core.so.6
#14 0x00007fefb79eeff3 in ??? () at /usr/lib/libQt6Core.so.6
#15 0x00007fefb7a0146f in QTimer::timerEvent(QTimerEvent*) () at /usr/lib/libQt6Core.so.6
#16 0x00007fefb79e6b49 in QObject::event(QEvent*) () at /usr/lib/libQt6Core.so.6
#17 0x00007fefb9d0325f in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /usr/lib/libQt6Widgets.so.6
#18 0x00007fefb79822b8 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () at /usr/lib/libQt6Core.so.6
#19 0x00007fefb7b648f5 in QTimerInfoList::activateTimers() () at /usr/lib/libQt6Core.so.6
#20 0x00007fefb7c9a439 in ??? () at /usr/lib/libQt6Core.so.6
#21 0x00007fefb6333c76 in ??? () at /usr/lib/libglib-2.0.so.0
#22 0x00007fefb6335ed7 in ??? () at /usr/lib/libglib-2.0.so.0
#23 0x00007fefb6336055 in g_main_context_iteration () at /usr/lib/libglib-2.0.so.0
#24 0x00007fefb7c96f32 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) ()
at /usr/lib/libQt6Core.so.6
#25 0x00007fefb798f664 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () at /usr/lib/libQt6Core.so.6
#26 0x00007fefb798685a in QCoreApplication::exec() () at /usr/lib/libQt6Core.so.6
#27 0x000055d9ad61b613 in ??? ()
#28 0x00007fefb7027781 in ??? () at /usr/lib/libc.so.6
#29 0x00007fefb70278b9 in __libc_start_main () at /usr/lib/libc.so.6
#30 0x000055d9ad61be05 in ??? ()

bt stuck in libsqlite3 means plasmashell is blocked on a db lock/query for me

when it freezes again:
-lsof -p $(pidof plasmashell) | grep -iE ‘.db|sqlite’
-ls -l ~/.local/share/kactivitymanagerd/resources/database
-ls -l ~/.local/share/baloo/

id try turning activity tracking off for a bit (System Settings → Workspace Behavior → Activities → Privacy) and see if the freezes calm down. if lsof points at the activities db that matches.

plasma-workspace debug symbols + another gdb bt would name those ??? frames too.

Yep, that’s already helpful. It looks like something is going wrong with the Activities database.

If you can install debug symbols for Qt, KActivities, and KActivitiesStats and do it again, the backtrace of what it’s doing will become even more helpful and actionable.

I found the debug symbols for plasma-workspaces, Kactivities and Kactivities-stats, but “pacman -Ss qt debug” returns a bunch of results. I went with qt6-base-debug, but I’m not 100% certain it’s this one.

don’t mean to hijack, just trying to understand.

if i use kill -QUIT $(pidof kate) to kill an open kate window

it does kill the window, but my /var/lib/systemd/coredump is still empty

—

eventually, i found my core dump files in /var/lib/apport/coredump

my system is set not to generate core dumps with ulimit -c set to 0 … and when i set it to unlimited and open a new terminal window, it returns 0

so to force a core dump i had to do the following:

  • open a terminal
  • start kate from the command line kate some/path/to/afile
  • set ulimit -c unlimited
  • run kill -QUIT $(pidof kate)

then i would get the file

/var/lib/apport/coredump/core._usr_bin_kate.1000.e852cbbe-b488-4eaa-beed-80c26ccc7602.130038.4940414

that i could send to sudo gdb and use the bt command.

sample backtrace
#0  0x000075e325d1b79d in __GI___poll (fds=0x570e2be9bf60, nfds=8, timeout=10829) at ../sysdeps/unix/sysv/linux/poll.c:29
#1  0x000075e324573b4e in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#2  0x000075e324513ad3 in g_main_context_iteration () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#3  0x000075e326735279 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) ()
   from /lib/x86_64-linux-gnu/libQt5Core.so.5
#4  0x000075e3266d6a7b in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /lib/x86_64-linux-gnu/libQt5Core.so.5
#5  0x000075e3266df3e8 in QCoreApplication::exec() () from /lib/x86_64-linux-gnu/libQt5Core.so.5
#6  0x0000570e2839c3d7 in ?? ()
#7  0x000075e325c2a1ca in __libc_start_call_main (main=main@entry=0x570e2839ae50, argc=argc@entry=2, 
    argv=argv@entry=0x7ffc32534ea8) at ../sysdeps/nptl/libc_start_call_main.h:58
#8  0x000075e325c2a28b in __libc_start_main_impl (main=0x570e2839ae50, argc=2, argv=0x7ffc32534ea8, init=<optimized out>, 
    fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7ffc32534e98) at ../csu/libc-start.c:360
#9  0x0000570e2839e7c5 in ?? ()

edit: found that running kate /etc/security/limits.conf

and inserting the line

* hard core unlimited

into the file, saving and rebooting should enable core file creation for all users (including root).

testing now: brb

welp, i was wrong… that didn’t work… ulimit -c still reports 0

soes i tries the make a .d file route and called it

/etc/security/limits.d/30-core-limits.conf

with the following contents

# this file was created by me to enable the system to generate core dumps when using
# kill -QUIT $(pidof kate) to quit out of a stalled or crashed kate session
# the core dump files can then be found in /var/lib/apport/coredump
# this should be equivalent  to using  ulimit -c unlimited on the command line

*    soft    core    unlimited

and that worked

ulimit -c now reports unlimited and when i have a file opened in kate i can go to a terminal and type kill -QUIT $(pidof kate) which will generate a new core file in /var/lib/apport/coredump

I’m not ghosting this thread, I had no noticeable freeze since my last message.

I followed @nite_route ’s advice and disable tracking in all my activities, and then enabled it again, maybe it’s because of that.

I have a fairly old Plasma setup (it hasn’t changed much since the Plasma 5 days), so maybe doing that removed some old data that wasn’t playing well with modern Kactivities.

If a freeze happens again, I’ll post here again.

@ngraham And I got another freeze. Here’s the backtrace:

#0  0x00007f52958a08f2 in ??? () at /usr/lib/libc.so.6
#1  0x00007f52958f195a in pread64 () at /usr/lib/libc.so.6
#2  0x00007f52456725fb in ??? () at /usr/lib/qt6/plugins/sqldrivers/../../../libsqlite3.so.0
#3  0x00007f524568cd11 in ??? () at /usr/lib/qt6/plugins/sqldrivers/../../../libsqlite3.so.0
#4  0x00007f524568d14b in ??? () at /usr/lib/qt6/plugins/sqldrivers/../../../libsqlite3.so.0
#5  0x00007f5245692d3f in ??? () at /usr/lib/qt6/plugins/sqldrivers/../../../libsqlite3.so.0
#6  0x00007f5245696d15 in ??? () at /usr/lib/qt6/plugins/sqldrivers/../../../libsqlite3.so.0
#7  0x00007f5245697019 in ??? () at /usr/lib/qt6/plugins/sqldrivers/../../../libsqlite3.so.0
#8  0x00007f52456b4adb in ??? () at /usr/lib/qt6/plugins/sqldrivers/../../../libsqlite3.so.0
#9  0x00007f52456ba4c4 in sqlite3_step () at /usr/lib/qt6/plugins/sqldrivers/../../../libsqlite3.so.0
#10 0x00007f526c0dcfc6 in QSQLiteResultPrivate::fetchNext
(this=this@entry=0x562e7f667eb0, values=..., idx=idx@entry=0, initialFetch=initialFetch@entry=true)
at /usr/src/debug/qt6-base/qtbase/src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp:281
#11 0x00007f526c0e14a4 in QSQLiteResult::exec (this=)
at /usr/src/debug/qt6-base/qtbase/src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp:570
#12 0x00007f528cd68341 in qInit (q=0x7ffdd45509d0, q@entry=0x7ffdd4550a10, query=..., db=...)
at /usr/src/debug/qt6-base/qtbase/src/sql/kernel/qsqlquery.cpp:286
#13 0x00007f528cd683d2 in QSqlQuery::QSqlQuery (this=0x7ffdd4550a10,
this@entry=0x7ffdd45509d0, query=..., db=..., this=, query=, db=)
at /usr/src/debug/qt6-base/qtbase/src/sql/kernel/qsqlquery.cpp:300
#14 0x00007f528cee5945 in Common::Database::Private::query (this=, query=...)
at /usr/src/debug/plasma-activities-stats/plasma-activities-stats-6.7.5/src/common/database/Database.cpp:111
#15 Common::Database::execQuery (this=, query=...)
at /usr/src/debug/plasma-activities-stats/plasma-activities-stats-6.7.5/src/common/database/Database.cpp:217
#16 KActivities::Stats::ResultSetPrivate::initQuery (this=0x562e812dd340)
at /usr/src/debug/plasma-activities-stats/plasma-activities-stats-6.7.5/src/resultset.cpp:135
#17 KActivities::Stats::ResultSet::ResultSet
(this=this@entry=0x7ffdd4550b18, queryDefinition=..., this=, queryDefinition=...)
at /usr/src/debug/plasma-activities-stats/plasma-activities-stats-6.7.5/src/resultset.cpp:550
#18 0x00007f528ceef93d in KActivities::Stats::ResultModelPrivate::fetch (this=0x562e7e52a5d0, from=0, count=30)
at /usr/src/debug/plasma-activities-stats/plasma-activities-stats-6.7.5/src/resultmodel.cpp:682
#19 0x00007f52961eeff3 in QtPrivate::QSlotObjectBase::call
(this=0x562e7e5c2940, r=, a=0x7ffdd4550cc0, this=, r=, a=) at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qobjectdefs_impl.h:462
#20 doActivate (sender=0x562e7e52a648, signal_index=9, argv=0x7ffdd4550cc0)
at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qobject.cpp:4393
#21 0x00007f52961eeff3 in QtPrivate::QSlotObjectBase::call
--Type  for more, q to quit, c to continue without paging--
out>) at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qobjectdefs_impl.h:462
#22 doActivate (sender=0x562e7e903bd8, signal_index=3, argv=0x7ffdd4550e10) at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qobject.cpp:4393
#23 0x00007f529620146f in QMetaObject::activate<void, QTimer::QPrivateSignal> (sender=, mo=, local_signal_index=0, ret=0x0)
at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qobjectdefs.h:320
#24 QTimer::timeout (this=, _t1=...) at /usr/src/debug/qt6-base/build/src/corelib/Core_autogen/include/moc_qtimer.cpp:182
#25 QTimer::timerEvent (e=, this=) at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qtimer.cpp:332
#26 QTimer::timerEvent (this=, e=) at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qtimer.cpp:326
#27 0x00007f52961e6b49 in QObject::event (this=, e=) at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qobject.cpp:1455
#28 0x00007f529850325f in QApplicationPrivate::notify_helper (this=, receiver=0x562e7e903bd8, e=0x7ffdd4550fb0) at /usr/src/debug/qt6-base/qtbase/src/widgets/kernel/qapplication.cpp:3273
#29 0x00007f52961822b8 in QCoreApplication::notifyInternal2 (receiver=0x562e7e903bd8, event=0x7ffdd4550fb0) at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qcoreapplication.cpp:1126

#30 0x00007f52963648f5 in QCoreApplication::sendEvent (receiver=, event=0x7ffdd4550fb0) at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qcoreapplication.cpp:1571
#31 QTimerInfoList::activateTimers (this=0x562e7bf1f510) at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qtimerinfo_unix.cpp:427
#32 0x00007f529649a439 in timerSourceDispatch (source=) at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qeventdispatcher_glib.cpp:153
#33 0x00007f5294b2f75e in ??? () at /usr/lib/libglib-2.0.so.0
#34 0x00007f5294b38c50 in ??? () at /usr/lib/libglib-2.0.so.0
#35 0x00007f5294b38db5 in g_main_context_iteration () at /usr/lib/libglib-2.0.so.0
#36 0x00007f5296496f32 in QEventDispatcherGlib::processEvents (this=0x562e7bee4d60, flags=...) at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qeventdispatcher_glib.cpp:402
#37 0x00007f529618f664 in QEventLoop::processEvents (this=0x7ffdd4551270, flags=...) at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qeventloop.cpp:109
#38 QEventLoop::exec (this=0x7ffdd4551270, flags=...) at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qeventloop.cpp:198
#39 0x00007f529618685a in QCoreApplication::exec () at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qcoreapplication.cpp:1469
#40 0x00007f52984ffb7a in QApplication::exec () at /usr/src/debug/qt6-base/qtbase/src/widgets/kernel/qapplication.cpp:2543
#41 0x0000562e77dd0613 in main (argc=, argv=) at /usr/src/debug/plasma-workspace/plasma-workspace-6.7.5/shell/main.cpp:204