Tuesday, January 26, 2016

Re: Performance Impact of the PHP Garbage Collector

What is the impact of the garbage collector on PHP7? Learning from the blackfire.io blog that PHP 5.x could be faster without garbage collector, I made a test with the latest PHP 7.02.

Lessons learned:

  • Disabling the garbage collector makes the request 2.7 times slower with latest PHP7
  • Disabling the garbage collector makes the request 50 percent slower with latest PHP5.6

Installation:

apt-get install python-software-properties
LC_ALL=en_US.UTF-8 add-apt-repository ppa:ondrej/php
apt-get update
apt-get install php7.0-cli

Code:

<?php
// garbage.php

ini_set('memory_limit', '1024M');

function cycle() {
    $a = (object) array();
    $b = (object) array();
    $b->a = $a;
    $a->b = $b;
    return $a;
}
 
$i = 1000000;
 
while (--$i) {
    $b = cycle()->b;
}

echo number_format(memory_get_peak_usage(true)/1048576, 2).'M'.PHP_EOL;

/*
time php7 garbage.php
6.00M

real    0m0.519s
user    0m0.504s
sys     0m0.012s

time php5 garbage.php
5.00M

real    0m1.195s
user    0m1.192s
sys     0m0.000s
*/
<?php
// no_garbage.php

ini_set('memory_limit', '1024M');

gc_disable();

function cycle() {
    $a = (object) array();
    $b = (object) array();
    $b->a = $a;
    $a->b = $b;
    return $a;
}
 
$i = 1000000;
 
while (--$i) {
    $b = cycle()->b;
}

echo number_format(memory_get_peak_usage(true)/1048576, 2).'M'.PHP_EOL;

/*
time php7 no_garbage.php
814.00M

real    0m1.420s
user    0m1.132s
sys     0m0.284s

time php5 no_garbage.php
800.00M

real    0m1.867s
user    0m1.400s
sys     0m0.464s
*/

No comments:

Labels

performance (23) benchmark (6) MySQL (5) architecture (5) coding style (5) memory usage (5) HHVM (4) C++ (3) Java (3) Javascript (3) MVC (3) SQL (3) abstraction layer (3) framework (3) maintenance (3) Go (2) Golang (2) HTML5 (2) ORM (2) PDF (2) Slim (2) Symfony (2) Zend Framework (2) Zephir (2) firewall (2) log files (2) loops (2) quality (2) real-time (2) scrum (2) streaming (2) AOP (1) Apache (1) Arrays (1) C (1) DDoS (1) Deployment (1) DoS (1) Dropbox (1) HTML to PDF (1) HipHop (1) OCR (1) OOP (1) Objects (1) PDO (1) PHP extension (1) PhantomJS (1) SPL (1) SQLite (1) Server-Sent Events (1) Silex (1) Smarty (1) SplFixedArray (1) Unicode (1) V8 (1) analytics (1) annotations (1) apc (1) archiving (1) autoloading (1) awk (1) caching (1) code quality (1) column store (1) common mistakes (1) configuration (1) controller (1) decisions (1) design patterns (1) disk space (1) dynamic routing (1) file cache (1) garbage collector (1) good developer (1) html2pdf (1) internationalization (1) invoice (1) just-in-time compiler (1) kiss (1) knockd (1) legacy code (1) legacy systems (1) logtop (1) memcache (1) memcached (1) micro framework (1) ncat (1) node.js (1) openssh (1) pfff (1) php7 (1) phpng (1) procedure models (1) ramdisk (1) recursion (1) refactoring (1) references (1) regular expressions (1) search (1) security (1) sgrep (1) shm (1) sorting (1) spatch (1) ssh (1) strange behavior (1) swig (1) template engine (1) threads (1) translation (1) ubuntu (1) ufw (1) web server (1) whois (1)