symfony 4 api突然变得非常慢

时间:2019-03-20 14:07:31

标签: php mysql symfony4 fosrestbundle jmsserializerbundle

我在这里寻求与Symfony 4有关的问题的帮助。

实际上,我使用Symfony 4开发了一个Rest API,直到今天对API的调用变得非常缓慢时,一切工作都非常好。

首先,他给了我以下错误:在第186行的/home/user/tlt_symfony_back/vendor/jms/serializer/src/JsonSerializationVisitor.php中,已用尽内存大小268435456字节(试图分配98570240字节) 2019-03-20T12:55:19 + 01:00 [严重]致命错误:耗尽的内存容量为268435456字节(试图分配98570240字节)

我通过在 php.ini 中将 memory_limit 设置为 512M 解决了

的问题,但是呼叫接听时间太长。使用Postman可以完全关闭窗口。

我将 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实体具有基本属性: 标题:字符串, 类型:字符串, 用户:与用户实体的ManyToOne关系

数据库:Mysql。

2 个答案:

答案 0 :(得分:0)

在存储库调用之后尝试转储$ annonces,真的有一个轻量级的对象吗?尝试通过

获得一个公告
$annonces = $manager->getRepository(Annonces::class)->find(1);

在这里您需要具有关系的学说实体吗?如果没有,请尝试获取内容的数组

$qb = $manager->createQueryBuilder();
$annonces = $qb->select('a')->from(Annonces::class, 'a')->getQuery()->getResult(\PDO::FETCH_ASSOC);

答案 1 :(得分:0)

如果在没有任何源代码更改的情况下发生问题,则表示问题是从一开始就出现的,但是您所察觉的范围并不大。

我的第一枪是检查数据库关系。例如,如果您具有一个OneToMany关系,该关系为fetch =“ EAGER”或fetch =“ LAZY”,并且您在右侧表中有很多元素,则它将减慢查询左侧表的速度。您可以做一个简单的检查,就是在Annonces实体中的每个OneToMany和ManyToMany关系中添加fetch =“ EXTRA_ LAZY”时出现问题。

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

如果这无济于事,建议您检查表索引。