Symfony, производительность не работает. При выполнении тяжелого сценария на одном пути другие пути становятся недоступными - PullRequest
0 голосов
/ 14 сентября 2018

Сегодня мы обнаружили проблему в нашем приложении Symfony.Мы сделали простой стресс-тест, и он провалился.В нашем контроллере у нас есть функция, которая отображает записи, возвращенные из базы данных.Поэтому, чтобы проверить, я пытался засорить систему с помощью цикла,

 this function runs at path {baseurl}/countries
//$countries fetches all records from the "countries" table
for($i = 0; $i<=200000; $i++) {
         foreach ($countries as $country) {
             echo $country . '<br>';
         }
    }

Зацикливание этого массива 2 миллиона раз, и пока он работал, мы пытались получить доступ к другим путям в пределах того же Symfony, который является ничем иным, какстатический шаблон ветки отрисовывается из контроллера.Но даже для его рендеринга потребовались годы.

Доступ к {baseurl}/register, который содержит только статическую HTML-форму.

Проверено на наличие любых синтаксических ошибок.Ничего не было. Изменены мои настройки OPCache в соответствии с this .Перезапустил сервер, перезагрузил компьютер.Никаких улучшений.

Что я должен сделать, это не моя проблема с Apache, я попытался получить доступ к другим сайтам с помощью Apache, и он нормально загружается.Htop показывает только Apache, использующий 13% ЦП, но мое приложение Symfony, пока выполняется один скрипт, другие пути становятся болезненно недоступными.Я не уверен, что делать, потому что это не проблема с моими ресурсами ПК, а проблема производительности фреймворка.Эта проблема нормальная ??

1 Ответ

0 голосов
/ 14 сентября 2018

это вызвано тем, что PHP "Session Locking" https://ma.ttias.be/php-session-locking-prevent-sessions-blocking-in-requests/

# code copied from link above
<?php
...
// This works in PHP 5.x and PHP 7
session_start();

$_SESSION['something'] = 'foo';
$_SESSION['yolo'] = 'swag';

session_write_close();

// Do the rest of your PHP execution below

в основном, если вы не хотите получать неблокирующие запросы, вы должны просто закрыть сеанс, прежде чем приступить к интенсивной обработке,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...