Req #80812 [Fbk->Csd]: opcache.cache_id should be PHP_INI_PERDIR
| From: | aschmidt at anamera dot net | Date: | Tue, 02 Mar 2021 15:05:42 +0000 |
| Subject: | Req #80812 [Fbk->Csd]: opcache.cache_id should be PHP_INI_PERDIR | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-232476@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=80812&edit=1
ID: 80812
User updated by: aschmidt at anamera dot net
Reported by: aschmidt at anamera dot net
Summary: opcache.cache_id should be PHP_INI_PERDIR
-Status: Feedback
+Status: Closed
Type: Feature/Change Request
Package: opcache
Operating System: Windows
PHP Version: 7.4.15
Assigned To: cmb
Block user comment: N
Private report: N
New Comment:
Two closing comments:
a) Here's my working cache_id setting which will also cover CLI environments (where an AppPool
ID doesn't exist), and further making it unique per PHP version to avoid the possibility of
version clashes:
opcache.cache_id="v"PHP_MAJOR_VERSION""PHP_MINOR_VERSION"_${APP_POOL_ID}"
b) Please do note that the necessity of the above disproves the assertion/assumption that in my
scenario there should not have been any Mutex problems in the first place.
Previous Comments:
------------------------------------------------------------------------
[2021-03-02 11:47:32] cmb@php.net
Oh, I was not aware that app pool specific enviroments are only
supported as of IIS 10. But your suggestion to use APP_POOL_ID
for this purpose is great, so I've documented that[1].
Do you still want to have the changeability of opcache.cache_id
changed to PHP_INI_PERDIR, or can this request be closed?
[1] <https://github.com/php/doc-en/commit/7c6c83d08e97007ca75f739873f8125c6c0640cf>
------------------------------------------------------------------------
[2021-03-02 11:26:24] cmb@php.net
The following pull request has been associated:
Patch Name: Print error code if CreateMutex() fails
On GitHub: https://github.com/php/php-src/pull/6745
Patch: https://github.com/php/php-src/pull/6745.patch
------------------------------------------------------------------------
[2021-03-01 22:07:11] aschmidt at anamera dot net
That's a helpful suggestion. The tricky part is that Windows sets Environment Variables
"per User", which is the same for all sites in my scenario. With IIS 10 there's an
option that will support setting "per Pool" Environment Variables.
However, even in prior IIS versions, the Application Pool Name itself is available as an environment
variable, so one can use:
opcache.cache_id=v74_${APP_POOL_ID}
I've activated the above and initial tests have not yet caused any Mutex errors.
------------------------------------------------------------------------
[2021-03-01 14:14:17] cmb@php.net
> Yes, the mutex log entry is not helpful at all.
Yes, that should be fixed.
> Can you please clarify if your suggestion is to assign an entire
> unique PHP.ini via environment variable.
That can be an option, but my idea was more like using the
environment variable in php.ini, e.g.
opcache.cache_id=${OPCACHE_ID}
Would that work for you?
Changing to PHP_INI_PERDIR might generally make sense, though, but
it appears that would be the only OPcache setting with that
changeability.
------------------------------------------------------------------------
[2021-03-01 13:53:18] aschmidt at anamera dot net
Yes, the mutex log entry is not helpful at all. I've struggled with that message for a long
time, trying to isolate directories by PHP version, trying to add cache_ids, trying to set most
liberal NTFS permissions - but without knowing WHAT the actual problem (herror) is, I'm just
blindly plugging my finger into every hole I can think of, until the flow happens to stop.
>> pool specific environment variables <<
The manual doesn't mention environment variables to control OPcache.
Can you please clarify if your suggestion is to assign an entire unique PHP.ini via environment
variable. I understand that this might be a hypothetical option, but in my opinion a very poor one.
It's not good practice to maintain (keep synched) a potentially large number of (mostly)
identical PHP.ini's, depending on the number of sites. Incremental differences is the whole
purpose of PHP's ".user.ini" file.
That's the reason for me suggesting PHP_INI_PERDIR as the allow the user to specifically
override whatever .ini parameter(s) that are unique for a particular site.
>> if both sites run under the same user account (and both use impersonation or not), that
>> shouldn't cause CreateMutex() to fail. <<
Well, the moment I changed one site back to 7.3 yesterday, the problem vanished. I've been
through too many iterations over the last years to remember every detail, but I'm fairly
certain I had the same Mutex problem before you had added the "cache_id" in 7.4:
At present, it all works because 7.3 runs without a cache_id, and 7.4 runs with a cache_id.
It's only after I switched the first site to 7.4, with both sites now sharing same cache_id,
and the Mutex problem resurfaced.
(PS: Before you ask... I'm forced to keep some of my WordPress Sites running 7.3, because of
open 7.4 problems with the uopz and/or componere components.)
------------------------------------------------------------------------
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=80812
--
Edit this bug report at https://bugs.php.net/bug.php?id=80812&edit=1