Partage
  • Partager sur Facebook
  • Partager sur Twitter

Symfony 4 api devient soudainement très lent.

Sujet résolu
    20 mars 2019 à 13:17:30

    Bonjour à tous,

    Je viens solliciter votre aide concerant un problème que je rencontre sur Symfony 4.

    En effet je développe un api rest avec Symfony 4, tout marchait super bien jusqu'à aujourd'hui où les appels à l'Api deviennnent super lents.

    D'abord il me donnait l'erreur suivante :  Allowed memory size of 268435456 bytes exhausted (tried to allocate 98570240 bytes) in /home/user/tlt_symfony_back/vendor/jms/serializer/src/JsonSerializationVisitor.php on line 186

    2019-03-20T12:55:19+01:00 [critical] Fatal Error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 98570240 bytes)

    que j'ai résolue en mettant memory_limit à 512M dans php.ini mais les appels prennent trop longtemps avant de répondre, avec Postman ça referme carrément la fenêtre.

    J'utilse FOSRestBundle avec Jms_serializer .

    Merci par avance pour votre aide.

    Voici la fonction du controller qui me permet de récupérer toutes les annonces par exemple: 

    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;
    
    }

    Et la table Annonces contient des attributs : title : string, type: string, user : relation ManyToOne avec la table User

    Database : Mysql.

    -
    Edité par Pakendux 20 mars 2019 à 15:10:51

    • Partager sur Facebook
    • Partager sur Twitter
      20 mars 2019 à 16:03:14

      Bonjour,

      Si tout marchait bien jusqu'à aujourd'hui qu'est qui a été modifié ? sur la machine ? sur le logiciel ? etc ... sur les datas ? 

      Par exemple si d'un seul coup (?) beaucoup plus de datas alors il se peut que la sérialisation prenne du temps et de la mémoire donc peut-être faire de la pagination.

      Sans plus d'infos, trouver à distance devient un peu de la divination. ;)

      A+

      • Partager sur Facebook
      • Partager sur Twitter
        20 mars 2019 à 17:15:44

        Bonjour monkey3d,

        Merci infiniment pour votre réponse.

        Normalement j'ai ajouté que d'autres routes dans le controller sinon rien d'autres et même avec l'ancien code j'ai le même problème.

        Là tout à l'heure j'ai supprimé toutes les données et gardé juste une dans la table, avec tout ça ça marche pas.

        Et si vous pouvez m'en dire un peu sur la pagination ça serait super.

        Merci encore.

        -
        Edité par Pakendux 20 mars 2019 à 17:25:55

        • Partager sur Facebook
        • Partager sur Twitter
          20 mars 2019 à 17:34:57

          Salut si vous avez ajoutez de nouvelles routes , essayez de voir si y'a une redirection en boucle quelque part et pensez vider le cache ...
          • Partager sur Facebook
          • Partager sur Twitter
            20 mars 2019 à 17:41:27

            Salut,

            Si tu as beaucoup de relations entre tes objets, essaie d'utiliser les groupes pour ne retourner que les propriétés dont tu as besoin.

            PS: Il existe une fonctionnalité de FosRest qui te dispense de l'utilisation de JSONResponse.

            • Partager sur Facebook
            • Partager sur Twitter
            le bienfait n'est jamais perdu
              20 mars 2019 à 18:18:59

              Salut,

              Merci beaucoup à vous pour vos réponses, je vais checker ça pour voir.

              Et concernant les groupes pour ne retourner que les propriétés voulues, comment peut on faire ça avec Doctrine?

              Merci encore.

              -
              Edité par Pakendux 20 mars 2019 à 18:25:23

              • Partager sur Facebook
              • Partager sur Twitter
                20 mars 2019 à 18:27:51

                Si la seule évolution est l'ajout de routes (normalement ... ;)) alors enlève les routes ajoutées et vois si le problème est toujours présent.

                Pour la pagination il suffit de taper dans son moteur de recherche favori par exemple "api rest pagination" et tu devrais obtenir pas mal d'infos voire de tutos.

                Autre point as tu regardé les infos données par Symfony côté appli API ?

                A+

                -
                Edité par monkey3d 20 mars 2019 à 18:28:35

                • Partager sur Facebook
                • Partager sur Twitter
                  21 mars 2019 à 14:06:44

                  Salut,

                  Merci beaucoup encore pour ta réponse, finalement j'ai trouvé le problème,  c'était dû au fait que j'ai beaucoup de relations entre mes tables et le sérialiseur prenait beaucoup de temps à sérialiser. Du coup j'utilise maintenant des requêtes sql natives avec jointure pour obtenir uniquement les champs dont j'ai besoin.

                  Pour répondre à ta question : oui j'ai cherché là dessus mais il n'y a pas assez pour symfony 4.

                  Merci à tous.

                  • Partager sur Facebook
                  • Partager sur Twitter
                    21 mars 2019 à 16:05:01

                    Ce qui n'explique pas par rapport à ton début de discussion ce qui fait que d'un seul coup cela a changé ... tu as ajouté des relations récemment donc ?

                    J'ai développé une API Rest Full avec Symfony 4 et j'ai juste adapté les tutos d'une version 3.x.

                    A+

                    • Partager sur Facebook
                    • Partager sur Twitter
                      21 mars 2019 à 22:25:04

                      Salut monkey3d,

                      En vrai non, ces relations sont certes nouvelles mais l'application marchait bien avec, c'est pour ça que je comprenais pas.

                      J'ai essayé même avec une version avant ces relations c'était le même problème.

                      Oui c'est un peu ce que je fais aussi pour adapter à sf4

                      Merci à plus

                      • Partager sur Facebook
                      • Partager sur Twitter

                      Symfony 4 api devient soudainement très lent.

                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                      • Editeur
                      • Markdown