教义2内存占用

时间:2013-05-18 13:15:38

标签: doctrine-orm doctrine zend-framework2

我在我的ZF2项目中使用了Doctrine 2,但是我的服务器CPU和内存出现了一些奇怪的问题。而我的服务器只是崩溃了。

我得到了很多睡眠状态查询,似乎没有得到清理。

    mysql> show processlist;
    +---------+--------------+-----------+------------------+----------------+------+--------------------+------------------------------------------------------------------------------------------------------+
    | Id | User | Host | db | Command | Time | State | Info |
    +---------+--------------+-----------+------------------+----------------+------+--------------------+------------------------------------------------------------------------------------------------------+
    | 2832346 | leechprotect | localhost | leechprotect | Sleep | 197 | | NULL |
    | 2832629 | db_user | localhost | db_exemple | Sleep | 3 | | NULL |
    | 2832643 | db_user | localhost | db_exemple | Sleep | 3 | | NULL |
    | 2832646 | db_user | localhost | db_exemple | Sleep | 3 | | NULL |
    | 2832664 | db_user | localhost | db_exemple | Sleep | 154 | | NULL |
    | 2832666 | db_user | localhost | db_exemple | Sleep | 153 | | NULL |
    | 2832669 | db_user | localhost | db_exemple | Sleep | 152 | | NULL |
    | 2832674 | db_user | localhost | db_exemple | Sleep | 7 | | NULL |
    | 2832681 | db_user | localhost | db_exemple | Sleep | 1 | | NULL |
    | 2832683 | db_user | localhost | db_exemple | Sleep | 4 | | NULL |
    | 2832690 | db_user | localhost | db_exemple | Sleep | 149 | | NULL |

(.......)

此外,似乎php GC没有清除内存中的所有对象,甚至杀死进程。 有没有办法禁用缓存系统?它会改善我的resorces的使用=

我的大多数查询类似于:

$query = $this->createQueryBuilder('i');
        $query->innerJoin('\Application\Relation', 'r', 'WITH', 'r.child = i.id');
        $query->innerJoin('\Application\Taxonomy', 't', 'WITH', 't.id = r.taxonomy');

        $query->where('t.type = :type')->setParameter('type', $relation);
        $query->groupBy('i.id');

        $items = $query->getQuery()->getResult(2);

提前致谢。

1 个答案:

答案 0 :(得分:0)

首先检查mysql的wait_timout变量。来自文档:

  

Wait_timeout:服务器等待活动的秒数   关闭之前的非交互式连接。

在正常流程中(不使用持久连接),php会在脚本执行后自动关闭连接。确保没有睡眠线;在脚本的末尾只需关闭连接:

$entityManager->getConnection()->close();

如果这些查询在big / for循环中运行,您可能需要阅读doctrine 2 batch processing文档。