OPCache segfaults en AH01075 error
[proxy_fcgi:error] [pid 5102] (104)Connection reset by peer: [client <WAN IP>:46632] AH01075: Error dispatching request to :, referer: https://<FQDN>/app_dev.php/en/collection
[10294.553531] php-fpm[6149]: segfault at 3c ip 00007fc3c0a1e43e sp 00007ffe12a9be60 error 4 in opcache.so[7fc3c0a17000+b5000]
503 service unavailable errors op de site.
Deze errors komen 2 van de 3 keer voor op een pagina. Refreshen van een pagina geeft 1 op de 3 keer geen error.
Waneer we OPCache uitschakelen hebben we dit issue niet meer.
Het leegmaken van de Cloudflare proxy en OPCache maakt helaas geen verschil.
Vervolgens hebben we een terugdraai gedaan naar de oude situatie. De oude server was nog online en we hebben de proxy omgezet naar dit adres. In de oude situatie kregen we vervolgens dezelfde foutmeldingen als hierboven. OPCache hebben we uitgeschakeld en nu komt het probleem niet meer voor. Ook hebben we in de test alvorens de migratie de nieuwe server direct aangeroepen. Toen kwam dit probleem niet naar voren.
Het lijkt mij dus dat het probleem zit in de combinatie van Cloudflare proxy en OPCache.
Graag hulp bij het vinden van de oorzaak van deze foutmeldingen en de 503 service unavailable foutmeldingen daaropvolgend. Wat zou een oplossing zijn waarmee de opcache weer ingeschakeld kan worden?
PHP versie:
PHP 8.1.7 (cli) (built: Jun 7 2022 18:21:38) (NTS gcc x86_64)
Copyright (c) The PHP Group
Zend Engine v4.1.7, Copyright (c) Zend Technologies
with Zend OPcache v8.1.3, Copyright (c), by Zend Technologies
Apache:
httpd.x86_64 2.4.6-97.el7.centos.5
PHP modules:
php81.x86_64 8.1-1.el7.remi @remi-safe
php81-php-bcmath.x86_64 8.1.3-1.el7.remi @remi-safe
php81-php-cli.x86_64 8.1.3-1.el7.remi @remi-safe
php81-php-common.x86_64 8.1.3-1.el7.remi @remi-safe
php81-php-devel.x86_64 8.1.3-1.el7.remi @remi-safe
php81-php-fpm.x86_64 8.1.3-1.el7.remi @remi-safe
php81-php-gd.x86_64 8.1.3-1.el7.remi @remi-safe
php81-php-imap.x86_64 8.1.3-1.el7.remi @remi-safe
php81-php-intl.x86_64 8.1.3-1.el7.remi @remi-safe
php81-php-ldap.x86_64 8.1.3-1.el7.remi @remi-safe
php81-php-mbstring.x86_64 8.1.3-1.el7.remi @remi-safe
php81-php-mysqlnd.x86_64 8.1.3-1.el7.remi @remi-safe
php81-php-odbc.x86_64 8.1.3-1.el7.remi @remi-safe
php81-php-opcache.x86_64 8.1.3-1.el7.remi @remi-safe
php81-php-pdo.x86_64 8.1.3-1.el7.remi @remi-safe
php81-php-pear.noarch 1:1.10.13-1.el7.remi @remi-safe
php81-php-pecl-imagick-im6.x86_64 3.7.0-1.el7.remi @remi-safe
php81-php-pecl-mcrypt.x86_64 1.0.4-5.el7.remi @remi-safe
php81-php-pecl-mysql.x86_64 1.0.0-0.25.20210423.ca514c4.el7.remi
php81-php-pecl-xmlrpc.x86_64 1.0.0~rc3-1.el7.remi @remi-safe
php81-php-pecl-zip.x86_64 1.20.0-1.el7.remi @remi-safe
php81-php-process.x86_64 8.1.3-1.el7.remi @remi-safe
php81-php-pspell.x86_64 8.1.3-1.el7.remi @remi-safe
php81-php-soap.x86_64 8.1.3-1.el7.remi @remi-safe
php81-php-tidy.x86_64 8.1.3-1.el7.remi @remi-safe
php81-php-xml.x86_64 8.1.3-1.el7.remi @remi-safe
php81-runtime.x86_64 8.1-1.el7.remi @remi-safe
OS:
CentOS Linux release 7.6.1810
Gewijzigd op 06/07/2022 10:52:44 door Mathijs Brand
Ik denk eerder dat je naar de combinatie tussen PHP 8 en OpCache moet kijken. Wel lees ik hier en daar wat negatieve ervaringen over PHP 8 en Opcache.
Kan je misschien wat vinden in de OpCache log? Geen idee waar die staat, maar de output van phpinfo() zou hier wel ergens wel een hint naar kunnen geven.
Aanvulling: sowieso opcache.log_verbosity_level even op 4 zetten, meest verbose.
In de 10-opcache.ini van de PHP81 heb ik logging naar een file gezet in plaats van stderr en op niveau 4 gezet. We gaan de errors in deze testomgeving proberen te reproduceren.
Klinkt wel alsof het een een bug is. Zoals met alle software is ook Opcache niet bug vrij. Misschien zit daar iets tussen?
Wanneer je verder zoekt, merk je dat je niet de enige bent met segfaults. Het kan ook aan andere extenties liggen die in combinatie met Opcache werken in combinatie met de eigen PHP-code. Zo kwam ik zelf Imagick tegen. Weer een ander verandert een JIT instelling waarna segfaults verdwijnen.
De gebruikelijke meldingen kwamen naar voren:
[Wed Jul 6 13:16:47 2022] php-fpm[11479]: segfault at 557183ba9b70 ip 00007fc3c997944d sp 00007fff465343a0 error 6 in opcache.so[7fc3c9972000+b5000]
[Wed Jul 06 13:16:49.548232 2022] [proxy_fcgi:error] [pid 18580] (104)Connection reset by peer: [client WAN IP:54624] AH01075: Error dispatching request to :
Vervolgens kijk ik in de opcache logs en zie ik alleen scripts van een andere site gecached. Deze site draait ook op PHP 8.1
.....
Wed Jul 6 13:16:02 2022 (18902): Message Cached script '/home/design/public_html/var/cache/prod/translations/database.resources.php'
Wed Jul 6 13:16:02 2022 (18901): Message Cached script '/home/design/public_html/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport.php'
Wed Jul 6 13:16:02 2022 (18902): Message Cached script '/home/design/public_html/vendor/symfony/console/Command/HelpCommand.php'
Wed Jul 6 13:16:02 2022 (18902): Message Added key '/home/design/public_html/vendor/composer/../symfony/console/Command/HelpCommand.php'
.....
De site waar het om draait staat in de /home/test/ folder, maar deze komt niet voor in de opcache logs.
Gewijzigd op 07/07/2022 16:19:14 door Mathijs Brand
- https://www.php.net/manual/en/function.opcache-reset.php
- https://serverguy.com/magento/flush-php-opcache/
Inmiddels krijg ik wel meldingen van de goede site te zien in de Opcache log, maar daar zie ik geen foutmeldingen voorbijkomen.
....
Thu Jul 7 15:34:32 2022 (12712): Message Cached script '/home/test/public_html/vendor/symfony/console/EventListener/ErrorListener.php'
Thu Jul 7 15:34:32 2022 (12712): Message Added key '/home/test/public_html/vendor/composer/../symfony/console/EventListener/ErrorListener.php'
....
onderstaande meldingen zagen we nog voorbijkomen in de /var/log/audit/audit.log:
....
type=ANOM_ABEND msg=audit(1657200917.625:3482): auid=4294967295 uid=1001 gid=1001 ses=4294967295 subj=system_u:system_r:init_t:s0 pid=12557 comm="php-fpm" reason="memory violation" sig=11
type=ANOM_ABEND msg=audit(1657200919.395:3483): auid=4294967295 uid=1001 gid=1001 ses=4294967295 subj=system_u:system_r:init_t:s0 pid=12558 comm="php-fpm" reason="memory violation" sig=11
type=ANOM_ABEND msg=audit(1657200921.530:3484): auid=4294967295 uid=1001 gid=1001 ses=4294967295 subj=system_u:system_r:init_t:s0 pid=12559 comm="php-fpm" reason="memory violation" sig=11
....
Dit lijkt een probleem met SELinux te zijn, welke op disabled stond.
Toen we deze in permissive modus hadden gezet leek het even goed te gaan, maar bovenstaande meldingen zijn na een reboot weer terug gekomen.
altijd lol met SELinux.... Vaak een oorzaak van een hoop "het-werkt-niet"ellende
In de PHP instellingen onder de site-enabled hadden we voor deze site ook file caching ingeschakeld staan.
Daardoor werd cache naast naar de memory ook naar de /var/opt/remi/php81/lib/php/opcache geschreven als files.
Wanneer we dan een switch deden naar een andere server kwamen deze bestanden niet meer overeen.
Het resetten van de OPCache had geen effect op de filecache, maar alleen op de memory cache.
Vervolgens gaat PHP gecachte bestanden aanroepen die niet meer bestaan. Na het leeghalen van de /var/opt/remi/php81/lib/php/opcache folder is de foutmelding niet meer voorgekomen.
.