app PHP trava: pid filho sai com instrução ilegal (4)

3

Eu tenho um servidor CentOS 6 com Apache e PHP. Eu corro algum aplicativo e posso reproduzir constantemente essa falha. Depois de alguma ação sequencial, o aplicativo morre e o único rastreio que encontrei é a seguinte mensagem no error_log:

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

Eu instalei o mesmo aplicativo em um host diferente e ele funciona. Por esse motivo, acho que o problema está na configuração do sistema operacional ou do Apache. Qual poderia ser a razão para matar este processo?

Atualização 1: Ambos os hosts têm memory_limit definido como 128M

Atualização 2: Desabilitar o SElinux não resolve o problema

Atualização 3: a atualização de pcre-7.8 para pcre-8.13 não ajuda

    
por Anthony Ananich 05.01.2016 / 20:03

2 respostas

4

Eu de repente comecei a receber este mesmo erro há alguns dias em um site Wordpress 4 rodando no PHP 5.3.3 que está hospedado na Rackspace em um servidor virtual por alguns anos. Agora ele está rodando o CentOS 6.8 e sobreviveu a muitas atualizações do sistema operacional e do Wordpress - acho que começamos no CentOS 5.x!

De qualquer forma eu tentei atualizar o PHP primeiro (que é mantido pelo CentOS 6.x em 5.3.3) mas eu usei o repositório yum "remi" de terceiros:

Remi's RPM repository - Blog: http://blog.famillecollet.com/pages/Config-en

que me permite atualizar para o PHP 5.6.22

E, embora isso não tenha resolvido o problema, melhorou a mensagem de erro. Agora os logs do apache estavam silenciosos (!), Mas o / var / log / messages dizia isso, toda vez que eu acessava as páginas de administração do Wordpress:

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

e pesquisando a maioria dessas palavras interessantes (não tanto os números, e citando "libfreeblpriv3.so", já que houve muitos sucessos semelhantes para outros binários) levou a este relatório de erros e discussão do CentOS:

010930: curl -> Illegal Instruction after centos 6.8 update - CentOS Bug Tracker: http://bugs.centos.org/view.php?id=10930#c26717

que identificou o culpado: curl !

O aparecimento súbito deste problema deveu-se a uma recente biblioteca de curvas yum-update que (aparentemente) conflita com o old OpenStack Hypervisors (por exemplo, as nossas antigas instâncias Rackspace, que precisavam de ser atualizadas anos atrás para seu novo "sabor" das máquinas virtuais) e sempre que o Wordpress tentava usar o curl para fazer o download de algo, ele travava o php e retirava o processo do apache junto com ele.

Um comentário (bem abaixo no tópico) pregou a correção, que funcionou para mim:

# 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

Depois disso, reiniciei o apache e tudo ficou bem novamente: -)

    
por 01.06.2016 / 20:18
0

Isso é causado pela última atualização do CentOS para o pacote nss. Isso também fez com que o apache entrasse em pânico. Aqui estão os passos para fazer o downgrade do pacote:

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
    
por 17.05.2016 / 21:00