【问题标题】:Apache error log with mmap cache errors带有 mmap 缓存错误的 Apache 错误日志
【发布时间】:2013-11-17 19:18:35
【问题描述】:

我发现了很多这样的错误

[Wed Nov 06 14:34:01 2013] [warn-phpd] mmap cache can't open C:\www\somefile.php (pid 4484 th 1668)

在我的 Apache error.log 文件中。一段时间以来,我试图查明错误的根源,但到目前为止还没有运气。

  • 我发现PHP Opcache不是罪魁祸首。
  • error_log 没有帮助。我认为我的 PHP 源代码不会影响错误。

我的堆栈: Apache 2.4.6、Windows、PHP 5.4.20

有人遇到同样的错误吗?

注意:我收到的错误消息与例如the error

Mon Dec 1 21:08:20 2008] [warn-phpd] mmap cache can't open /var/www/vhosts/domain.com/httpdocs/file.php - Permission denied (pid 7831)

mmap 无法打开文件的原因在哪里。

【问题讨论】:

  • 在文件名之后和进程/线程ID之前的错误消息中没有更多有意义的信息吗?否则检查权限,如果网络服务器可以访问文件似乎是一个很好的起点。
  • 很遗憾,没有关于该错误的更多信息。我们检查了几次权限,没有发现任何错误。
  • file.php 是否试图在文件系统上写入或读取或编辑文件?运行 apache 的 Web 用户是否有权读取由 file.php 打开的文件?更多详情请见atomicorp.com/forums/viewtopic.php?f=2&t=2960
  • 这看起来很可疑。 mmap() 是一个 Linux 调用。 Windows 等效项 AFAIK 是 CreateFileMapping(),这应该是日志中报告的内容。我来这个问题是因为我在问题标题中看到了 mmap,并且可以帮助您在 Linux 机器上进行一些核心调试,但对 Windows 毫无用处。我建议您在问题中添加一个 Windows 标签。
  • 你如何运行 PHP - 作为 CGI 脚本、FastCGI 脚本或 mod_php?

标签: php windows apache mmap


【解决方案1】:

Mon Dec 1 21:08:20 2008] [warn-phpd] mmap 缓存无法打开 /var/www/vhosts/domain.com/httpdocs/file.php - 权限被拒绝(pid 第7831章)

好像mmap没有打开文件的权限,检查文件的文件夹权限。 检查文件的文件夹属性。

【讨论】:

  • 请再仔细阅读我的问题。我写道:“我得到的错误信息不一样,例如……”
【解决方案2】:

这是由服务器打开的文件总数引起的。如果这是在托管公司上,那么他们将能够为您解决此问题,如果您在自己的系统上,请尝试以下步骤:

  1. 编辑 apache 启动脚本,\Program Files\Apache Software Foundation\Apache2.2\etc\init.d\httpd(可能在您的系统上有所不同)并在其他任何内容之前添加:
  2. ulimit -n 20480 #将ulimit提高到一个更高的值
  3. 然后使用 httpd.exe restart 重启 apache

希望这能为您指明一个大方向

【讨论】:

  • 如果问题是由打开的文件过多引起的,错误消息可能会有所不同 - 请参阅:forum.parallels.com/… Apache 安装在 Windows 上,并且最大打开文件的限制远高于 10k 个文件。所以我相信这不是我遇到的真正问题。
  • 检查文件权限,一般是世界设置为0,比如640或750,试试改成644或755看看有没有用。权限有点奇怪,例如,如果您有一个 group:user,例如 540:125,并且文件保存为 0:0(即 root),也会导致这种情况。
  • 我检查了几次权限。
  • 文件所有权怎么样...这是我遇到最多问题的地方,文件是由 root 创建的,只有用户可以访问它。您可以使用 shell 转到目录并 ls -lah 检查它会列出所有权限、文件、大小、日期和所有权。如果所有权匹配,那么我没有想法。它真的必须像这样简单。我能想到的唯一另一件事是驱动器空间。其实,我想我也记得关于inode的一些事情,已经很久了,但是如果inode太多,就像磁盘空间不足一样。我会看看我是否能找到更多。
  • 顺便说一句:如果是所有权,那么简单的 chown {user}:{group} {filename} 就可以了。例如,如果您执行 ls -lah 并在大多数文件上看到 hvac3:hvac3,并且该文件类似于 root:root,您可以 chown hvac3:hvac3 somefile.php
【解决方案3】:

禁用 MMAP。它在 Windows 上不受支持。

这是一种将文件映射到内存以处理其内容的有效方法。与 sendfile 类似的故事,一种将文件内容作为响应发送的有效方法。

# https://httpd.apache.org/docs/2.4/en/mod/core.html#enablemmap
EnableMMAP On
EnableSendfile Off

【讨论】:

    猜你喜欢
    • 2012-08-09
    • 1970-01-01
    • 2013-12-27
    • 2010-10-07
    • 1970-01-01
    • 1970-01-01
    • 2012-09-14
    • 2016-09-08
    • 1970-01-01
    相关资源
    最近更新 更多