Skip to content

Chromium: await context.newPage() hangs forever, addressed with --disable-gpu arg #4761

Closed

Description

Context:

  • Playwright Version: 1.7.0
  • Operating System: Linux, Debian
  • Node.js version: 14
  • Browser: Chromium
  • Extra: [any specific details about your environment]

Code Snippet

Using this code:

import { chromium } from "playwright";
const browser = await chromium.launch();
const context = await browser.newContext({ ignoreHTTPSErrors: true });
const page = await context.newPage();

Describe the bug

Using DEBUG=pw:browser.

Broken case:

2020-12-18T11:52:23.757Z info: chromium.launch()
  pw:browser <launching> /test/node_modules/playwright/.local-browsers/chromium-833159/chrome-linux/chrome --disable-background-networking --enable-features=NetworkService,NetworkServiceInProcess --disable-background-timer-throttling --disable-backgrounding-occluded-windows --disable-breakpad --disable-client-side-phishing-detection --disable-component-extensions-with-background-pages --disable-default-apps --disable-dev-shm-usage --disable-extensions --disable-features=TranslateUI,BlinkGenPropertyTrees,ImprovedCookieControls,SameSiteByDefaultCookies,LazyFrameLoading --disable-hang-monitor --disable-ipc-flooding-protection --disable-popup-blocking --disable-prompt-on-repost --disable-renderer-backgrounding --disable-sync --force-color-profile=srgb --metrics-recording-only --no-first-run --enable-automation --password-store=basic --use-mock-keychain --user-data-dir=/tmp/playwright_chromiumdev_profile-YnnTiK --remote-debugging-pipe --headless --hide-scrollbars --mute-audio --blink-settings=primaryHoverType=2,availableHoverTypes=2,primaryPointerType=4,availablePointerTypes=4 --no-sandbox --disable-dev-shm-usage --no-startup-window +0ms
  pw:browser <launched> pid=106 +13ms
  pw:browser [err] [1218/115224.064088:ERROR:bus.cc(393)] Failed to connect to the bus: Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directory +101ms
2020-12-18T11:52:24.068Z info: suite setup done
2020-12-18T11:52:24.069Z info: browser.newContext()
2020-12-18T11:52:24.073Z info: context.newPage()
  pw:browser [err] [1218/115224.069551:FATAL:xlib_support.cc(44)] Check failed: xlib_xcb_loader->Load("libX11-xcb.so.1").  +250ms
  pw:browser [err] #0 0x55e96b0f0919 base::debug::CollectStackTrace() +0ms
...
  pw:browser [err] Received signal 6 +1ms
  pw:browser [err] #0 0x55e96b0f0919 base::debug::CollectStackTrace() +7ms
  pw:browser [err] #1 0x55e96b0616d3 base::debug::StackTrace::StackTrace() +7ms
  pw:browser [err] #2 0x55e96b0f04fb base::debug::(anonymous namespace)::StackDumpSignalHandler() +8ms
  pw:browser [err] #3 0x7febb87ac730 (/lib/x86_64-linux-gnu/libpthread-2.28.so+0x1272f) +0ms
  pw:browser [err] #4 0x7febb690e7bb gsignal +0ms
  pw:browser [err] #5 0x7febb68f9535 abort +0ms
  pw:browser [err] #6 0x55e96b0ef495 base::debug::BreakDebugger() +8ms
  pw:browser [err] #7 0x55e96b072d6d logging::LogMessage::~LogMessage() +8ms
  pw:browser [err] #8 0x55e96b07344e logging::LogMessage::~LogMessage() +8ms
  pw:browser [err] #9 0x55e96be35c9f x11::InitXlib() +10ms
  pw:browser [err] #10 0x55e96be35e59 x11::XlibDisplay::XlibDisplay() +10ms
  pw:browser [err] #11 0x55e96be0fae0 x11::Connection::GetXlibDisplay() +11ms
  pw:browser [err] #12 0x55e96c2b94f7 gl::init::InitializeGLOneOffPlatformX11() +11ms
  pw:browser [err] #13 0x55e96c2b74cb gl::init::InitializeGLOneOffPlatformImplementation() +11ms
  pw:browser [err] #14 0x55e96c2b7172 gl::init::(anonymous namespace)::InitializeGLOneOffPlatformHelper() +12ms
  pw:browser [err] #15 0x55e96c2b72dc gl::init::InitializeGLNoExtensionsOneOff() +11ms
  pw:browser [err] #16 0x55e96cccba78 gpu::GpuInit::InitializeAndStartSandbox() +13ms
  pw:browser [err] #17 0x55e96f920a23 content::GpuMain() +22ms
  pw:browser [err] #18 0x55e96afffed9 content::RunZygote() +8ms
  pw:browser [err] #19 0x55e96b001144 content::ContentMainRunnerImpl::Run() +9ms
  pw:browser [err] #20 0x55e96affe7a4 content::RunContentProcess() +7ms
  pw:browser [err] #21 0x55e96afff12c content::ContentMain() +8ms
  pw:browser [err] #22 0x55e96b05b612 headless::(anonymous namespace)::RunContentMain() +8ms
  pw:browser [err] #23 0x55e96b05b4bb headless::RunChildProcessIfNeeded() +9ms
  pw:browser [err] #24 0x55e96b059c25 headless::HeadlessShellMain() +8ms
  pw:browser [err] #25 0x55e968575f05 ChromeMain +25ms
  pw:browser [err] #26 0x7febb68fb09b __libc_start_main +1ms
  pw:browser [err] #27 0x55e968575d2a _start +27ms
  pw:browser [err]   r8: 0000000000000000  r9: 00007ffc1e841d30 r10: 0000000000000008 r11: 0000000000000246 +0ms
  pw:browser [err]  r12: 000034c044404c98 r13: 000034c044404c90 r14: 000034c044404c80 r15: 00007ffc1e842800 +0ms
  pw:browser [err]   di: 0000000000000002  si: 00007ffc1e841d30  bp: 00007ffc1e841f80  bx: 0000000000000006 +0ms
  pw:browser [err]   dx: 0000000000000000  ax: 0000000000000000  cx: 00007febb690e7bb  sp: 00007ffc1e841d30 +0ms
  pw:browser [err]   ip: 00007febb690e7bb efl: 0000000000000246 cgf: 002b000000000033 erf: 0000000000000000 +1ms
  pw:browser [err]  trp: 0000000000000000 msk: 0000000000000000 cr2: 0000000000000000 +0ms
  pw:browser [err] [end of stack trace] +0ms
  pw:browser [err] Calling _exit(1). Core file will not be generated. +0ms
  pw:browser [err] [1218/115227.265663:WARNING:gpu_process_host.cc(1275)] The GPU process has crashed 6 time(s) +1ms
  pw:browser [err] [1218/115227.271729:WARNING:gpu_process_host.cc(999)] Reinitialized the GPU process after a crash. The reported initialization time was 0 ms +

Note the The GPU process has crashed 6 time(s)

The NodeJS process hangs infinitely in the last line shown in the code snippet above, in const page = await context.newPage();.

No further log output produced by playwright.

That is, await context.newPage() does not resolve, as was for example reported here (without root-causing this): #3939

I then changed the browser instantiation to use the --disable-gpu arg:

    browser = await chromium.launch({
      args: ["--disable-gpu"]
    });

resulting in

2020-12-18T11:51:26.862Z info: chromium.launch()
  pw:browser <launching> /test/node_modules/playwright/.local-browsers/chromium-833159/chrome-linux/chrome --disable-background-networking --enable-features=NetworkService,NetworkServiceInProcess --disable-background-timer-throttling --disable-backgrounding-occluded-windows --disable-breakpad --disable-client-side-phishing-detection --disable-component-extensions-with-background-pages --disable-default-apps --disable-dev-shm-usage --disable-extensions --disable-features=TranslateUI,BlinkGenPropertyTrees,ImprovedCookieControls,SameSiteByDefaultCookies,LazyFrameLoading --disable-hang-monitor --disable-ipc-flooding-protection --disable-popup-blocking --disable-prompt-on-repost --disable-renderer-backgrounding --disable-sync --force-color-profile=srgb --metrics-recording-only --no-first-run --enable-automation --password-store=basic --use-mock-keychain --user-data-dir=/tmp/playwright_chromiumdev_profile-lKflzS --remote-debugging-pipe --headless --hide-scrollbars --mute-audio --blink-settings=primaryHoverType=2,availableHoverTypes=2,primaryPointerType=4,availablePointerTypes=4 --no-sandbox --disable-dev-shm-usage --disable-gpu --no-startup-window +0ms
  pw:browser <launched> pid=107 +13ms
  pw:browser [err] [1218/115127.182152:ERROR:bus.cc(393)] Failed to connect to the bus: Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directory +107ms
2020-12-18T11:51:27.186Z info: suite setup done
2020-12-18T11:51:27.188Z info: browser.newContext()
2020-12-18T11:51:27.195Z info: context.newPage()

Here, the await context.newPage() resolved quickly and the test runner could move on. The browser output shows

  pw:browser [err] Calling _exit(1). Core file will not be generated. +0ms
  pw:browser [err] [1218/115128.810815:WARNING:gpu_process_host.cc(1275)] The GPU process has crashed 3 time(s) +1ms
  pw:browser [err] [1218/115128.816207:WARNING:gpu_process_host.cc(999)] Reinitialized the GPU process after a crash. The reported initialization time was 0 ms 

That is, even with --disable-gpu The GPU process has crashed 3 time(s). But that wasn't deadly.

Discussion / conclusions

  • await context.newPage() can hang indefinitely, and should get some error handling love. It should error out instead of hanging indefinitely. Maybe there should be a timeout; and when that hits in the browser log should be emitted -- using DEBUG=pw:browser should not be necessary to get further information.
  • Should --disable-gpu be the default in headless mode? To me it seems like [BUG] Chromium headless on Windows does not launch without --disable-gpu #2698 needs more discussion maybe.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions