Apache 因 munmap_chunk() 崩溃:更新到 Jessie 上的 php7 后指针无效

Apache crashes with munmap_chunk(): invalid pointer after update to php7 on Jessie

我最近在我的服务器 运行 上更新到 php 7.0.4 运行 一个 Debian 8。

这是 dpkg -l | grep php 给我的:

ii  libapache2-mod-php7.0          7.0.4-1~dotdeb+8.1           amd64        server-side, HTML-embedded scripting language (Apache 2 module)
ii  php-common                     21-1~dotdeb+8.1              all          Common files for PHP packages
ii  php-readline                   21-1~dotdeb+8.1              all          readline module for PHP [default]
ii  php7.0                         7.0.4-1~dotdeb+8.1           all          server-side, HTML-embedded scripting language (metapackage)
ii  php7.0-cli                     7.0.4-1~dotdeb+8.1           amd64        command-line interpreter for the PHP scripting language
ii  php7.0-common                  7.0.4-1~dotdeb+8.1           all          Common files for packages built from the PHP source
ii  php7.0-curl                    7.0.4-1~dotdeb+8.1           amd64        CURL module for PHP
ii  php7.0-gd                      7.0.4-1~dotdeb+8.1           amd64        GD module for PHP
ii  php7.0-imap                    7.0.4-1~dotdeb+8.1           amd64        IMAP module for PHP
ii  php7.0-intl                    7.0.4-1~dotdeb+8.1           amd64        Internationalisation module for PHP
ii  php7.0-json                    7.0.4-1~dotdeb+8.1           amd64        JSON module for PHP
ii  php7.0-mcrypt                  7.0.4-1~dotdeb+8.1           amd64        libmcrypt module for PHP
ii  php7.0-mysql                   7.0.4-1~dotdeb+8.1           amd64        MySQL module for PHP
ii  php7.0-opcache                 7.0.4-1~dotdeb+8.1           amd64        Zend OpCache module for PHP
ii  php7.0-readline                7.0.4-1~dotdeb+8.1           amd64        readline module for PHP

我的 php 应用程序 运行 对某些请求的大部分 time.But 都很好 我只是在没有可预见的原因的情况下生成了一个页面。

在这种情况下 /var/log/apache2/error.log 声明:

*** Error in `/usr/sbin/apache2': munmap_chunk(): invalid pointer: 0x00007efc6ddb4a50 ***
*** Error in `/usr/sbin/apache2': munmap_chunk(): invalid pointer: 0x00007efc6dd5cad0 ***
[Wed Mar 09 11:26:44.940931 2016] [core:notice] [pid 28486] AH00052: child pid 29338 exit signal Aborted (6)
[Wed Mar 09 11:26:44.941017 2016] [core:notice] [pid 28486] AH00052: child pid 29344 exit signal Aborted (6)
*** Error in `/usr/sbin/apache2': munmap_chunk(): invalid pointer: 0x00007efc6dd5cad0 ***
[Wed Mar 09 11:26:46.942581 2016] [core:notice] [pid 28486] AH00052: child pid 29347 exit signal Aborted (6)

我会提供更多信息:

语法:

$ apachectl configtest
Syntax OK

版本:

apachectl -v
Server version: Apache/2.4.10 (Debian)
Server built:   Nov 28 2015 14:05:48

在 php 更新之前我没有看到这些错误。这里有什么问题?或者我怎样才能更好地找到来源?我在这里迷路了,因为这个错误是随机发生的。有时同一请求会成功,而一分钟前因此错误而失败。我会感谢你的帮助。

我们刚刚遇到了类似的情况,其中一个框架的组件会使我们失败:

*** Error in `php': munmap_chunk(): invalid pointer: 0x00007fdce5550060 ***

我不能告诉你关于错误本身的任何信息,但它的原因是 libpcre3 版本损坏,即 8.35-3.3+deb8u4。我们是 运行 自定义构建,因为 PHP7 需要 libpcre3 的 JIT 支持,它不包含在我们的 Ubuntu 版本附带的默认支持中 (Ubuntu 14.04 LTS, 8.31-2ubuntu2.3) .升级 libpcre3 版本解决了我们的问题。

我有相同的版本,通过升级 libpcre3 解决了问题,就像@Kevin Fischer 写的那样。

我正在升级libpcre3包形式2:8.35-3.3+deb8u4(稳定)到2:8.38-3.1(测试)版本。

一步一步:

  1. 将行 deb http://ftp.us.debian.org/debian testing main contrib non-free 添加到 /etc/apt/sources.list
  2. 创建文件 /etc/apt/apt.conf.d/99default-release,内容为:APT::Default-Release "stable";
  3. 运行 来自 root
  4. 的命令 apt-get update
  5. 运行 命令 apt-get -t testing install libpcre3 安装 libpcre3 包的测试版本
  6. 重新启动服务器并检查日志,错误应该会消失。

有关安装测试包的更多信息,请参阅 this question

警告! 测试包可能无法正常工作!更新风险自负或等待新版本。

这是我们第二次遇到同样的问题。

它发生在 运行 PHP 7.0 在最新的 debian 上。 这将破坏任何类型的大量使用正则表达式的网站系统。 我们已经在 Neos (neos.io) 或 Typo3(从 6.2 开始)中看到了它。

以防无法使用测试版的libpcre3。 有人可以在 php.ini

中禁用即时编译
  1. 编辑您的 php.ini 添加 pcre.jit=0 您喜欢的任何地方
  2. 重新启动你的 Apache
  3. 开心

我也一直遇到那些令人讨厌的 Apache 崩溃,但上述和其他网站上的 none 解决方案对我有用。 经过大量的反复试验,我在我的系统上找到了根本原因。 我手动编辑了 PHP 配置并添加了两个扩展。两者都用于 Microsoft 的 SQL 服务器。 我将以下行添加到 php.ini

extension=sqlsrv.so
extension=pdo_sqlsrv

我没有注意到我忘记了 pdo 驱动程序中的“.so”。 如下所示更改行后,Apache 服务再次 运行 正常。

extension=sqlsrv.so
extension=pdo_sqlsrv.so