【问题标题】:Apache/PHP only uses 50% of CPU in Windows on VMWareApache/PHP 在 VMWare 上仅使用 Windows 中 50% 的 CPU
【发布时间】:2015-07-09 19:38:47
【问题描述】:

在具有 2 个 CPU 的 Windows Server 2012 中,我使用 Apache 2.4 和 PHP 5.6,当我使用 DOMPDF 生成 PDF 文档时,使用了总 CPU 功率的累积 50%。无论我做什么,我都无法得到超过 50% 的总数。我尝试打开一堆窗口并同时创建多个 PDF 文档系列。

每个单独的 CPU 将低于 50%,如果一个峰值上升,另一个峰值会同时下降。似乎 Windows 将 Apache 服务限制为使用 50% 的 CPU。有什么地方可以改变吗?

编辑:我的应用程序已经充分利用了两个 CPU,只是没有达到最大容量,在 60 秒的负载后,利用率变为 100%。我认为这与线程无关......也许是环境设置?

【问题讨论】:

  • 您可以设置一个 RAM 磁盘,看看是否可以让 DOMPDF 或 PHP 将其用作暂存空间。正如马克所说,这个过程可能是磁盘绑定的,如果是这样,你需要加快磁盘速度以获得更多的 CPU 使用率。另外,你想解决什么问题?您希望更快地生成 PDF,还是减轻 Web 服务器的负载?
  • 它已经在使用ramdisk,所以我认为这不是磁盘访问问题。是的,我要解决的问题是提高 PDF 生成速度。我还进行了其他负载测试,例如循环产生负载,但有些东西将其控制在 50%。我只是想知道这是否是 Windows 中的某个设置,但如果还没有人提到过这样的设置,也许不是。
  • 我不知道您的 PDF 是如何生成的详细信息,但可以合理地猜测您的程序根据定义不受 CPU 限制,因为您只增加了 50%。其他东西阻碍了它 - 磁盘或网络。 “思考”是不是磁盘不是一个理想的方法 - 使用 xdebug 或其他东西来检查它在做什么。
  • “是的,我要解决的问题是提高 PDF 生成速度” - 也许您只需要将 PDF 创建设为离线过程?从您的 Web 进程中删除它,并将其添加到工作队列中。这样做的好处是 Web 服务器进程在生成期间不会被锁定。只需向您的队列发送一条消息以处理 PDF,然后告诉用户在下一个网页中等待。您可以使用 AJAX 或 WebSockets 定期重试服务器以查看 PDF 是否已准备好,并在准备好时刷新屏幕以包含链接。
  • 对不起,我很笨:(谢谢你编辑我的问题。

标签: php windows apache vmware


【解决方案1】:

不是windows限制,而是程序设计本身。我认为它与 CPU 内核有关(例如,它有 4 个内核,只使用 2 个,实际上是 50%)。 据我所知,您对此无能为力,因为如果没有适当的程序设计,就无法将其拆分为更多内核。

【讨论】:

  • 它有 2 个核心,同时使用了两个核心,但并没有最大化它们。
  • 并不意味着系统不忙。如果您正在构建大量 pdf,那么其中一些进程可能正在等待其他事情,例如磁盘带宽。
  • 因此,如果 cpu 有 2 个核心,并且它的使用率为 50%,那么它很可能只使用一个。据我所知,Apache 是多线程的,所以它应该使用所有内核。问题可能是一个不是线程安全的模块,我记得 PHP 就是这样一个模块,这可能是问题所在。 PHP 只在一个内核中运行。 #Edit 刚刚发现这个:serverfault.com/questions/310937/…
  • 我正在观察各个核心,我可以看到它们的利用率分别为 20-80%。这些是光纤通道上的虚拟机,因此可能不是磁盘或网络速度。我正在使用线程安全的 php 模块。
猜你喜欢
  • 1970-01-01
  • 2012-04-15
  • 1970-01-01
  • 2011-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-02
  • 1970-01-01
相关资源
最近更新 更多