Symfony 4 API внезапно становится очень медленным - PullRequest
0 голосов
/ 20 марта 2019

Я здесь, чтобы попросить вас помочь с проблемой, с которой я столкнулся в Symfony 4.

Действительно, я разрабатываю API отдыха с Symfony 4, все работало очень хорошо до сегодняшнего дня, когда вызовы API стали очень медленными.

Сначала он выдал мне следующую ошибку: Допустимый размер памяти 268435456 байт исчерпан (попытался выделить 98570240 байт) в /home/user/tlt_symfony_back/vendor/jms/serializer/src/JsonSerializationVisitor.php в строке 186 2019-03-20T12: 55: 19 + 01: 00 [критическое] Неустранимая ошибка: допустимый объем памяти 268435456 байт исчерпан (попытка выделить 98570240 байт)

, которую я решил, установив memory_limit в 512M в php.ini , но вызовы слишком долго перед ответом. С почтальоном он полностью закрывает окно.

Я использую FOSRestBundle с Jms_serializer .

Заранее благодарю за помощь.

Это пример кода для получения, например, всех объявлений:

public function getAnnonces(Request $request, ObjectManager $manager){

    $annonces = $manager->getRepository(Annonces::class)->findAll();

    if(!$annonces)
        return new JsonResponse([
            'status' => 'error',
            'message' => 'Il existe aucune annonce'
        ]);

    return $annonces;

}

А у Annonces Entity есть основные атрибуты: название: строка, тип: строка, пользователь: ManyToOne связь с пользователем Entity

База данных: Mysql.

Ответы [ 2 ]

0 голосов
/ 21 марта 2019

Если проблема возникает без каких-либо изменений исходного кода, это означает, что это было с самого начала, но вы не заметили ее масштаб.

Моим первым шагом будет проверка связей с базой данных.Например, если у вас есть отношение OneToMany, которое fetch = "EAGER" или fetch = "LAZY", и у вас много элементов в правой таблице, это замедлит выполнение запросов левой таблицы.Вы можете сделать простую проверку, если проблема с добавлением fetch = "EXTRA_ LAZY" к каждому отношению OneToMany и ManyToMany в сущности Annonces.

https://www.doctrine -project.org / projects / doctrine-orm/en/2.6/tutorials/extra-lazy-associations.html https://www.doctrine -project.org / projects / doctrine-orm / en / 2.6 / reference / annotations-reference.html # annref_onetomany

Если это не поможет, я предлагаю вам проверить индексы таблиц.

0 голосов
/ 21 марта 2019

попробуйте сбросить $ annonces сразу после вызова репозитория, действительно ли существует легкий объект? Попробуйте получить одно объявление с

$annonces = $manager->getRepository(Annonces::class)->find(1);

Вам нужны здесь доктрины с отношениями? Если нет, попробуйте получить массивы содержимого

$qb = $manager->createQueryBuilder();
$annonces = $qb->select('a')->from(Annonces::class, 'a')->getQuery()->getResult(\PDO::FETCH_ASSOC);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...