Bug #72645 [Opn->Ver]: php failed with 500 error 0xfffffffe, "Cannot create mutex" in opcache.log
| From: | ab@php.net | Date: | Mon, 25 Jul 2016 15:33:58 +0000 |
| Subject: | Bug #72645 [Opn->Ver]: php failed with 500 error 0xfffffffe, "Cannot create mutex" in opcache.log | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-202581@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=72645&edit=1
ID: 72645
Updated by: ab@php.net
Reported by: pvasilevich at plesk dot com
Summary: php failed with 500 error 0xfffffffe, "Cannot create
mutex" in opcache.log
-Status: Open
+Status: Verified
Type: Bug
Package: opcache
Operating System: Windows
PHP Version: 7.0.9
Block user comment: N
Private report: N
New Comment:
Thanks for the report and analysis. Seems you also come to the root cause of the bug #72332 :) By
the current implementation, the first request served will create the mutex and become its owner.
With your finding it's clear, that another app pool will fail to create a mutex with the same
name.
It is currently unclear, which other implications such a configuration might have. It seems, that
using the identity config other than app pool will produce this issue. Probably just changing its
name is the simplest solution. What i'm only concerned about is, that this would indeed split
all the cache. Other variants like mmap or SHM don't do this. I guess we could solve this by
setting corresponding security attributes. Checking currently impacts and possibilities.
Thanks.
Previous Comments:
------------------------------------------------------------------------
[2016-07-22 07:55:47] pvasilevich at plesk dot com
I have uploaded screenshot from Process Explorer:
http://pasteboard.co/eszXEFkYe.png
------------------------------------------------------------------------
[2016-07-22 07:47:15] pvasilevich at plesk dot com
Description:
------------
Affected OSes: Windows 7, Windows Server 2012, 2012R2
STEPS TO REPRODUCE:
* create user phptest
* create 2 IIS application pools (pool1 and pool2), configure these pools to use this common user
phptest as identity (pool->Advanced Settings->Process Model->Identity = phptest)
* create 2 different sites with php handler 7.0.9 64-bit, first one is working under pool1 and
another one under pool2 users.
* try to open sample page with phpinfo() for one site - it is working fine
* try to open similar sample page with phpinfo() on another site.
Got:
HTTP Error 500.0 - Internal Server Error
D:\php-7.0.9\php-cgi.exe - The FastCGI process exited unexpectedly
Error Code 0xfffffffe
After some analysis, I have found that in opcache log (if you have enabled it before in php.ini) you
can find the following entry:
Fri Jul 22 13:15:23 2016 (24780): Fatal Error Cannot create mutex
I have checked mutex created by first process php-cgi.exe
interesting thing: mutex name contains real user name (phptest) but security attributes of this
mutex don't have permissions for this user, but have permissions for special internal IIS pool
user (named the same way as pool named). see screenshot.
second process is working under the same user phptest, but cannot access to the mutex, because
second process is working in another pool. So the error appeared.
The same issue is in php5.5 and php5.6
As fast workaround for php 5.5 (which was originally needed for me) I have tried to compile opcache
that also checks env variable APP_POOL_ID (set by IIS) and if it is not empty, add this to both mmap
base filename and to mutex name.
Test script:
---------------
<?php
phpinfo();
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=72645&edit=1