Creé una API usando Laravel con un servidor centos instalado.
En la API, hay un proceso que usa cromo sin cabeza como este para obtener una fuente 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 . . .Ahora, mi servidor tiene un problema promedio de carga alto debido al alto uso de la CPU y traté de averiguar las razones.
Tengo muchas solicitudes HTTP a esta API, obviamente, como puede ver, muchos procesos PHP-fpm se están ejecutando en la captura de pantalla.
Me gustaría reducir el promedio de carga en el servidor sin regular la cantidad de niños PHP-fpm max, pero no soy muy bueno administrando servidores.
Para reducir el uso de la CPU, ¿qué puedo hacer? Ya hice todo lo posible para optimizar mi código PHP.
¿Es posible compartir un proceso de Chrome en todos los procesos de PHP-fpm para que no tenga que crear un proceso de Chrome para cada solicitud HTTP?