Php Symfony/doctrine占用大量内存,内存不足错误

Php Symfony/doctrine占用大量内存,内存不足错误,php,apache,symfony,doctrine,Php,Apache,Symfony,Doctrine,我想从表中获取数据并用json编码。我正在使用doctrine和querybuilder来选择我想要的数据(基本上是表中的所有内容)。问题是在dev中,一切都很好,但是当我转到prod时,我得到了一个错误:PHP致命错误:内存不足 我正在检索的数据最多为300KB。 在本例中,我使用一个路由来检索项目列表(600B),它是最小的表之一。 这张桌子有两个一对一的联想 我正在检索的数据如下所示: [ { id: "bar", name: "bar", description:

我想从表中获取数据并用json编码。我正在使用doctrine和querybuilder来选择我想要的数据(基本上是表中的所有内容)。问题是在dev中,一切都很好,但是当我转到prod时,我得到了一个错误:PHP致命错误:内存不足

我正在检索的数据最多为300KB。 在本例中,我使用一个路由来检索项目列表(600B),它是最小的表之一。 这张桌子有两个一对一的联想

我正在检索的数据如下所示:

[
  {
   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"
  }
]
条令的查询生成器和功能:

    public function findAllProject()
    {
        return $this->createQueryBuilder('p')
            ->select('p.id', 'p.name', 'p.description', 'p.project_date_start', 'p.project_date_end')
            ->getQuery()
            ->getResult()
        ;
    }
我试过:
-在服务器上重新安装Apache
-更改php.ini中内存限制的值
-不使用jms_serialiser,而是使用json_encode

编辑

因此,错误肯定不是从序列化程序提交的,因为错误是在我从存储库(findAllProject())获取数据时抛出的

我已经设法通过减少我正在检索的数据来实现它,但这不是一个解决方案,因为我需要所有的数据,正如我所说的,project是最小的表之一,那么当我需要检索更大的数据时呢

如果我从symfony获取数据,可能不是symfony而是apache,是什么导致了这个错误

此外,从queryBuilder生成的SQL提交也很好(只是一个普通的选择)

结束编辑

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

我认为项目表的关联把一切都搞乱了,条令试图遍历所有数据库。我的数据库设计可能有问题?
例如,表类型与project的大小相同,但没有内存不足错误


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

所以,我从头开始重新安装服务器,然后我的项目成功了,所以我不知道是什么导致了这个问题。

所以,我从头开始重新安装服务器,然后我的项目成功了,所以我不知道是什么导致了这个问题。

看起来您只是在处理一个实体,而不是它的任何关联,所以从删除
开始选择
并使用
getResult(Query::hydrome\u ARRAY/hydrome\u SIMPLEOBJECT)
。更重要的是,您正在对从DB获取的所有内容(所有项目)运行序列化程序,这更像是一种“灾难等待发生”类型的实践-不要这样做!我试着使用
getResult(Query::hydrome\u ARRAY/hydrome\u SIMPLEOBJECT)
,但无法使其工作,您有没有解释如何使用它的链接?我对symfony/document很陌生。那么,处理序列化的最佳方法是什么?因为“project”数组非常小,而对象本身非常简单,我不认为这对jms\u serialiser来说是个问题。出于好奇谢谢您:您是否尝试过将开发机器上的env设置为“prod”,如果可以,请检查使用了多少内存。我是说,也许你的服务器内存太少了。如果它实际上不是这么大的内存量:我从另一个人那里读过一次,在php可执行文件中有一个小翻转,每当他序列化内容时就会导致内存不足。所以。。。您可以尝试重新安装php…如果序列化程序行出现内存不足的情况:尝试(出于测试目的)其他序列化,例如仅调用json_encode、print_r、var_dump、var_export…我已经在本地机器上测试了产品配置,效果良好。正如我在帖子中所说,我已经尝试过不同的序列化方式,我不认为这是一个序列化问题,因为我在获取数据时会出现错误。看起来您只是处理单个实体,而不是它的任何关联,所以请先删除
选择
并使用
getResult(Query::hydrome\u ARRAY/hydrome\u SIMPLEOBJECT)
。更重要的是,您正在对从DB获取的所有内容(所有项目)运行序列化程序,这更像是一种“等待发生的灾难”类型的实践-不要这样做!我尝试使用
getResult(Query::hydrome\u ARRAY/hydrome\u SIMPLEOBJECT)
但是无法让它工作,你有一个链接来解释如何使用它吗?我对symfony/doctor很陌生。那么处理序列化的最佳方法是什么呢?因为“project”数组非常小,对象本身非常简单,我不认为这对jms\u serialiser来说是个问题。谢谢你只是出于好奇:你有没有ied将开发计算机上的环境设置为“prod”如果可以的话,检查有多少内存被使用。我的意思是,也许你的服务器实际上内存太少了。如果不是这么大的内存量:我从另一个人那里读过一次,php可执行文件中有一个小翻转,每当他序列化东西时就会导致内存不足。所以……你可以尝试重新安装php…如果序列化程序行出现内存不足:try(用于测试)其他序列化,比如只调用json_encode、print_r、var_dump、var_export……我已经在本地机器上测试了产品配置,效果很好。正如我在帖子中所说,我已经尝试了不同的序列化方式,我不认为这是序列化问题,因为我在获取数据时遇到了错误。
        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;
        }