Как уменьшить использование ЦП при использовании Chrome Безголовый - PullRequest
1 голос
/ 11 апреля 2020

Я создал API, используя Laravel с установленным сервером Centos.

В API есть процесс, который использует безголовый chrome, подобный этому, для получения HTML источника.

[MyController.php]

$url = $request['url'];
$browser = $browserFactory->createBrowser(
    [
        'headless' => true,
        'noSandbox' => true,
    ]
);

try{
    $this->page = $browser->createPage();
    $this->page->navigate($url)->waitForNavigation(Page::LOAD, 60);
    $response = $this->page->evaluate('document.documentElement.outerHTML')->getReturnValue();
    $resolvedURL = $this->page->getCurrentUrl();
    // too long to load
} catch (OperationTimedOut $e) {
    $response  = null;
    $resolvedURL = null;
    // An other page was loaded
} catch (NavigationExpired $e) {
    $response  = null;
    $resolvedURL = null;
} finally {
    $browser->close();
}

// analyze retrived html code
.
.
.

Теперь у моего сервера высокая проблема средней нагрузки из-за высокой загрузки ЦП, и я попытался выяснить причины.

У меня много HTTP-запросов к этому API, очевидно, как Вы можете видеть, что на скриншоте запущено много процессов PHP -pm.

Я бы хотел снизить среднюю нагрузку на сервер, не регулируя число дочерних элементов PHP -fpm max, но я ' Я не очень хорош в управлении сервером.

Что я могу сделать, чтобы снизить нагрузку на процессор? Я сделал все возможное, чтобы оптимизировать мой PHP код уже.

Например, можно ли совместно использовать один Chrome процесс во всех PHP -fpm процессах, чтобы мне не нужно было создавать chrome процесс для каждого HTTP-запроса?

enter image description here

...