2019-04-07 04:21:41 |
ԜаӀtеr Ⅼарсһуnѕkі |
description |
lxqt-session had multiple gigabytes RSS memory.
It seems to be related to what else is running at the time. In my case, it was playing a game. Similar report: https://github.com/lxqt/lxqt/issues/442
`valgrind --leak-check yes` didn't think these were unreachable leaks:
==29251== HEAP SUMMARY:
==29251== in use at exit: 579,390 bytes in 13,710 blocks
==29251== total heap usage: 761,288 allocs, 747,578 frees, 2,257,247,645 bytes allocated
[...]
==29251== LEAK SUMMARY:
==29251== definitely lost: 10,392 bytes in 58 blocks
==29251== indirectly lost: 15,727 bytes in 209 blocks
==29251== possibly lost: 0 bytes in 0 blocks
==29251== still reachable: 553,271 bytes in 13,443 blocks
==29251== suppressed: 0 bytes in 0 blocks
==29251== Reachable blocks (those to which a pointer was found) are not shown.
==29251== To see them, rerun with: --leak-check=full --show-leak-kinds=all
(those under-a-megabyte numbers are all much smaller than the gigabyte-size leak.)
`valgrind --tool=massif` shows memory growth as linear, and reports most of it here:
--------------------------------------------------------------------------------
n time(i) total(B) useful-heap(B) extra-heap(B) stacks(B)
--------------------------------------------------------------------------------
81 10,818,324,116 2,585,012,840 2,575,948,310 9,064,530 0
82 10,857,711,051 2,593,973,776 2,584,877,698 9,096,078 0
99.65% (2,584,877,698B) (heap allocation functions) malloc/new/new[], --alloc-fns, etc.
->99.61% (2,583,820,288B) 0x59C7730: QArrayData::allocate(unsigned long, unsigned long, unsigned long, QFlags<QArrayData::AllocationOption>) (qarraydata.cpp:118)
| ->98.95% (2,566,770,242B) 0x59C967E: QByteArray::QByteArray(int, Qt::Initialization) (qarraydata.h:222)
| | ->98.95% (2,566,736,443B) 0x5A31700: QRingBuffer::reserve(long long) (qringbuffer_p.h:77)
| | | ->98.95% (2,566,736,443B) 0x5B0880E: QProcessPrivate::tryReadFromChannel(QProcessPrivate::Channel*) (qprocess.cpp:1020)
| | | ->98.95% (2,566,724,080B) 0x5B08CCE: QProcess::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) (qprocess.cpp:1081)
| | | | ->98.95% (2,566,724,080B) 0x5B986D9: QMetaObject::activate(QObject*, int, int, void**) (qobject.cpp:3771)
| | | | ->98.95% (2,566,724,080B) 0x5BA3F17: QSocketNotifier::activated(int, QSocketNotifier::QPrivateSignal) (moc_qsocketnotifier.cpp:136)
| | | | ->98.95% (2,566,724,080B) 0x5BA425F: QSocketNotifier::event(QEvent*) (qsocketnotifier.cpp:266)
| | | | ->98.95% (2,566,724,080B) 0x4EA049F: QApplicationPrivate::notify_helper(QObject*, QEvent*) (qapplication.cpp:3727)
| | | | ->98.95% (2,566,724,080B) 0x4EA7ADE: QApplication::notify(QObject*, QEvent*) (qapplication.cpp:3486)
| | | | ->98.95% (2,566,724,080B) 0x5B6F497: QCoreApplication::notifyInternal2(QObject*, QEvent*) (qcoreapplication.cpp:1048)
| | | | ->98.95% (2,566,724,080B) 0x5BC1D68: socketNotifierSourceDispatch(_GSource*, int (*)(void*), void*) (qcoreapplication.h:234)
| | | | ->98.95% (2,566,724,080B) 0x76D8C3C: g_main_context_dispatch (gmain.c:3182)
| | | | ->98.95% (2,566,724,080B) 0x76D8ED6: g_main_context_iterate.isra.26 (gmain.c:3920)
| | | | ->98.95% (2,566,724,080B) 0x76D8F6A: g_main_context_iteration (gmain.c:3981)
| | | | ->98.95% (2,566,719,959B) 0x5BC1141: QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (qeventdispatcher_glib.cpp:423)
| | | | | ->98.95% (2,566,719,959B) 0xB471E4F: QPAEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (qeventdispatcher_glib.cpp:69)
| | | | | ->98.95% (2,566,719,959B) 0x5B6E169: QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (qeventloop.cpp:214)
| | | | | ->98.95% (2,566,719,959B) 0x5B762E0: QCoreApplication::exec() (qcoreapplication.cpp:1336)
| | | | | ->98.95% (2,566,719,959B) 0x113C26: main (main.cpp:70)
I'm not too familiar with Qt, so I'm not sure how to interpret that. It looks like an event handler but none of the functions named there are obviously part of this application.
ProblemType: Bug
DistroRelease: Ubuntu 18.10
Package: lxqt-session 0.13.0-0ubuntu2
ProcVersionSignature: Ubuntu 4.18.0-17.18-generic 4.18.20
Uname: Linux 4.18.0-17-generic x86_64
NonfreeKernelModules: nvidia_modeset nvidia
ApportVersion: 2.20.10-0ubuntu13.2
Architecture: amd64
CurrentDesktop: LXQt
Date: Fri Apr 5 16:21:53 2019
ExecutablePath: /usr/bin/lxqt-session
InstallationDate: Installed on 2018-08-12 (236 days ago)
InstallationMedia: Ubuntu 18.04.1 LTS "Bionic Beaver" - Release amd64 (20180725)
ProcEnviron:
PATH=(custom, user)
XDG_RUNTIME_DIR=<set>
LANG=en_US.UTF-8
SHELL=/bin/bash
SourcePackage: lxqt-session
UpgradeStatus: Upgraded to cosmic on 2018-11-28 (128 days ago) |
STEPS TO REPRODUCE
0. Prepare a 100MB file, e.g. `dd if=/dev/urandom of=foo bs=1MB count=1`
1. Create a script to read the above file to standard output, i.e. `cat foo`
2. Monitor lxqt-session memory usage, using qps or `ps -C lxqt-session -F` (watch RSS)
3. Run the script through lxqt-panel or lxqt-runner
EXPECTED RESULTS
Memory is not allocated for the script.
ACTUAL RESULTS
Memory is allocated for the script and stays allocated.
AFFECTED VERSIONS
0.13.0-0ubuntu2
0.14.1-0ubuntu1 |
|