Bug 162465 - NetworkProcess is using 100% CPU on a specific website
Summary: NetworkProcess is using 100% CPU on a specific website
Status: RESOLVED INVALID
Alias: None
Product: WebKit
Classification: Unclassified
Component: WebKit2 (show other bugs)
Version: WebKit Nightly Build
Hardware: PC Linux
: P3 Normal
Assignee: Nobody
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2016-09-22 14:44 PDT by Christian Stadelmann
Modified: 2016-09-24 09:15 PDT (History)
5 users (show)

See Also:


Attachments
Backtrace from gdb attached to WebKitNetworkProcess (50.75 KB, text/plain)
2016-09-22 14:44 PDT, Christian Stadelmann
no flags Details
MHTML file from this website (597.75 KB, application/x-mimearchive)
2016-09-22 14:50 PDT, Christian Stadelmann
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Christian Stadelmann 2016-09-22 14:44:19 PDT
Created attachment 289602 [details]
Backtrace from gdb attached to WebKitNetworkProcess

Steps to reproduce:
1. open epiphany
2. browse to https://bodhi.fedoraproject.org/updates/FEDORA-2016-77ffa78abb
3. watch WebKitNetworkProcess

What happens?
100% CPU load on one core, by WebKitNetworkProcess

What should happen?
No 100% CPU when just showing an ordinary page.

Affected version:
epiphany-3.20.3-1.fc24.x86_64
webkitgtk4-2.12.5-1.fc24.x86_64
libsoup-2.54.1-1.fc24.x86_64
gtk3-3.20.9-1.fc24.x86_64

Additional info:
I attached gdb to WebKitNetworkProcess while being busy, then I created a backtrace:

#0  0x00007ffff07ccbe4 in g_source_callback_get (cb_data=0x555556647f50, source=0x555556648cf0, func=0x7fffffffd930, data=0x7fffffffd938) at gmain.c:1574
#1  0x00007ffff07cf39c in g_main_context_find_source_by_user_data (context=0x555555588dd0, user_data=user_data@entry=0x555555580020) at gmain.c:2232
#2  0x00007fffefe49ed4 in soup_session_real_kick_queue (session=<optimized out>)
    at soup-session.c:2339
#3  0x00007fffefe4ef7b in message_completed (session=<optimized out>)
    at soup-session.c:2360
#4  0x00007fffefe4ef7b in message_completed (msg=<optimized out>, completion=SOUP_MESSAGE_IO_COMPLETE, user_data=0x555555b195a0) at soup-session.c:1586
#5  0x00007fffefe3d9a2 in soup_message_io_finished (msg=0x555555cff8a0 [SoupMessage]) at soup-message-io.c:183
#6  0x00007fffefe29223 in soup_client_input_stream_close_fn (stream=<optimized out>, cancellable=<optimized out>, error=<optimized out>)
    at soup-client-input-stream.c:135
#7  0x00007ffff0f49fe4 in g_input_stream_close (stream=0x555555be3960 [SoupClientInputStream], cancellable=cancellable@entry=0x0, error=error@entry=0x0)
    at ginputstream.c:511
#8  0x00007ffff6e3d308 in WebCore::readCallback(GObject*, GAsyncResult*, gpointer) (asyncResult=<optimized out>, data=0x7fffe1d3da20)
    at /usr/src/debug/webkitgtk-2.12.5/Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:1340
#9  0x00007ffff0f4a04a in async_ready_callback_wrapper (source_object=0x555555be3960 [SoupClientInputStream], res=0x555555a10de0, user_data=0x7fffe1d3da20)
    at ginputstream.c:532
#10 0x00007ffff0f711f3 in g_task_return_now (task=0x555555a10de0 [GTask])
    at gtask.c:1107
#11 0x00007ffff0f71229 in complete_in_idle_cb (task=0x555555a10de0) at gtask.c:1121
#12 0x00007ffff07d06ba in g_main_context_dispatch (context=0x555555588dd0)
    at gmain.c:3154
#13 0x00007ffff07d06ba in g_main_context_dispatch (context=context@entry=0x555555588dd0) at gmain.c:3769
#14 0x00007ffff07d0a70 in g_main_context_iterate (context=0x555555588dd0, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at gmain.c:3840
#15 0x00007ffff07d0d92 in g_main_loop_run (loop=0x555555c58590) at gmain.c:4034
#16 0x00007ffff5553770 in WTF::RunLoop::run() ()
    at /usr/src/debug/webkitgtk-2.12.5/Source/WTF/wtf/glib/RunLoopGLib.cpp:94
#17 0x00007ffff5ff289d in WebKit::ChildProcessMain<WebKit::NetworkProcess, WebKit::NetworkProcessMain>(int, char**) (argc=<optimized out>, argv=0x7fffffffde28)
    at /usr/src/debug/webkitgtk-2.12.5/Source/WebKit2/Shared/unix/ChildProcessMain.h:61
#18 0x00007fffebcd6731 in __libc_start_main (main=
    0x555555554c20 <main(int, char**)>, argc=2, argv=0x7fffffffde28, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffffffde18)
    at ../csu/libc-start.c:289
#19 0x0000555555554c79 in _start ()

(more detailed version attached)
Comment 1 Christian Stadelmann 2016-09-22 14:50:01 PDT
Created attachment 289606 [details]
MHTML file from this website

Please note that this website also breaks firefox, see https://bugzilla.redhat.com/show_bug.cgi?id=1378601

While trying to save the website I noticed the title is too long so it cannot be saved into a MHTML file without renaming.

Opening the MHTML file with epiphany does NOT make this bug reappear. Reloading the page from the URL does, though.
Comment 2 David H. Gutteridge 2016-09-23 14:55:53 PDT
I can also reproduce this issue with WebKitGTK4 2.14.0 and Epiphany 3.20.4. The behaviour is similar, but after WebKitNetworkProcess stays at 100% for some minutes, it drops off, and WebKitWebProcess goes to 100% and stays there, at which point I can't scroll in that page anymore. (When WebKitNetworkProcess is running, I can scroll and view what's been rendered so far.)

(I can also reproduce similar behaviour with both Safari 9.1.3 and 10.0 on El Capitan 10.11.6.)
Comment 3 Carlos Garcia Campos 2016-09-24 02:09:52 PDT
(In reply to comment #2)
> I can also reproduce this issue with WebKitGTK4 2.14.0 and Epiphany 3.20.4.
> The behaviour is similar, but after WebKitNetworkProcess stays at 100% for
> some minutes, it drops off, and WebKitWebProcess goes to 100% and stays
> there, at which point I can't scroll in that page anymore. (When
> WebKitNetworkProcess is running, I can scroll and view what's been rendered
> so far.)
> 
> (I can also reproduce similar behaviour with both Safari 9.1.3 and 10.0 on
> El Capitan 10.11.6.)

It's not GTK+ specific then.
Comment 4 Chris Dumez 2016-09-24 09:15:56 PDT
Given that this happens with all browsers, I think it is safe to assume this is caused by bad content and not a specific bug in WebKit.

The page seems to be generating a large amount of content and it keeps getting bigger and bigger. It causes a lot of network activity, a lot of CSS / HTML parsing and relayout.