Bug #80726 [Opn]: With any PHP 8 version I get crash running more than one CLI

From: Date: Wed, 10 Feb 2021 13:34:55 +0000
Subject: Bug #80726 [Opn]: With any PHP 8 version I get crash running more than one CLI
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-232039@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=80726&edit=1

 ID:                 80726
 Updated by:         cmb@php.net
 Reported by:        rfcastro at porto dot ucp dot pt
 Summary:            With any PHP 8 version I get crash running more than
                     one CLI
 Status:             Open
 Type:               Bug
 Package:            JIT
 Operating System:   Windows Server 2012 R2
 PHP Version:        8.0.2
 Block user comment: N
 Private report:     N

 New Comment:

opcache.cache_id defaults to an empty string (the documentation is
wrong about the "1" default).  This default is different from any
other ID.

Note that ID is an arbitrary *string* (the documentation is
correct about that).


Previous Comments:
------------------------------------------------------------------------
[2021-02-10 12:17:58] rfcastro at porto dot ucp dot pt

Right now I have it working placing the opcache.cache_id=2 on runtime on the main running script and
the rest I have no opcache.cache_id, so I was guessing it would use 1 by default.

I see now in the PHP.ini there is an "opcache.cache_id=" commented. So should I place an
opcache.cache_id=1 in the PHP.INI, or will it always used by default the opcache.cache_id=1 and
since my main running code is on opcache.cache_id=2 it will work.

------------------------------------------------------------------------
[2021-02-10 12:09:19] cmb@php.net

On non Windows systems, OPcache instances are never shared between
unrelated PHP processes; only forked childs share the instance
with their parent.  Since there is FPM, this model works very
well.  On Windows, there is no FPM (and generally no fork(3)), so
all PHP processes using the same PHP version and SAPI share an
OPcache instance (until there is no more PHP process within that
group, in which case the OPcache instance is destroyed).  This is
required to have only a single OPcache instance for (F)CGI.  This
does not really make sense for typical CLI scripts, but there may
be cases where this is desired even for CLI.  Thus, the
opcache.cache_id INI option has been introduced, so that it's
possible to control the sharing of instances.

It might be sensible to automatically use separate OPcache
instances for CLI, if opcache.cache_id is not set, but that would
be a behavioral change.

I wonder, though, whether different OPcache instances are supposed
to be required in your case, or whether there is a bug in the JIT
implementation.

------------------------------------------------------------------------
[2021-02-10 10:26:20] rfcastro at porto dot ucp dot pt

Yes, using the two different caches works.

But is this possible automatically?

------------------------------------------------------------------------
[2021-02-09 20:25:32] cmb@php.net

Would it work if you used two different opcache.cache_id, e.g.

    php -dopcache.cache_id=1 file1.php
    php -dopcache.cache_id=2 file2.php

------------------------------------------------------------------------
[2021-02-09 17:14:21] rfcastro at porto dot ucp dot pt

Description:
------------
The error has occurred on these versions: 8.00, 8.01 and 8.02

I open two command line prompts (two windows) in both I run two php codes and I get a
php_opcache.dll error in the Event log. Sometimes an unknown and sometimes PHP8.dll but most of the
time it's php_opcache.dll

One php file only has a Hello World cicle, and the other php file opens has soap connection with a
foreach. When I remove the foreach (foreach ($ise_sapiOutput->resultado as $aluno)), it works, if
I put it in again PHP crashes.

If I run without JIT, it works. If I run two simple hello word files, also works.

My PHP.INI:
[opcache]
opcache.enable=1
opcache.enable_cli=1
opcache.jit_buffer_size=100M
opcache.jit=1255
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.max_wasted_percentage=5

Test script:
---------------
File1:
do {
 echo 'Hello World';
 sleep (5);
} while (1);

File 2, soap connection:
$ise_aParameters = array(
'Funcao'		=> 'GetAlunos',
'NivelComp'		=> 5,
'Certificado'	=> 1,
'FormatoOutput'	=> 2,
'PEntrada'		=> 'TpUtil=0; CdUtil=1; PwdUtil=sistema;
AnoLectivo='.$isa_iAnoLectivo.$ida_sSAPICdAluno2,
'PSaida'		=> 'Estado
DESC;NAluno;NomeCompleto;Email;CdCurso;DgCurso;CdFaculd;EmailInstitucional'
);

$ise_xmlString 	= false;
$ise_xmlString 	= $isc_sSoapClient->__soapCall('Execute', array($ise_aParameters),
array('soapaction' => 'http://tempuri.org/WebServiceSAPI/Service1/Execute','uri'
=> 'http://tempuri.org/WebServiceSAPI/Service1'));
$ise_xmlString	= $ise_xmlString->ExecuteResult;
$ise_sapiOutput = new SimpleXMLElement($ise_xmlString);

if ($ise_sapiOutput->resultado->EstRes=='0') {
 foreach ($ise_sapiOutput->resultado as $aluno) {
  //the error ocorres here with the foreach cicle, if I remove it, no error		
 }
}

Expected result:
----------------
A PHP crash, usually php_opcache.dll

Actual result:
--------------
both scrips should run without errors. If I turn off JIT, it works.


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



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


Thread (12 messages)

« previous php.bugs (#232039) next »