Symfony /主义消耗大量内存,出现内存不足错误

时间:2019-07-02 12:58:55

标签: php apache symfony doctrine

我想从表中获取数据并将其编码为json。我正在使用主义和querybuilder选择我想要的数据(基本上是表中的所有内容)。问题是,在开发人员中,一切正常,但是当我进入产品时,出现错误:PHP致命错误:内存不足...

我正在检索的数据最多为300KB。 在这种情况下,我使用路由来检索 project (600B)的列表,它是最小的表之一。 该表具有两个 OneToMany 关联。

The database looks like this

我正在检索的数据如下:

[
  {
   id: "bar",
   name: "bar",
   description: "bar",
   project_date_start: "2022-01-01 00:00:00",
   project_date_end: "2019-05-21 12:19:27"
  },
  {
   id: "foo",
   name: "foo",
   description: "foo",
   project_date_start: "2021-02-02 00:00:00",
   project_date_end: "2022-02-02 00:00:00"
  }
]

该学说的querybuilder和函数:

    public function findAllProject()
    {
        return $this->createQueryBuilder('p')
            ->select('p.id', 'p.name', 'p.description', 'p.project_date_start', 'p.project_date_end')
            ->getQuery()
            ->getResult()
        ;
    }
        public function project(Request $request)
        { 
            $em = $this->getDoctrine()->getEntityManager();

            $projectRepo = $this->getDoctrine()->getRepository(Project::class);

            $project = $projectRepo->findAllProject();

            $data = $this->get('jms_serializer')->serialize($project, 'json');

            $response = new Response($data);
            $response->headers->set('Content-Type', 'application/json');
            $response->headers->set('Access-Control-Allow-Origin', '*');

            return $response;
        }

我已经尝试过:
-在服务器上重新安装Apache
-在php.ini中更改memory_limit的值
-不使用 jms_serialiser 而是使用 json_encode

编辑

所以绝对不是从序列化程序来的错误,因为从存储库( findAllProject())获取数据时抛出了错误。

我设法通过减少要检索的数据来使其正常工作,但这不是解决方案,因为我需要所有数据,并且正如我所说的 project 是最小的表之一,那我什么时候需要检索更大的数据呢?

如果我要从symfony获取数据,也许不是symfony而是apache,是什么原因导致此错误?

此外,从queryBuilder生成的SQL很好(只是普通选择)

END EDIT

我认为这不是json编码部分的问题,也不是apache服务器配置问题(内存限制为-1)。

我认为 project 表的关联使所有事情搞砸了,而学说则试图遍历所有数据库。也许我的数据库设计有问题?
例如,表 type project 的大小相同,但没有内存不足错误。

我不知道还能尝试什么,知道吗?

1 个答案:

答案 0 :(得分:0)

因此,我从头开始重新安装服务器,然后重新启动项目,该服务器正常运行,所以我不知道是什么导致了此问题。