Mir*_*ror 5 php windows iis dll
我在使用 IIS 和 PHP(以及一个 com dll)时遇到了一些问题。COM dll 经常崩溃,但我认为问题不是因为这个(我禁用了快速故障保护),因为 dll 总是崩溃,而问题大约在三周前开始,当时我们达到了大约 15.000 个用户/天。
发生的情况是突然所有 .php 文件停止响应,服务器只能提供静态 .htm 文件,这表明 php (php-cgi.exe) 存在问题。
当谷歌分析显示 180-220 个“在线用户”时,这几乎总是发生在高峰时间(下午 3-4-5 点)。当这种情况发生时(我的意思是 PHP 吓坏了)我可以在服务器的任务管理器中看到,它们不是通常的 10-12 个 php-cgi.exe 进程,而是高达 30 或 40 个 php-cgi.exe 进程(大约 30 MB RAM each) ,我猜这是因为 php-cgi.exe 停止处理请求。服务器共有 8GB RAM。
错误日志包括connection_abandoned_by_regqueue和connection_dropped,如果我不手动重新启动 IIS 或 defaultapppool,错误将大部分时间变成defaultapppool not available 503
一个问题是,在事件查看器中,我从未从 WAS 收到一条消息,指出 defaultapppool 已被禁用,以便我可以将任务(重新启动池)附加到它,并且在 IIS 管理控制台中,我从未看到 defaultapppool 被禁用,尽管事实上,它在日志中显示为禁用。
我一直在玩超时,但似乎从来没有做对。
我目前的理论是:
1) PHP 被许多用户(Windows、IIS)吓坏了,无法处理它
2) 多用户在线时.dll崩溃问题
3) php+iis 兼容性不是很好,但我不认为 15k/天的用户太多。不过我应该注意,大多数请求需要 50-300 毫秒才能完成。
php 版本是 5.3.19 通过 WebPI 安装,windows 版本是 windows 2008 R2 64bit。
出于某种奇怪的原因,notepad++ 以不可复制的十六进制形式(查询字符串是 UTF8 - greek)在 httperr 日志中显示了被放弃/禁用的查询的查询字符串,而在普通日志中,查询字符串既可见又可复制。下面提供的屏幕截图。
我还提供了当前设置的第二个屏幕截图
HTTPERR 日志文件...错误开始于连接断开,稍后连接放弃 http://img32.imageshack.us/img32/3796/9nkv.jpg
在第二个屏幕截图中是我当前的设置:1)启用的 php 扩展,2)defaultapppool(网站运行的池)设置 3)php fastcgi 设置和 4)php 运行时限制。 http://img34.imageshack.us/img34/2531/o6d1.jpg
我今天调整的最后一个设置是每 3 分钟自动回收一次 defaultapppool 并禁用动态内容压缩。将看到将如何进行。
如果有人对解决方案有任何提示/想法,我将不胜感激!
先感谢您。
该问题是由于iis管理器的FASTCGI功能中php-cgi.exe的进程限制为32个而引起的。将其提高到 64 暂时解决了问题。我处理最多 32 个的原因是 Web 服务占用 CPU 资源较多。最后,最终的解决方案是迁移到具有更多内核和更多内存的专用服务器。
| 归档时间: |
|
| 查看次数: |
1320 次 |
| 最近记录: |