symfony 4 api突然变得很慢

问题描述 投票:0回答:2

我在这里请求你帮我解决我遇到的Symfony 4问题。

事实上,我使用Symfony 4开发了一个休息API,直到今天,当API的调用变得非常慢时,一切都运行良好。

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

我通过在php.ini中将memory_limit设置为512M来解决,但是在回答之前调用时间太长。随着邮差,它完全关闭窗口。

我使用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具有基本属性:title:string,type:string,user:ManyToOne与user Entity的关系

数据库:Mysql。

php mysql symfony4 fosrestbundle jmsserializerbundle
2个回答
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);

0
投票

如果在没有任何源代码更改的情况下出现问题,则意味着它是从头开始的,但是它的比例并不是您所知的。

我的第一个镜头是检查数据库关系。例如,如果你有一个关于fetch =“EAGER”或fetch =“LAZY”的OneToMany关系,并且你在右侧表中有很多元素,它将减慢查询左侧表的速度。你可以做一个简单的检查,就是在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

如果这没有帮助,我建议你检查表索引。

© www.soinside.com 2019 - 2024. All rights reserved.