symfony2 free -m内存不足

时间:2013-05-04 09:33:47

标签: memory symfony ram

我有symfony2应用程序。但是我们有RAM内存问题......当有50个活跃的人(谷歌分析)时它就像一个魅力。

我通常会从DB中选择数据:

        $qb=$this->createQueryBuilder('s')
         ->addSelect('u')
         ->where('s.user = :user')
         ->andWhere('s.admin_status = false')
         ->andWhere('s.typ_statusu != :group')
         ->setParameter('user', $user)
         ->setParameter('group', 'group')
         ->innerJoin('s.user', 'u')               
         ->orderBy('s.time', 'DESC')
         ->setMaxResults(15);

 return $query=$qb->getQuery()->getResult();

查询很快我没有问题。

请让我知道你需要什么,我会把它贴在这里。我需要修理它......

但问题是现在:当同时有470人时......(谷歌分析)大约有7GB的内存......然后它会在达到峰值后下降到5GB。但为什么这么多???我的脚本在app_dev中占用了10-17MB的内存。

我也使用APC。我该如何解决这种情况?为什么会消耗这么多内存?感谢任何建议!!

你的平均记忆是什么?

顺便说一句:当我不解决这个问题时,我将遇到大麻烦。

5 个答案:

答案 0 :(得分:1)

一个问题可能是学说,如果你在每一个请求中给太多的物体补充水分。

答案 1 :(得分:1)

将脚本的最长执行时间设置为仅30秒:

max_execution_time = 30

将APC shm_size设置为与内存相比合理的值:

apc.shm_size = 256M

然后优化您的查询。如果你在cli中使用php / symfony,你最好也限制cli中php的资源使用。

答案 2 :(得分:1)

确保您正确理解内存消耗。 http://blog.scoutapp.com/articles/2010/10/06/determining-free-memory-on-linux

要快速启动Apc,您可以使用apc.stat = 0删除已修改的支票,但每次修改现有文件时都需要清除apc-cache:http://www.php.net/manual/en/apc.configuration.php#ini.apc.stat

为了减少记忆消耗,减少水合作用,我添加->select('x')并仅获取必需品。

优化内存消耗启用mysql-cache,比如/etc/mysql/my.cnf:

query_cache_size=128M
query_cache_limit=1M

不要忘记启用并检查慢查询日志以避免瓶颈。

答案 3 :(得分:1)

我怀疑您的网页有多个查询。页面上发生了多少次查询?该学说中最糟糕的是通过getter(例如getComments())进行查询的能力。如果您使用的是多对多关系,则会导致巨大的问题。您可以在开发环境中通过探查器查看所有查询。

也可能,在apache或php的设置中出现问题。 php-fpm的设置不正确也会导致问题。最好的解决方案是使用siege等工具对服务器进行压力测试,然后查看通过htop或top进行的操作。 300个人可能是“赤裸裸的”阿帕奇的沉重负担

答案 4 :(得分:1)

您是否尝试过检索标量结果而不是对象集合?

// [...]
return $query=$qb->getQuery()->getScalarResult();

http://docs.doctrine-project.org/en/latest/reference/query-builder.html#executing-a-query http://doctrine-orm.readthedocs.org/en/2.0.x/reference/dql-doctrine-query-language.html#query-result-formats

在symfony配置级别,您是否仔细检查了配置以确保已正确启用缓存?

http://symfony.com/doc/current/reference/configuration/doctrine.html#caching-drivers

根据您的整体流程,从实体经理中分离实体可能会很有用:

http://docs.doctrine-project.org/en/2.0.x/reference/working-with-objects.html#detaching-entities