1、可能解决方法一:
系统:windows 2008 r2
环境:apache 2.4.9 (64)+php 5.5.14 (64)
运行组件:所有运行组件均以安装,且均为64位版
症状:opcache 默认配置开启,运行大概10-30分钟,apache 假死崩溃,系统日志可看到以下错误,
1,无法找到来自源 Zend OPcache 的事件 ID 487 的描述。本地计算机上未安装引发此事件的组件,或者安装已损坏。可以安装或修复本地计算机上的组件。
如果该事件产生于另一台计算机,则必须在该事件中保存显示信息。
以下是包含在事件中的信息:
Unable to reattach to base address
试图访问无效的地址。
2,错误应用程序名称: httpd.exe,版本: 2.4.9.0,时间戳: 0x53258cd5
错误模块名称: php5ts.dll,版本: 5.5.12.0,时间戳: 0x53614545
异常代码: 0xc0000005
错误偏移量: 0x000000000001ed3a
错误进程 ID: 0x46c
错误应用程序启动时间: 0x01cf8e08bd43da8e
错误应用程序路径: D:\upupw\Apache2\bin\httpd.exe
错误模块路径: D:\upupw\Apache2\bin\php5ts.dll
报告 ID: a356f798-f9fe-11e3-a5ea-902b346c2007
官方给的解决方案是
http://www.php.net/manual/zh/opcache.configuration.php
修改php.ini 里opcache 配置
opcache.mmap_base 默认值为空
在 Windows 平台上共享内存段的基地址。 所有的 PHP 进程都将共享内存映射到同样的地址空间。 使用此配置指令避免“无法重新附加到基地址”的错误。实验错误,没解决。这个问题,我提交过几次给论坛,火锅也积极解决了,但都没解决.
无意中从国外1个网站复制了解决方式,opcache.mmap_base = 0x20000000 ,经过在服务器上稳定运行了24+小时。日均pv 1.3W,没有出现假死,算是完美了。这个问题我也准备提交给火锅,默认的配置下是没有这段配置的。
2、可能解决方法二:
PHP 扩展 OPcache 针对 Moodle 的配置要求
Moodle 2.6 开始,PHP 的扩展 OPcache 就被强烈推荐使用。OPcache 可以提升 Moodle 网站的性能,并降低内存的消耗。PHP 5.5 开始包含了 OPcache 扩展。微软今年已经推出了 Microsoft Drivers 3.2 for PHP for SQL Server,能够支持 PHP 5.6。我终于可以把 PHP 版本升级到 5.6 了,那顺理成章也要配置启用 OPcache 了。
首先在 php.ini 中要添加扩展的文件名。
[PHP_OPCACHE]
zend_extension=php_opcache.dll
然后根据 Moodle 官网的文档配置 OPcache 的参数项。
[opcache]
opcache.enable = 1
opcache.memory_consumption = 128
opcache.max_accelerated_files = 4000
opcache.revalidate_freq = 60
; Moodle 要求的设置
opcache.use_cwd = 1
opcache.validate_timestamps = 1
opcache.save_comments = 1
opcache.enable_file_override = 0
; 如果 Moodle 中出现某些问题,可尝试用以下配置解决
;opcache.revalidate_path = 1 ; 可以修复 include 路径的问题
;opcache.mmap_base = 0x20000000 ; (仅针对 Windows) 修复 OPcache 出现事件 id 487 的崩溃
; Moodle 2.6 及以上版本的实验用途
;opcache.fast_shutdown = 1 ; 使用快速停止续发事件
;opcache.enable_cli = 1 ; 加速 CLI cron
;opcache.load_comments = 0 ; 可减少内存使用,可能与插件及其它应用不兼容
对于 max_accelerated_files 参数的说明:
这是 OPcache 哈希表中可存储的脚本文件数量的上限。实际的取值是在质数集合 { 223, 463, 983, 1979, 3907, 7963, 16229, 32531, 65407, 130987 } 中找到的第一个比设置值大的质数。设置值的取值范围是 200 到 100000 之间。Moodle 中建议设置为 4000,实际值就是 7963。Moodle 中核心的 php 文件数量不会超过这个数字,但是如果增加了插件或者做了二次开发,缓存的 php 文件数量大大超过 7963,那就建议把 max_accelerated_files 设置为 8000。