Bug #75579 [Com]: All Interned Strings Free memory used and PHP crashes

From: Date: Thu, 21 Dec 2017 09:50:08 +0000
Subject: Bug #75579 [Com]: All Interned Strings Free memory used and PHP crashes
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-213200@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=75579&edit=1

 ID:                 75579
 Comment by:         post at minhost dot no
 Reported by:        post at minhost dot no
 Summary:            All Interned Strings Free memory used and PHP
                     crashes
 Status:             Analyzed
 Type:               Bug
 Package:            opcache
 Operating System:   CentOS 7.4
 PHP Version:        7.1.12
 Assigned To:        dmitry
 Block user comment: N
 Private report:     N

 New Comment:

@dmitry: I have now tested in PHP 7.1.11, and the behaviour is the same as with PHP 7.1.13 RC1 +
your patch. When there is not enough memory left in opcache, then  new files will also not be cached
in file cache on disk. So that is not a bug.

I have tested your patch thorough now, and it seems to work correct, PHP no longer crashes. It
works! Please add your patch to the 7.x branch. It would be fantastic if we could get the patch
already in PHP 7.1.13 and PHP 7.0.27 in january 2018! Thanks!


Previous Comments:
------------------------------------------------------------------------
[2017-12-21 09:44:28] post at minhost dot no

@spam2: I am happy with the current way OOM and restart works. Every night opcache memory is
completely emptied anyhway when apache and php-fpm is reloaded. Also that discussion is off-topic to
this bug report.

------------------------------------------------------------------------
[2017-12-21 09:35:05] spam2 at rhsoft dot net

> OOM shouldn't necessary lead to "restart". Only in case 
> of "wasted" memory. Otherwise you would fill and trash 
> SHM continuously

the problem with this is if something spiders over the server and calls a ton of normally not often
called URLs opcache may get filled with irrelevant stuff while there is no space for current real
workload and that degrades performance serious

automatic fill and trash would fix that - with the current behavior you need to manually reload

------------------------------------------------------------------------
[2017-12-21 09:16:22] post at minhost dot no

@dmitry: Thanks for the patch for PHP 7.1, however your patch: https://gist.github.com/dstogov/c84a2579600db45282e49cbd4624f7a0
looks identical to the patch @nikic created at https://gist.github.com/nikic/31e8e4510a0ed84cea543b50d78ae431
- it was already @nikic patch I tested. So there is now new change in your patch for PHP 7.1

At the moment I am not 100% sure that previous behaviour of PHP 7.1.11 was to cache all files in
disk even when there was no opcache memory left. So I will test it in PHP 7.1.11 now to see if it is
a new bug with the patch or not. I will let you know.

------------------------------------------------------------------------
[2017-12-21 08:46:26] dmitry@php.net

OOM shouldn't necessary lead to "restart". Only in case of "wasted" memory.
Otherwise you would fill and trash SHM continuously.


Anyway, thanks for perseverance and try the next version of the patch
https://gist.github.com/dstogov/c84a2579600db45282e49cbd4624f7a0
(it's for PHP-7.1)

------------------------------------------------------------------------
[2017-12-20 19:07:37] post at minhost dot no

I have tested now by using the patch from @nikic: https://gist.github.com/nikic/31e8e4510a0ed84cea543b50d78ae431
- I used the patch on PHP 7.1.13 RC1

PHP no longer crashes, so that problem seem to be solved. However there is a new problem with
physical file cache when using this patch. Previous all PHP files would be physical cached in
/home/USERNAME/.opcache/ - but after applying the patch, it seems PHP files is only physical cached
up to the point when there is not enough free memory in opcache left.

On test server I have this in PHP info page when physical of new PHP files stop to cache new files:

Used memory	129591600
Free memory	592

Also so far there seem to be now more OOM restarts when there is not enough free memory. It just
does not empty the cache anymore it seems.

Back to the new problem with physical. On the test server I have 9 wordpress sites. After applying
the patch, I started visiting one after the other, including logging into wordpress control panel on
each of them. Wordpress site 1 to 4 was cached in physical file cache, then after visiting the rest
of the wordpress sites, none of them would be cached in physical opcache.

So, please enable both normal opcache in memory and physical file cache, then visit enough sites to
use almost all opcache memory, then opcache no longer restart and free up the memory, and also new
PHP pages you visit will no longer be cached in physical file cache.

So this patch solved PHP crashes, but create new bugs.

------------------------------------------------------------------------


The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at

    https://bugs.php.net/bug.php?id=75579


--
Edit this bug report at https://bugs.php.net/bug.php?id=75579&edit=1


Thread (52 messages)

« previous php.bugs (#213200) next »