Cygwin PHP (all available versions) has a hard 4MB memory limit

Cary Lewis cary.lewis@gmail.com
Tue Aug 4 01:57:23 GMT 2020


I am running php on two different Windows 10 computers, and on one machine
I can run composer with no issues, but on other I get our of memory issues.

Both report:

 php -v
PHP 7.3.7 (cli) (built: Jul 21 2019 18:10:35) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.7, Copyright (c) 1998-2018 Zend Technologies

but trying to execute:

composer require twilio/sdk

on one of the machines results in this:

PHP Fatal error:  Out of memory (allocated 38273024) (tried to allocate
2098524 bytes) in
phar:///usr/bin/composer/src/Composer/Util/RemoteFilesystem.php on line 459

Fatal error: Out of memory (allocated 38273024) (tried to allocate 2098524
bytes) in phar:///usr/bin/composer/src/Composer/Util/RemoteFilesystem.php
on line 459

md5sum of /us/bin//php is the same on both computers.



On Tue, Jul 21, 2020 at 4:45 PM Ken Brown via Cygwin <cygwin@cygwin.com>
wrote:

> On 7/18/2020 10:11 PM, Ken Brown via Cygwin wrote:
> > On 7/17/2020 5:39 PM, km2z7kca0oge--- via Cygwin wrote:
> >> Hi there,
> >>
> >> Recently I've noticed that PHP seems have to hard 4MB memory limit,
> >
> > [...]
> >
> >> Example script:
> >> ```
> >> <?php
> >>
> >> echo ini_get('memory_limit'), "\n";
> >>
> >> file_get_contents('
> http://mirror.cwcs.co.uk/centos/8.2.2004/isos/x86_64/CentOS-8.2.2004-x86_64-dvd1.iso');
>
> >> // A large file such as an ISO.
> >> ```
> >>
> >> Output:
> >> $ php test.php
> >> 128M
> >> PHP Fatal error:  Out of memory (allocated 4194304) (tried to allocate
> 2097184
> >> bytes) in /c/Users/JackBlower/tmp-safe/test.php on line 5
> >
> > Thanks for the simple reproduction steps.  I've run this under gdb, and
> the
> > function zend_mm_alloc_huge, which tries to get a chunk of memory from
> the
> > system, seems to be failing when it tries to increase the zend heap from
> 4MB to
> > 6MB.  I'm in the process of building an unoptimized version of php to
> make
> > debugging easier, in the hope of figuring out why the function is
> failing.
>
> The problem is that some mmap calls are failing, for two reasons.  The
> first
> (and less important) is a Cygwin bug, which is now fixed:
>
>
> https://cygwin.com/git/?p=newlib-cygwin.git;a=commit;h=d8a8d2ce5953af3383aff019596bdf7f7aef6c41
>
> The second is that mmap is sometimes called with MAP_FIXED, and these
> calls may
> fail.  But these calls occur only because of the following hunk of the
> patch
> 7.1.9-malloc-cygwin.patch, which is used in the Cygwin build of php:
>
> --- origsrc/php-7.1.9/Zend/zend_alloc.c 2017-08-30 11:13:20.000000000 -0500
> +++ src/php-7.1.9/Zend/zend_alloc.c     2017-09-26 21:43:38.087650400 -0500
> @@ -719,7 +719,7 @@ static void *zend_mm_chunk_alloc_int(siz
>                 /* chunk has to be aligned */
>                 zend_mm_munmap(ptr, size);
>                 ptr = zend_mm_mmap(size + alignment - REAL_PAGE_SIZE);
> -#ifdef _WIN32
> +#if defined(_WIN32) || defined(__CYGWIN__)
>                 offset = ZEND_MM_ALIGNED_OFFSET(ptr, alignment);
>                 zend_mm_munmap(ptr, size + alignment - REAL_PAGE_SIZE);
>                 ptr = zend_mm_mmap_fixed((void*)((char*)ptr + (alignment -
> offset)), size);
>
> I don't know the reason for this hunk of the patch.  I suspect it was to
> compensate for some deficiencies in Cygwin's mmap that have since been
> fixed,
> but only Yaakov (the php maintainer) can confirm this.
>
> After rebuilding php with that hunk of the patch removed, I get the
> following
> with your test case:
>
> $ php test.php
> 128M
> PHP Fatal error:  Allowed memory size of 134217728 bytes exhausted (tried
> to
> allocate 65011744 bytes) in /tmp/test.php on line 5
>
> This seems to be what's expected, since 134217728 == 0x8000000 == 128M.
> Here's
> another example:
>
> $ php -d "memory_limit=256M" test.php
> 256M
> PHP Fatal error:  Allowed memory size of 268435456 bytes exhausted (tried
> to
> allocate 132120608 bytes) in /tmp/test.php on line 5
>
> I'll follow up on the cygwin-apps list to see if we can get a rebuilt php
> into
> the distro.
>
> Ken
> --
> Problem reports:      https://cygwin.com/problems.html
> FAQ:                  https://cygwin.com/faq/
> Documentation:        https://cygwin.com/docs.html
> Unsubscribe info:     https://cygwin.com/ml/#unsubscribe-simple
>


More information about the Cygwin mailing list