mumble-voip / mumble

Mumble is an open-source, low-latency, high quality voice chat software.
https://www.mumble.info
Other
6.13k stars 1.1k forks source link

CPU usage stays at 100% if network is disconnected and then reconnected #2109

Open openAfre opened 8 years ago

openAfre commented 8 years ago

Setup: client: fedora23 stock 1.2.11 and latest github master

server: murmur fedora23 1.2.11 (server is only reachable through VPN)

Steps to reproduce: Connect to VPN Start mumble Connect to murmur Disconnect VPN Connect VPN => murmur process cpu load goes up to 100% on one CPU core.

running sudo perf top -p nnnnn shows: https://paste.gnome.org/pt1ap5bjn

openAfre commented 8 years ago

Same phenomenon is triggered if murmur server is switched without leaving and joining VPN. just switching murmur servers (both are running in the same VPN).

VPN Connected Start mumble Connected to murmur server 1 Switch to murmur server 2 (in the same VPN network) => CPU 100%

openAfre commented 8 years ago

Sometimes the CPU spike is happening only VPN Connected Start mumble Connected to VPN murmur server without a conversation wait for a certain amount of time => CPU 100%

client: Firewall setting is set to block

openAfre commented 8 years ago

I am not a C/C++ person but I would love to help. Please let me know how.

openAfre commented 8 years ago

perf top shows:

Samples: 73K of event 'cycles', Event count (approx.): 40214196830 Overhead Shared Object Symbol 8.12% libQt5Core.so.5.5.1 [.] QMetaObject::activate 7.15% [kernel] [k] __fget 5.63% libglib-2.0.so.0.4600.2 [.] g_mutex_lock 5.48% libglib-2.0.so.0.4600.2 [.] g_mutex_unlock 5.15% libQt5Core.so.5.5.1 [.] QMutex::lock 4.10% libQt5Core.so.5.5.1 [.] QMutex::unlock 3.76% [kernel] [k] fput 3.67% [kernel] [k] do_sys_poll 3.16% libglib-2.0.so.0.4600.2 [.] g_main_context_check 3.03% [kernel] [k] unix_poll 2.34% libglib-2.0.so.0.4600.2 [.] g_main_context_query 2.33% libQt5Core.so.5.5.1 [.] QCoreApplicationPrivate::sendThroughApplicationEventFilters 1.62% libQt5Widgets.so.5.5.1 [.] QApplication::notify 1.60% libQt5Core.so.5.5.1 [.] QCoreApplication::notifyInternal 1.60% [kernel] [k] sock_poll 1.43% libglib-2.0.so.0.4600.2 [.] g_main_context_prepare 1.11% libpthread-2.22.so [.] pthread_mutex_lock 1.09% libpthread-2.22.so [.] pthread_mutex_unlock 1.01% libQt5Widgets.so.5.5.1 [.] 0x00000000001ab3d6 1.00% [kernel] [k] fget_light 0.96% [kernel] [k] avc_has_perm 0.92% ld-2.22.so [.] _dl_update_slotinfo 0.79% [kernel] [k] entry_SYSCALL_64 0.76% [kernel] [k] entry_SYSCALL_64_after_swapgs 0.67% [kernel] [k] fdget 0.64% libQt5Core.so.5.5.1 [.] QMetaObject::cast 0.59% libQt5Core.so.5.5.1 [.] QObject::thread 0.57% libQt5Core.so.5.5.1 [.] QSocketNotifier::event 0.57% [kernel] [k] copy_user_enhanced_fast_string

openAfre commented 8 years ago

another time after quitting mumbe, starting again disconnecting from VPN and re-connecting I get: Samples: 49K of event 'cycles', Event count (approx.): 31404512231 Overhead Shared Object Symbol 8.34% libglib-2.0.so.0.4600.2 [.] g_mutex_unlock 8.34% libglib-2.0.so.0.4600.2 [.] g_mutex_lock 7.14% [kernel] [k] fget 4.64% libQt5Core.so.5.5.1 [.] QMutex::lock 4.47% [kernel] [k] fput 4.08% libQt5Core.so.5.5.1 [.] QMetaObject::activate 3.57% libglib-2.0.so.0.4600.2 [.] g_main_context_check 3.56% [kernel] [k] do_sys_poll 3.52% libQt5Core.so.5.5.1 [.] QMutex::unlock 2.77% [kernel] [k] unix_poll 2.46% libglib-2.0.so.0.4600.2 [.] g_main_context_query 1.70% libglib-2.0.so.0.4600.2 [.] g_main_context_prepare 1.69% libpthread-2.22.so [.] pthread_mutex_lock 1.55% [kernel] [k] sock_poll 1.53% libpthread-2.22.so [.] pthread_mutex_unlock 1.31% libpthread-2.22.so [.] _GIlibc_recvmsg 1.18% [kernel] [k] avc_has_perm 1.13% [kernel] [k] entry_SYSCALL_64 1.05% [kernel] [k] entry_SYSCALL_64_after_swapgs 0.95% libQt5Core.so.5.5.1 [.] QCoreApplicationPrivate::sendThroughApplicationEventFilters 0.94% libQt5Core.so.5.5.1 [.] QMetaObject::cast 0.93% libQt5Widgets.so.5.5.1 [.] QApplication::notify 0.82% [kernel] [k] copy_user_enhanced_fast_string 0.72% [kernel] [k] fget_light 0.63% libQt5Core.so.5.5.1 [.] QEventLoop::exec 0.63% libQt5Core.so.5.5.1 [.] QCoreApplication::notifyInternal 0.62% libQt5Widgets.so.5.5.1 [.] 0x00000000001ab3d6 0.61% [kernel] [k] mutex_lock 0.60% [kernel] [k] fdget 0.60% ld-2.22.so [.] _dl_update_slotinfo 0.58% libc-2.22.so [.] 0x00000000000f6fdd

mkrautz commented 8 years ago

Could you try attaching GDB to Mumble once it's using 100% CPU, and trace some of its signal invocations?

Something like this should do:

$ gdb -p `pidof mumble`
[...]
(gdb) set pagination off
(gdb) b QMetaObject::activate
(gdb) commands
> print (QMetaObject *)$rsi
> continue
> end
(gdb) continue

You should then see output like this:

Breakpoint 1, 0x00007f727473c3f4 in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) () from /usr/lib/x86_64-linux-gnu/libQtCore.so.4 $3321 = (QMetaObject *) 0x7f7274a8cc80 <QTimer::staticMetaObject>

Breakpoint 1, 0x00007f727473c3f4 in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) () from /usr/lib/x86_64-linux-gnu/libQtCore.so.4 $3329 = (QMetaObject *) 0x7f7274a8cbc0 <QSocketNotifier::staticMetaObject>

etc.

This would give us some idea about what could be going on.

openAfre commented 8 years ago

I am sorry about the slow answer.

the problem still exists if the firewall is set to block configuration.

this is part of the output: Breakpoint 1, 0x00007faebaff6a70 in QMetaObject::activate(QObject, QMetaObject const, int, void*) () from /lib64/libQt5Core.so.5 $7596 = (QMetaObject ) 0x7faebb40dec0 QSocketNotifier::staticMetaObject

Breakpoint 1, 0x00007faebaff5ae4 in QMetaObject::activate(QObject, int, int, void) () from /lib64/libQt5Core.so.5 $7597 = (QMetaObject ) 0x3

Breakpoint 1, 0x00007faebaff6a70 in QMetaObject::activate(QObject, QMetaObject const, int, void*) () from /lib64/libQt5Core.so.5 $7598 = (QMetaObject ) 0x7faebb40dec0 QSocketNotifier::staticMetaObject

Breakpoint 1, 0x00007faebaff5ae4 in QMetaObject::activate(QObject, int, int, void) () from /lib64/libQt5Core.so.5 $7599 = (QMetaObject ) 0x3

Breakpoint 1, 0x00007faebaff6a70 in QMetaObject::activate(QObject, QMetaObject const, int, void*) () from /lib64/libQt5Core.so.5 $7600 = (QMetaObject ) 0x7faebb40dec0 QSocketNotifier::staticMetaObject

Breakpoint 1, 0x00007faebaff5ae4 in QMetaObject::activate(QObject, int, int, void) () from /lib64/libQt5Core.so.5 $7601 = (QMetaObject ) 0x3

Breakpoint 1, 0x00007faebaff6a70 in QMetaObject::activate(QObject, QMetaObject const, int, void*) () from /lib64/libQt5Core.so.5 $7602 = (QMetaObject ) 0x7faebb40dec0 QSocketNotifier::staticMetaObject

Breakpoint 1, 0x00007faebaff5ae4 in QMetaObject::activate(QObject, int, int, void) () from /lib64/libQt5Core.so.5 $7603 = (QMetaObject ) 0x3

Breakpoint 1, 0x00007faebaff6a70 in QMetaObject::activate(QObject, QMetaObject const, int, void*) () from /lib64/libQt5Core.so.5 $7604 = (QMetaObject ) 0x7faebb40db80 QAbstractEventDispatcher::staticMetaObject

Breakpoint 1, 0x00007faebaff5ae4 in QMetaObject::activate(QObject, int, int, void) () from /lib64/libQt5Core.so.5 $7605 = (QMetaObject ) 0x3

Breakpoint 1, 0x00007faebaff6a70 in QMetaObject::activate(QObject, QMetaObject const, int, void*) () from /lib64/libQt5Core.so.5 $7606 = (QMetaObject ) 0x7faebb40db80 QAbstractEventDispatcher::staticMetaObject

Breakpoint 1, 0x00007faebaff5ae4 in QMetaObject::activate(QObject, int, int, void) () from /lib64/libQt5Core.so.5 $7607 = (QMetaObject ) 0x3

Breakpoint 1, 0x00007faebaff6a70 in QMetaObject::activate(QObject, QMetaObject const, int, void*) () from /lib64/libQt5Core.so.5 $7608 = (QMetaObject ) 0x7faebb40dec0 QSocketNotifier::staticMetaObject

Breakpoint 1, 0x00007faebaff5ae4 in QMetaObject::activate(QObject, int, int, void) () from /lib64/libQt5Core.so.5 $7609 = (QMetaObject ) 0x3

Breakpoint 1, 0x00007faebaff6a70 in QMetaObject::activate(QObject, QMetaObject const, int, void*) () from /lib64/libQt5Core.so.5 $7610 = (QMetaObject ) 0x7faebb40dec0 QSocketNotifier::staticMetaObject [Switching to Thread 0x7faea5dca700 (LWP 9637)]

Breakpoint 1, 0x00007faea8368b80 in QMetaObject::activate(QObject, QMetaObject const, int, void*)@plt () from /lib64/libQt5XcbQpa.so.5 $7611 = (QMetaObject ) 0x7faea86188e0

Breakpoint 1, 0x00007faebaff6a70 in QMetaObject::activate(QObject, QMetaObject const, int, void*) () from /lib64/libQt5Core.so.5 $7612 = (QMetaObject ) 0x7faea86188e0 [Switching to Thread 0x7faebf500940 (LWP 9636)]

Breakpoint 1, 0x00007faebaff5ae4 in QMetaObject::activate(QObject, int, int, void) () from /lib64/libQt5Core.so.5 $7613 = (QMetaObject ) 0x3

Breakpoint 1, 0x00007faebaff6a70 in QMetaObject::activate(QObject, QMetaObject const, int, void*) () from /lib64/libQt5Core.so.5 $7614 = (QMetaObject ) 0x7faebb40dec0 QSocketNotifier::staticMetaObject [Switching to Thread 0x7faea5dca700 (LWP 9637)]

Breakpoint 1, 0x00007faebaff5ae4 in QMetaObject::activate(QObject, int, int, void) () from /lib64/libQt5Core.so.5 $7615 = (QMetaObject ) 0x5 [Switching to Thread 0x7faebf500940 (LWP 9636)]

Breakpoint 1, 0x00007faebaff5ae4 in QMetaObject::activate(QObject, int, int, void) () from /lib64/libQt5Core.so.5 $7616 = (QMetaObject ) 0x3

Breakpoint 1, 0x00007faebaff6a70 in QMetaObject::activate(QObject, QMetaObject const, int, void*) () from /lib64/libQt5Core.so.5 $7617 = (QMetaObject ) 0x7faebb40dec0 QSocketNotifier::staticMetaObject

Breakpoint 1, 0x00007faebaff5ae4 in QMetaObject::activate(QObject, int, int, void) () from /lib64/libQt5Core.so.5 $7618 = (QMetaObject ) 0x3

Breakpoint 1, 0x00007faebaff6a70 in QMetaObject::activate(QObject, QMetaObject const, int, void*) () from /lib64/libQt5Core.so.5 $7619 = (QMetaObject ) 0x7faebb40dec0 QSocketNotifier::staticMetaObject

Breakpoint 1, 0x00007faebaff5ae4 in QMetaObject::activate(QObject, int, int, void) () from /lib64/libQt5Core.so.5 $7620 = (QMetaObject ) 0x3

Breakpoint 1, 0x00007faebaff6a70 in QMetaObject::activate(QObject, QMetaObject const, int, void*) () from /lib64/libQt5Core.so.5 $7621 = (QMetaObject ) 0x7faebb40dec0 QSocketNotifier::staticMetaObject

Breakpoint 1, 0x00007faebaff5ae4 in QMetaObject::activate(QObject, int, int, void) () from /lib64/libQt5Core.so.5 $7622 = (QMetaObject ) 0x3

Breakpoint 1, 0x00007faebaff6a70 in QMetaObject::activate(QObject, QMetaObject const, int, void*) () from /lib64/libQt5Core.so.5 $7623 = (QMetaObject ) 0x7faebb40db80 QAbstractEventDispatcher::staticMetaObject

Breakpoint 1, 0x00007faebaff5ae4 in QMetaObject::activate(QObject, int, int, void) () from /lib64/libQt5Core.so.5 $7624 = (QMetaObject ) 0x3

Breakpoint 1, 0x00007faebaff6a70 in QMetaObject::activate(QObject, QMetaObject const, int, void*) () from /lib64/libQt5Core.so.5 $7625 = (QMetaObject ) 0x7faebb40db80 QAbstractEventDispatcher::staticMetaObject

Breakpoint 1, 0x00007faebaff5ae4 in QMetaObject::activate(QObject, int, int, void) () from /lib64/libQt5Core.so.5 $7626 = (QMetaObject ) 0x3

Breakpoint 1, 0x00007faebaff6a70 in QMetaObject::activate(QObject, QMetaObject const, int, void*) () from /lib64/libQt5Core.so.5 $7627 = (QMetaObject ) 0x7faebb40dec0 QSocketNotifier::staticMetaObject

Breakpoint 1, 0x00007faebaff5ae4 in QMetaObject::activate(QObject, int, int, void) () from /lib64/libQt5Core.so.5 $7628 = (QMetaObject ) 0x3

Breakpoint 1, 0x0000558eeaf43720 in QMetaObject::activate(QObject, QMetaObject const, int, void*)@plt () $7629 = (QMetaObject ) 0x558eec062200 GlobalShortcutEngine::staticMetaObject

Breakpoint 1, 0x00007faebaff6a70 in QMetaObject::activate(QObject, QMetaObject const, int, void*) () from /lib64/libQt5Core.so.5 $7630 = (QMetaObject ) 0x558eec062200 GlobalShortcutEngine::staticMetaObject

Breakpoint 1, 0x00007faebaff5ae4 in QMetaObject::activate(QObject, int, int, void) () from /lib64/libQt5Core.so.5 $7631 = (QMetaObject ) 0x5

Breakpoint 1, 0x00007faebaff6a70 in QMetaObject::activate(QObject, QMetaObject const, int, void*) () from /lib64/libQt5Core.so.5 $7632 = (QMetaObject ) 0x7faebb40dec0 QSocketNotifier::staticMetaObject

Breakpoint 1, 0x00007faebaff5ae4 in QMetaObject::activate(QObject, int, int, void) () from /lib64/libQt5Core.so.5 $7633 = (QMetaObject ) 0x3

Breakpoint 1, 0x00007faebaff6a70 in QMetaObject::activate(QObject, QMetaObject const, int, void*) () from /lib64/libQt5Core.so.5 $7634 = (QMetaObject ) 0x7faebb40dec0 QSocketNotifier::staticMetaObject

Breakpoint 1, 0x00007faebaff5ae4 in QMetaObject::activate(QObject, int, int, void) () from /lib64/libQt5Core.so.5 $7635 = (QMetaObject ) 0x3

Breakpoint 1, 0x00007faebaff6a70 in QMetaObject::activate(QObject, QMetaObject const, int, void*) () from /lib64/libQt5Core.so.5 $7636 = (QMetaObject ) 0x7faebb40dec0 QSocketNotifier::staticMetaObject

Breakpoint 1, 0x00007faebaff5ae4 in QMetaObject::activate(QObject, int, int, void) () from /lib64/libQt5Core.so.5 $7637 = (QMetaObject ) 0x3

Breakpoint 1, 0x00007faebaff6a70 in QMetaObject::activate(QObject, QMetaObject const, int, void*) () from /lib64/libQt5Core.so.5 $7638 = (QMetaObject ) 0x7faebb40dec0 QSocketNotifier::staticMetaObject

Breakpoint 1, 0x00007faebaff5ae4 in QMetaObject::activate(QObject, int, int, void) () from /lib64/libQt5Core.so.5 $7639 = (QMetaObject ) 0x3

Breakpoint 1, 0x00007faebaff6a70 in QMetaObject::activate(QObject, QMetaObject const, int, void*) () from /lib64/libQt5Core.so.5 $7640 = (QMetaObject ) 0x7faebb40dec0 QSocketNotifier::staticMetaObject

Breakpoint 1, 0x00007faebaff5ae4 in QMetaObject::activate(QObject, int, int, void) () from /lib64/libQt5Core.so.5 $7641 = (QMetaObject ) 0x3

Breakpoint 1, 0x00007faebaff6a70 in QMetaObject::activate(QObject, QMetaObject const, int, void*) () from /lib64/libQt5Core.so.5 $7642 = (QMetaObject ) 0x7faebb40dec0 QSocketNotifier::staticMetaObject

Breakpoint 1, 0x00007faebaff5ae4 in QMetaObject::activate(QObject, int, int, void) () from /lib64/libQt5Core.so.5 $7643 = (QMetaObject ) 0x3

Breakpoint 1, 0x00007faebaff6a70 in QMetaObject::activate(QObject, QMetaObject const, int, void*) () from /lib64/libQt5Core.so.5 $7644 = (QMetaObject ) 0x7faebb40db80 QAbstractEventDispatcher::staticMetaObject

Breakpoint 1, 0x00007faebaff5ae4 in QMetaObject::activate(QObject, int, int, void) () from /lib64/libQt5Core.so.5 $7645 = (QMetaObject ) 0x3

Breakpoint 1, 0x00007faebaff6a70 in QMetaObject::activate(QObject, QMetaObject const, int, void*) () from /lib64/libQt5Core.so.5 $7646 = (QMetaObject ) 0x7faebb40db80 QAbstractEventDispatcher::staticMetaObject

Breakpoint 1, 0x00007faebaff5ae4 in QMetaObject::activate(QObject, int, int, void) () from /lib64/libQt5Core.so.5 $7647 = (QMetaObject ) 0x3

Breakpoint 1, 0x00007faebaff6a70 in QMetaObject::activate(QObject, QMetaObject const, int, void*) () from /lib64/libQt5Core.so.5 $7648 = (QMetaObject ) 0x7faebb40dec0 QSocketNotifier::staticMetaObject

Breakpoint 1, 0x00007faebaff5ae4 in QMetaObject::activate(QObject, int, int, void) () from /lib64/libQt5Core.so.5 $7649 = (QMetaObject ) 0x3

Breakpoint 1, 0x00007faebaff6a70 in QMetaObject::activate(QObject, QMetaObject const, int, void*) () from /lib64/libQt5Core.so.5 $7650 = (QMetaObject ) 0x7faebb40dec0 QSocketNotifier::staticMetaObject

Breakpoint 1, 0x00007faebaff5ae4 in QMetaObject::activate(QObject, int, int, void) () from /lib64/libQt5Core.so.5 $7651 = (QMetaObject ) 0x3

Breakpoint 1, 0x00007faebaff6a70 in QMetaObject::activate(QObject, QMetaObject const, int, void*) () from /lib64/libQt5Core.so.5 $7652 = (QMetaObject ) 0x7faebb40dec0 QSocketNotifier::staticMetaObject

Breakpoint 1, 0x00007faebaff5ae4 in QMetaObject::activate(QObject, int, int, void) () from /lib64/libQt5Core.so.5 $7653 = (QMetaObject ) 0x3

Breakpoint 1, 0x00007faebaff6a70 in QMetaObject::activate(QObject, QMetaObject const, int, void*) () from /lib64/libQt5Core.so.5 $7654 = (QMetaObject ) 0x7faebb40dec0 QSocketNotifier::staticMetaObject

Breakpoint 1, 0x00007faebaff5ae4 in QMetaObject::activate(QObject, int, int, void) () from /lib64/libQt5Core.so.5 $7655 = (QMetaObject ) 0x3

Breakpoint 1, 0x00007faebaff6a70 in QMetaObject::activate(QObject, QMetaObject const, int, void*) () from /lib64/libQt5Core.so.5 $7656 = (QMetaObject ) 0x7faebb40dec0 QSocketNotifier::staticMetaObject

Breakpoint 1, 0x00007faebaff5ae4 in QMetaObject::activate(QObject, int, int, void) () from /lib64/libQt5Core.so.5 $7657 = (QMetaObject ) 0x3

Breakpoint 1, 0x00007faebaff6a70 in QMetaObject::activate(QObject, QMetaObject const, int, void*) () from /lib64/libQt5Core.so.5 $7658 = (QMetaObject ) 0x7faebb40dec0 QSocketNotifier::staticMetaObject

Breakpoint 1, 0x00007faebaff5ae4 in QMetaObject::activate(QObject, int, int, void) () from /lib64/libQt5Core.so.5 $7659 = (QMetaObject ) 0x3

Breakpoint 1, 0x00007faebaff6a70 in QMetaObject::activate(QObject, QMetaObject const, int, void*) () from /lib64/libQt5Core.so.5 $7660 = (QMetaObject ) 0x7faebb40df80 QTimer::staticMetaObject

Breakpoint 1, 0x00007faebaff5ae4 in QMetaObject::activate(QObject, int, int, void) () from /lib64/libQt5Core.so.5 $7661 = (QMetaObject ) 0x3

Breakpoint 1, 0x00007faebaff6a70 in QMetaObject::activate(QObject, QMetaObject const, int, void*) () from /lib64/libQt5Core.so.5 $7662 = (QMetaObject ) 0x7faebb40df80 QTimer::staticMetaObject

Breakpoint 1, 0x00007faebaff5ae4 in QMetaObject::activate(QObject, int, int, void) () from /lib64/libQt5Core.so.5 $7663 = (QMetaObject ) 0x3

Breakpoint 1, 0x00007faebbf25080 in QMetaObject::activate(QObject, QMetaObject const, int, void*)@plt () from /lib64/libQt5Gui.so.5 $7664 = (QMetaObject ) 0x7faebc599360 QTextDocument::staticMetaObject

Breakpoint 1, 0x00007faebaff6a70 in QMetaObject::activate(QObject, QMetaObject const, int, void*) () from /lib64/libQt5Core.so.5 $7665 = (QMetaObject ) 0x7faebc599360 QTextDocument::staticMetaObject

Breakpoint 1, 0x00007faebaff5ae4 in QMetaObject::activate(QObject, int, int, void) () from /lib64/libQt5Core.so.5 $7666 = (QMetaObject ) 0x3

openAfre commented 8 years ago

I am very certain the issue has something todo with using block as the default firewall zone and triggering a change in the network state.

I was running mumble fine for the last weeks not using the block zone.

l29ah commented 6 years ago

1983 seems related

Krzmbrzl commented 4 years ago

Does the CPU usage go to 100% for Mumble (the client) or for murmur (the server)? Also is this problem still present in v1.3?

l29ah commented 4 years ago

On Mon, Mar 02, 2020 at 09:24:37AM -0800, Robert Adam wrote:

Does the CPU usage go to 100% for Mumble (the client) or for murmur (the server)? Also is this problem still present in v1.3?

Mumble. Yes, i think i've seen it recently on master.

-- () ascii ribbon campaign - against html mail /\ http://arc.pasp.de/ - against proprietary attachments