Edit report at https://bugs.php.net/bug.php?id=60785&edit=1
ID: 60785 Updated by: cataphr...@php.net Reported by: tim at digicol dot de Summary: Memory leak in IntlDateFormatter constructor -Status: Open +Status: Assigned Type: Bug Package: I18N and L10N related Operating System: Linux 2.6.32 x86_64 CentOS 6.2 PHP Version: 5.3.9 -Assigned To: +Assigned To: cataphract Block user comment: N Private report: N Previous Comments: ------------------------------------------------------------------------ [2012-01-31 10:15:35] tim at digicol dot de unset() doesnât help, it still leaks memory. (I had already tried this. In my understanding, reusing the $fmt variable should effectively unset the old instance anyway.) ------------------------------------------------------------------------ [2012-01-27 22:15:09] carloschilazo at gmail dot com If you unset the variable right after you create it, does the memory usage still increases? <?php printf("Run 'top -p %s' in another shell to watch memory usage grow...\n", posix_getpid()); for ($i = 1; $i < 500000; $i++) { $fmt = new IntlDateFormatter ( 'en_US', IntlDateFormatter::SHORT, IntlDateFormatter::NONE ); unset($fmt); } ?> ? ------------------------------------------------------------------------ [2012-01-17 22:34:18] tim at digicol dot de The phpinfo "intl" section says: Internationalization support => enabled version => 1.1.0 ICU version => 4.2.1 ------------------------------------------------------------------------ [2012-01-17 22:14:51] tim at digicol dot de Description: ------------ Each time I create a new IntlDateFormatter instance, PHP 5.3.9 leaks memory. You can see in "top" that the RES column (resident size) keeps growing as long as the script is running; up to more than 500 MB for my example. (By the way, memory_get_usage() and the PHP memory limit don't report or act on this.) I've noticed this because we're using long-running scripts with the PHP CLI - they eventually die when too much memory is used. This happens to me with older 5.3.x versions as well. I tested with PHP 5.3.9 built with "./configure --enable-intl" on 64bit CentOS 6.2, running in VMware Fusion on my Mac. Thanks for looking into this, and for the great work on PHP! Test script: --------------- <?php printf("Run 'top -p %s' in another shell to watch memory usage grow...\n", posix_getpid()); for ($i = 1; $i < 500000; $i++) { $fmt = new IntlDateFormatter ( 'en_US', IntlDateFormatter::SHORT, IntlDateFormatter::NONE ); } ?> Expected result: ---------------- [digicol@dcxcentos6vm ~]$ /usr/local/src/php-5.3.9/sapi/cli/php leak.php Run 'top -p 7211' in another shell to watch memory usage grow... [digicol@dcxcentos6vm ~]$ top -p 7211 top - 00:13:05 up 12:37, 3 users, load average: 0.34, 0.26, 0.34 Tasks: 1 total, 0 running, 1 sleeping, 0 stopped, 0 zombie Cpu(s): 10.1%us, 3.7%sy, 0.0%ni, 79.7%id, 6.1%wa, 0.1%hi, 0.3%si, 0.0%st Mem: 2054984k total, 1515064k used, 539920k free, 111760k buffers Swap: 511992k total, 511992k used, 0k free, 121912k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 7211 digicol 20 0 406m 21m 10m S 0.0 1.1 0:00.06 php Actual result: -------------- [digicol@dcxcentos6vm ~]$ /usr/local/src/php-5.3.9/sapi/cli/php leak.php Run 'top -p 7211' in another shell to watch memory usage grow... [digicol@dcxcentos6vm ~]$ top -p 7211 top - 00:01:18 up 12:26, 3 users, load average: 0.95, 0.65, 0.50 Tasks: 1 total, 1 running, 0 sleeping, 0 stopped, 0 zombie Cpu(s): 96.0%us, 3.3%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.3%hi, 0.3%si, 0.0%st Mem: 2054984k total, 1985784k used, 69200k free, 68784k buffers Swap: 511992k total, 511860k used, 132k free, 122068k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 7211 digicol 20 0 908m 524m 10m R 97.9 26.2 1:15.58 php ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=60785&edit=1