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

Brian Inglis Brian.Inglis@SystematicSw.ab.ca
Sat Jul 18 17:32:12 GMT 2020


On 2020-07-18 09:33, km2z7kca0oge--- via Cygwin wrote:
>> You told us nothing about what versions of Windows, Cygwin, and PHP you are running, so WAG, either:
> Wow Brian, what a rude response. I definitely followed the problem reporting guide, and didn't realise you'd need information overload that probably doesn't relate to the case at hand. When reporting bugs I always give as much info as I believe is needed in helping, there's no need to snap.

You did not specify Windows, Cygwin, Web server type, PHP, or Zend versions or
include the *required* cygcheck.out attachment which shows all this.

Many problems are because Cygwin and/or package releases have not been upgraded
for weeks, months, or even years, or reports do not include verbatim commands
and output, which may contain or clearly show symptoms of obvious errors, or
suggest a reproducible test case.

Most problems are unique to the reporter's system, otherwise others would have
reported it, and it would be known, and possibly fixed by volunteer maintainers.

More information than one might think is often required to diagnose the problem
with your unique situation and suggest a solution or provide a fix.

Many of the most knowledgeable and experienced volunteers providing support will
not even look at emails which don't attach a plain text cygcheck.out, from which
they can often diagnose a problem, suggest a workaround, further diagnostic
steps, or provide a fix.

Others of us try to nudge people into providing sufficient information so that
those with the most relevant knowledge and experience may take a look at the
issue, if they have time available, and suggest a further diagnostic,
configuration change, or provide a fix.

> I gave lots of information, such as:
>   - It applies to all bundled versions of PHP from the `setup-x86-64.exe`.
>   - That I've reproduced it on multiple (two) machines, including one of those being a machine that has never had (and so a fresh install of) Cygwin with just PHP added.
>   - Compiling PHP from source doesn't produce this issue so it's something to do with the bundled version only
> 
> For extra information, both machines tested are:
>   - Windows 10 64-bit (10.0.18363)
>   - One machine is 16GB, the other 8GB RAM.
>   - All PHP versions from the `setup-x86-64.exe` (7.3.4-1 and 7.1.16-1)

>From below it appears you have also tested current PHP 7.3.7 with Zend 3.3.7.

One common issue with Cygwin installations causing memory problems is when
autorebase has not run or completed properly, so please try the following
command on a failing Cygwin installation:

$ awk '/0p_000_autorebase.dash"/,/zp_/' /var/log/setup.log.full

and if you see the message:

"The following DLLs couldn't be rebased because they were in use:"

followed by a number of DLLs, please run:

$ rebase-trigger full

then ensure *ALL* Cygwin services and process are shut down:
Win-R/taskmgr /7 OR ctrl-shift-esc - run Task Manager/select Details tab,
right-click on column headings/Select columns/check Image path name/OK if required,
sort by Image path name and see nothing starts with Cygwin installation root path,
[possibly select menu Options/Set default tab/Details for next time,] and Exit),
then rerun the Cygwin Setup program, and ensure that autorebase runs
successfully to completion, as above.

Another issue can be Windows memory management, so sometimes a system restart
will resolve memory related problems, or if your system is under extreme memory
loading at times (too little available/free) and you experience unexpected
issues under load, you need to change Virtual memory paging management from
Automatic to Custom by following:
press Win-Break keys/select Advanced tab/select Performance Settings... button/
/select Advanced tab/select Virtual memory Change... button/
/Uncheck Automatically manage paging file size.../
/select a drive from the list/select Custom size/
/Initial size (MB)/8192 (or 16384 depending on memory size)/
/Maximum size (MB)/16384 (or 32768 depending on memory size)/
/select *Set* button [essential!]/repeat with other drive(s)/select OK button (3
times) to close dialogue boxes, then Exit System control panel.

>> - you have defaulted to or specified a PHP configuration limit of 4MB memory for PHP tasks, or
> Nope, as shown in the output of my example, the memory limit is set to 128MB:
>> Output:
>> $ php test.php
>> 128M <--- This here shows the configured memory limit
>> PHP Fatal error:  Out of memory (allocated 4194304) (tried to allocate 2097184 bytes) in /c/Users/JackBlower/tmp-safe/test.php on line 5
> 
>> including copying verbatim all error messages seen
> Here, the message was included in my initial email: > PHP Fatal error:  Out of memory (allocated 4194304) (tried to allocate 2097184 bytes) in /c/Users/JackBlower/tmp-safe/test.php on line 5
> 
>> - if you're running 32 bit Cygwin, possibly under 32 bit Windows, you have probably run out of heap space from installing too many packages requiring too many DLLs.
> Nope all 64-bit, I would've mentioned if not.
> 
>> and PHP build configurations and logs.
> See the output below for some more info, either way this is a pre-packaged version of PHP with very little changed from default configuration.
> 
> ------------------------------
>> Greetings, km2z7kca0oge--- via Cygwin!
> Hey Andrey,
> 
> I've tried your script and I hit the 128MB limit, as expected. So maybe it's to do with the `http` wrapper. Could you try my version of the script please and see how you get on?
> 
> I first bumped into this problem when I rolled back from composer 2.X to 1.X which uses more memory.
> 
> I generated an 800MB file using: ` fsutil file createnew 800mega 838860800` and then ran your script you provided substituting your backup for the 800 MB file I generated.
> 
> The output of the script is below:
> ```
> $ ./test-mailing-list.php
> #!/usr/bin/env php
> <?= file_get_contents(__FILE__);
> phpinfo(1);
> echo ini_get('memory_limit'), "\n";
> print number_format(strlen(file_get_contents('800mega')));
> phpinfo();
> phpinfo()
> PHP Version => 7.3.7
> 
> System => CYGWIN_NT-10.0-18363 AML0147 3.1.6-340.x86_64 2020-07-09 08:20 UTC x86_64
> Build Date => Jul 21 2019 16:57:32
> Server API => Command Line Interface
> Virtual Directory Support => disabled
> Configuration File (php.ini) Path => /etc
> Loaded Configuration File => /etc/php.ini
> Scan this dir for additional .ini files => /etc/php.d
> Additional .ini files parsed => /etc/php.d/bcmath.ini,
> /etc/php.d/bz2.ini,
> /etc/php.d/curl.ini,
> /etc/php.d/fileinfo.ini,
> /etc/php.d/gd.ini,
> /etc/php.d/gmp.ini,
> /etc/php.d/intl.ini,
> /etc/php.d/json.ini,
> /etc/php.d/ldap.ini,
> /etc/php.d/mbstring.ini,
> /etc/php.d/pdo_mysql.ini,
> /etc/php.d/pdo_pgsql.ini,
> /etc/php.d/pdo_sqlite.ini,
> /etc/php.d/phar.ini,
> /etc/php.d/posix.ini,
> /etc/php.d/simplexml.ini,
> /etc/php.d/sockets.ini,
> /etc/php.d/sodium.ini,
> /etc/php.d/sqlite3.ini,
> /etc/php.d/tokenizer.ini,
> /etc/php.d/vld.ini,
> /etc/php.d/xmlwriter.ini,
> /etc/php.d/zip.ini,
> /etc/php.d/zlib.ini
> 
> PHP API => 20180731
> PHP Extension => 20180731
> Zend Extension => 320180731
> Zend Extension Build => API320180731,NTS
> PHP Extension Build => API20180731,NTS
> Debug Build => no
> Thread Safety => disabled
> Zend Signal Handling => enabled
> Zend Memory Manager => enabled
> Zend Multibyte Support => provided by mbstring
> IPv6 Support => enabled
> DTrace Support => disabled
> 
> Registered PHP Streams => https, ftps, php, file, glob, data, http, ftp, compress.bzip2, compress.zlib, zip, phar
> Registered Stream Socket Transports => tcp, udp, unix, udg, ssl, sslv3, tls, tlsv1.0, tlsv1.1, tlsv1.2
> Registered Stream Filters => string.rot13, string.toupper, string.tolower, string.strip_tags, convert.*, consumed, dechunk, bzip2.*, zlib.*
> 
> This program makes use of the Zend Scripting Language Engine:
> Zend Engine v3.3.7, Copyright (c) 1998-2018 Zend Technologies
> 128M
> PHP Fatal error:  Allowed memory size of 134217728 bytes exhausted (tried to allocate 838869024 bytes) in /c/Users/JackBlower/tmp-safe/test-mailing-list.php on line 5
> ```
> 
> Notice how this time it's running out of memory at 128MB and has the "Allowed memory size" error instead of the "Out of memory" error from before.

-- 
Take care. Thanks, Brian Inglis, Calgary, Alberta, Canada

This email may be disturbing to some readers as it contains
too much technical detail. Reader discretion is advised.
[Data in IEC units and prefixes, physical quantities in SI.]


More information about the Cygwin mailing list