Der*_*rth 3 php windows-server-2008 iis-7.5 cpu-usage
我们有七个用 PHP 编写的网站,它们运行在带有 IIS 7.5 的 Windows 2008 服务器上。他们现在都很慢。
当我查看任务管理器时,我看到大约 10 个 php-cgi.exe 进程,它们都占用了 0% 的 CPU,除了一个占用 25% 的 CPU。它是一个四核服务器,因此它占用了一个内核的 100%。
如果我观察几秒钟,占用 25% 的进程将变为 0%,而另一个 php-cgi.exe 进程将跳转到 25%。所以所有的 php-cgi.exe 进程都只是排队,等待一个内核,每个进程都尽可能使用 100% 的处理器。
这 7 个站点中的每一个都位于 IIS 中自己的应用程序池中,我们使用的是 FastCGI。PHP 版本是 5.3。
有任何想法吗?谢谢!
编辑:这是我们的 FastCGI 设置:
<fastCgi>
<application fullPath="C:\Program Files (x86)\PHP\v5.3\php-cgi.exe" monitorChangesTo="C:\Program Files (x86)\PHP\v5.3\php.ini" activityTimeout="600" requestTimeout="600" instanceMaxRequests="10000">
<environmentVariables>
<environmentVariable name="PHP_FCGI_MAX_REQUESTS" value="10000" />
<environmentVariable name="PHPRC" value="C:\Program Files (x86)\PHP\v5.3" />
</environmentVariables>
</application>
</fastCgi>
Run Code Online (Sandbox Code Playgroud)
编辑#2:我们部分地想通了。由于权限问题,PHP 从不垃圾收集会话,因此有数百万个会话文件。
但我仍然想知道为什么它只使用一个内核。这些网站现在要快得多,但我们还没有解决这个问题。有人知道吗?
小智 5
问题最终是 PHP 保存会话文件 (sess_ )的文件夹中的权限错误。自从我们部署此服务器以来,垃圾收集从未工作过,或者它已经工作了一段时间,但我们更改了应用程序池的身份或其他内容,以便新身份无法访问删除文件。无论如何,我们在该临时文件夹中有超过 200 万个 sess_ 文件。花了几个小时,但最终“del /F /Q sess_“命令完成后,我们重新启动了站点,一切又都很好(从平均页面加载时间 60 秒到远少于 1 秒)。我不知道这是否修复了“所有组合的 cgi-php.exe”进程从不使用多个核心组合”问题,但对我来说,创建这些 sess_ 文件的 PHP 的 Windows 实现中的机制可能被设计为也导致了这种现象(如果它是单间螺纹,例如)。
无论如何,这个故事的寓意是,如果您看到 CPU 消耗非常缓慢且稳定地增加(可能在单核 100% 时保持稳定)并且 http 响应时间也缓慢增加,请检查您存储您的文件夹的文件夹php 会话文件 (sess_*) 并查看当您打开该文件夹时 Windows 资源管理器是否崩溃!:)
(顺便说一下,它是 W2k8(不是 R2)所以我认为它是 IIS 7 而不是 7.5)
| 归档时间: |
|
| 查看次数: |
8102 次 |
| 最近记录: |