【发布时间】: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 是否已准备好,并在准备好时刷新屏幕以包含链接。
-
对不起,我很笨:(谢谢你编辑我的问题。