我有一台带有 Apache 和 PHP 的 CentOS 6 服务器。我运行一些应用程序并且可以不断重现此崩溃。经过一些连续操作后,应用程序终止,我发现的唯一跟踪是 error_log 中的以下消息:
[Tue Jan 05 16:39:45 2016] [notice] child pid 1636 exit signal Illegal instruction (4)
我将相同的应用程序安装到不同的主机并且它可以工作。因此我认为问题出在操作系统或 Apache 配置上。杀死这个进程的原因可能是什么?
更新1:两台主机的 memory_limit 设置为 128M
更新2:禁用 SElinux 并不能解决问题
更新3:更新从pcre-7.8
到pcre-8.13
没有帮助
答案1
几天前,我突然开始在运行 PHP 5.3.3 的 Wordpress 4 网站上遇到同样的错误,该网站已在 Rackspace 的虚拟服务器上托管了几年。它现在运行的是 CentOS 6.8,并且经历了许多操作系统和 Wordpress 更新——我想我们是从 CentOS 5.x 开始的!
无论如何,我首先尝试升级 PHP(由 CentOS 6.x 5.3.3 保留),但我使用了第 3 方“remi”yum 存储库:
Remi 的 RPM 存储库 - 博客: http://blog.famillecollet.com/pages/Config-en
这让我升级到 PHP 5.6.22
尽管这并没有解决问题,但它改进了错误消息。现在 apache 日志保持沉默(!),但每次我点击 WordPress 管理页面时 /var/log/messages 都会这么说:
kernel: php[23199] trap invalid opcode
ip:7ffa1074ad60 sp:7fff8bff6268 error:0
in libfreeblpriv3.so[7ffa106f8000+72000]
并在谷歌上搜索大多数有趣的单词(不是那么多的数字,并引用“libfreeblpriv3.so”,因为其他二进制文件有很多类似的点击)导致了这个 CentOS 错误报告和讨论:
010930:curl -> centos 6.8 更新后出现非法指令 - CentOS Bug Tracker:http://bugs.centos.org/view.php?id=10930#c26717
确定了罪魁祸首:卷曲!
这个问题的突然出现是由于最近的一个curl库yum-update(显然)与老的OpenStack 虚拟机管理程序(例如,我们老化的 Rackspace 实例,几年前就需要更新为新的虚拟机“风格”),每当 Wordpress 尝试使用curl 下载某些内容时,它都会使 php 崩溃,并导致 apache 进程随之退出。
一条评论(在线程中很远的地方)解决了这个问题,这对我有用:
# 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
之后,我重新启动了 apache,一切又恢复正常了:-)
答案2
这是由 CentOS 对 nss 软件包的最新更新引起的。这也引起了apache的恐慌。以下是降级软件包的步骤:
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