【问题标题】:Apache crashes with munmap_chunk(): invalid pointer after update to php7 on JessieApache 因 munmap_chunk() 崩溃:在 Jessie 上更新到 php7 后指针无效
【发布时间】:2016-06-23 16:22:51
【问题描述】:

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

这是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 应用程序大部分时间都运行良好。但在某些请求中,我只是生成了一个页面,而无法预见的原因。

/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 更新之前,我没有看到这些错误。这里有什么问题?或者我怎样才能更好地找到来源?我在这里迷路了,因为这个错误是随机发生的。有时,同一请求会成功,但在一分钟前失败并出现此错误。非常感谢您的帮助。

【问题讨论】:

  • 我也有同样的问题。 Apache2 版本和你的一样,php 7.0.8.1。你找到解决办法了吗?
  • 我在该服务器上降级回 php 5.6。因此我无法测试建议的解决方案。

标签: apache memory debian php-7


【解决方案1】:

这是我们第二次受到同样问题的严重打击。

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

如果无法使用 libpcre3 的测试版本。 有人可以在 php.ini 中禁用即时编译

  1. 编辑你的 php.ini 添加pcre.jit=0 任何你喜欢的地方
  2. 重启你的apache
  3. 要快乐

【讨论】:

  • 在我的情况下禁用 jit 有效。我注意到这个问题似乎只存在于 PHP >7.1.3 中。我想知道它是否会在上游修复?
【解决方案2】:

我有相同的版本并通过升级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. 从根目录运行命令apt-get update
  4. 运行命令apt-get -t testing install libpcre3安装测试版libpcre3
  5. 重新启动服务器并检查日志,错误应该会消失。

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

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

【讨论】:

    【解决方案3】:

    我们刚刚遇到过类似的情况,我们框架的一个组件会让我们失败:

    *** 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 版本为我们解决了这个问题。

    【讨论】:

      【解决方案4】:

      我也不断遇到那些讨厌的 apache 崩溃,但是上面和其他网站上的解决方案都没有为我工作。 经过大量的试验和错误,我在我的系统上找到了根本原因。 我手动编辑了 PHP 配置并添加了两个扩展。两者都适用于 Microsoft 的 SQL Server。 我在 php.ini 中添加了以下几行

      extension=sqlsrv.so
      extension=pdo_sqlsrv
      

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

      extension=sqlsrv.so
      extension=pdo_sqlsrv.so
      

      【讨论】:

        猜你喜欢
        • 2020-08-04
        • 2018-08-23
        • 2016-08-08
        • 2014-05-14
        • 1970-01-01
        • 2017-08-13
        • 2020-08-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多