我在我的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);
提前致谢。
答案 0 :(得分:0)
首先检查mysql的wait_timout变量。来自文档:
Wait_timeout:服务器等待活动的秒数 关闭之前的非交互式连接。
在正常流程中(不使用持久连接),php会在脚本执行后自动关闭连接。确保没有睡眠线;在脚本的末尾只需关闭连接:
$entityManager->getConnection()->close();
如果这些查询在big / for循环中运行,您可能需要阅读doctrine 2 batch processing文档。