Contenu connexe
Similaire à Doctrineのメモリーリークについて
Similaire à Doctrineのメモリーリークについて (20)
Doctrineのメモリーリークについて
- 2. • :
•twitter: tsatoppejp
•Facebook: tsatoppejp
• : 2006 2010
- 6. ...
• PHP (PHP5.3 )
• Doctrine
• Doctrine ( )
- 9. Doctrine
• 4682 Symfony1.4.3 task sfDoctrinePager 100
• Doctrine::HYDRATE_ARRAY( )
• PHP PHP 5.2.14 PHP 5.3.5
• AWS EC2 small instance(32 1.7 GB 1 160GB )
- 10. Doctrine
$pager = new sfDoctrinePager('User', 100);
$q = Doctrine_Query::create()->from('User u');
$pager->setPage(1);
$pager->setQuery($q);
$pager->init();
while ($pager->getResults()->count()) {
foreach ($pager->getResults() as $user) {
$user_id = $user->getId();
// foreach ($pager->getResults(Doctrine::HYDRATE_ARRAY) as $user) {
// $user_id = $user[‘id’];
}
$page = $pager->getPage();
$page++;
$pager->setPage($page);
...
}
- 11. Doctrine
40000000
PHP5.2.14 Object
PHP5.2.14 Object free()
PHP5.2.14 Array
PHP5.3.5 Object
PHP5.3.5 Object free()
PHP5.3.5 Array
30000000
20000000
10000000
0
100 300 500 700 900 1100 1300 1500 1700 1900 2100 2300 2500 2700 2900 3100 3300 3500 3700 3900 4100 4300 4500 4700
- 12. Doctrine
PHP5.2.14 Object 7.498278141
PHP5.2.14 Object free() 8.2011160851
PHP5.2.14 Array 6.247120142
PHP5.3.5 Object 7.4590570927
PHP5.3.5 Object free() 7.5311901569
PHP5.3.5 Array 5.9629459381
0 2.25 4.50 6.75 9.00
( )
- 13. • $user->free()
• Doctrine::HYDRATE_ARRAY( )
Doctrine::HYDRATE_ARRAY
( )
• $user->free() unset($user) gc_collect_cycles() Doctrine1
PHP5.2 5.3
- 14. Doctrine2
$dql = "SELECT u FROM EntitiesUser u";
$query = $em->createQuery($dql);
$iterableResult = $query->iterate();
$i = 0;
foreach($iterableResult AS $row) { // PDOStatement::fetch()
$user_id = $row[0]->getId();
...
if ($i % 150 == 0) {
$em->flush();
$em->clear();
}
$i++;
}
- 15. Doctrine2
15000000
Doctrine2
Doctrine2 clear()
11250000
7500000
3750000
0
100 300 500 700 900 1100 1300 1500 1700 1900 2100 2300 2500 2700 2900 3100 3300 3500 3700 3900 4100 4300 4500 4700
- 16. Doctrine2
Doctrine2 2.8972089291
Doctrine2 clear() 2.8944861889
0.003
2.89300 2.89425 2.89550 2.89675 2.89800
( )
- 17. 40000000
PHP5.2.14 Object
PHP5.2.14 Object free()
PHP5.2.14 Array
PHP5.3.5 Object
PHP5.3.5 Object free()
PHP5.3.5 Array
Doctrine2
Doctrine2 clear()
30000000
20000000
10000000
0
100 300 500 700 900 1100 1300 1500 1700 1900 2100 2300 2500 2700 2900 3100 3300 3500 3700 3900 4100 4300 4500 4700
- 18. PHP5.2.14 Object 7.498278141
PHP5.2.14 Object free() 8.2011160851
PHP5.2.14 Array 6.247120142
PHP5.3.5 Object 7.4590570927
PHP5.3.5 Object free() 7.5311901569
PHP5.3.5 Array 5.9629459381
Doctrine2 2.8972089291
Doctrine2 clear() 2.8944861889
0 2.25 4.50 6.75 9.00
( )
- 19. • Doctrine1 PHP5.3
• Doctrine1 select free()
• Doctrine2 clear() (
)
• Doctrine2
- 20. Doctrine1
$pager = new sfDoctrinePager('User', 100);
$q = Doctrine_Query::create()->from('User u');
$pager->setPage(1);
$pager->setQuery($q);
$pager->init();
while ($pager->getResults()->count()) {
foreach ($pager->getResults() as $user) {
$command = sprintf(“/path/to/symfony execute:task %d”, $user->getId());
`$command`; //
$user->free();
}
$page = $pager->getPage();
$page++;
$pager->setPage($page);
...
}