L'application PHP se bloque: l'enfant pid se ferme avec une instruction illégale (4)

J'ai un server CentOS 6 avec Apache et PHP. Je cours une application et peut constamment reproduire ce crash. Après une action séquentielle, l'application meurt et la seule trace que j'ai trouvée est le message suivant dans error_log:

[Tue Jan 05 16:39:45 2016] [notice] child pid 1636 exit signal Illegal instruction (4) 

J'ai installé la même application à un autre hôte et cela fonctionne. Pour cette raison, je pense que le problème est dans la configuration OS ou Apache. Quelle pourrait être la raison de tuer ce process?

Mise à jour 1: Les deux hôtes ont memory_limit défini sur 128M

Mise à jour 2: désactiver SElinux ne résout pas le problème

Mise à jour 3: La mise à jour de pcre-7.8 vers pcre-8.13 n'aide pas

J'ai soudainement commencé à avoir cette même erreur il y a quelques jours sur un site WordPress 4 fonctionnant sur PHP 5.3.3 qui a été hébergé chez Rackspace sur un server virtuel depuis quelques années. Il est maintenant en cours d'exécution CentOS 6.8 et a survécu à de nombreuses mises à jour OS et WordPress – je pense que nous avons commencé sur CentOS 5.x!

Quoi qu'il en soit, j'ai essayé de mettre à niveau PHP d'abord (qui est tenu par CentOS 6.x à 5.3.3), mais j'ai utilisé le 3ème «remi» yum repo:

Référentiel RPM de Remi – Blog: http://blog.famillecollet.com/pages/Config-en

qui m'a laissé passer à PHP 5.6.22

Et même si cela n'a pas résolu le problème, il a amélioré le message d'erreur. Maintenant, les journaux d'apache étaient silencieux (!) Mais / var / log / messages l'ont dit, chaque fois que je frappais les pages d'administration de WordPress:

 kernel: php[23199] trap invalid opcode ip:7ffa1074ad60 sp:7fff8bff6268 error:0 in libfreeblpriv3.so[7ffa106f8000+72000] 

et Google googler la plupart de ces mots intéressants (pas tellement les numbers, et en citant "libfreeblpriv3.so" car il y avait beaucoup de hits similaires pour d'autres binarys) a conduit à ce rapport de bogue CentOS et la discussion:

010930: curl -> Instruction illégale après la mise à jour de centos 6.8 – CentOS Bug Tracker: http://bugs.centos.org/view.php?id=10930#c26717

qui a identifié le coupable: curl !

L'apparition soudaine de ce problème est due à une mise à jour récente de la librairie curl qui, apparemment, est en conflit avec les anciens hyperviseurs OpenStack (par exemple, nos anciennes instances Rackspace qui devaient être mises à jour il y a quelques années). chaque fois que WordPress a essayé d'utiliser curl pour download quelque chose, il a planté php et a pris le process apache avec lui.

Un commentaire (assez loin dans le fil) a cloué le correctif, ce qui a fonctionné pour moi:

 # How to downgrade curl: # (updated with corrected links after those went all 404 on me) wget http://vault.centos.org/6.7/os/x86_64/Packages/curl-7.19.7-46.el6.x86_64.rpm wget http://vault.centos.org/6.7/os/x86_64/Packages/libcurl-7.19.7-46.el6.x86_64.rpm rpm -Uvh --oldpackage curl-7.19.7-46.el6.x86_64.rpm rpm -Uvh --oldpackage libcurl-7.19.7-46.el6.x86_64.rpm yum install -y yum-plugin-versionlock yum versionlock curl yum versionlock libcurl service httpd restart 

Après cela, j'ai redémarré Apache et tout s'est bien passé 🙂

Cela est dû à la dernière mise à jour de CentOS pour le packageage nss. Cela a aussi provoqué la panique. Voici les étapes pour rétrograder le package:

 export NSS_DISABLE_HW_AES=1 yum -y downgrade nss nss-util nss-tools nss-sysinit yum -y install yum-plugin-versionlock yum versionlock add! nss-3.21.0-8.el6.x86_64 nss-sysinit-3.21.0-8.el6.x86_64 nss-tools-3.21.0-8.el6.x86_64 nss-util-3.21.0-2.el6.x86_64