【问题标题】:PHP script much slower on server than on WAMP localhost服务器上的 PHP 脚本比 WAMP localhost 上的慢得多
【发布时间】:2016-07-09 22:02:17
【问题描述】:

正如我上面所说:我有一个很大但很简单的脚本,它从网站获取单个 json 文件,对其进行解码,然后将数据保存在 PostgreSQL 数据库中。在我的计算机(i3M CPU、笔记本电脑)上完全完成(大约 300 000 条记录)大约需要 4 到 5 分钟,但在我刚刚租用的服务器上执行相同的操作需要大约 10 到 15 倍的时间。
专用服务器有一个英特尔至强四核 (3Ghz) CPU,总体上更好的规格和更好的互联网访问,所以我很确定它与此无关。它运行最新的 Debian、Apache/2.4.10、PHP 版本 5.6.22-0、PostgreSQL 9.5。
我试图从 WAMP 设置中复制设置和模块,认为这是我的帮助。不幸的是,它没有。不确定哪些信息可能有助于解决此问题,但我非常乐意回答任何问题。
我几乎可以肯定它与我必须跳过的某些选项有关,因此非常感谢任何帮助。

PS:WAMP 使用:2.4.17 Apache、5.6.16 PHP、9.5 PostgreSQL。

【问题讨论】:

标签: php apache postgresql debian wamp


【解决方案1】:

性能问题可能是由很多事情引起的。

  • 首先,我很确定(?)您的本地 PC 有一个 SSD 磁盘,而服务器可能在“默认 SAS 驱动器”上运行。当涉及到向硬盘写入/读取内容时,这可能会产生巨大的影响。尤其是对于“Random-IO”(即很多选择条件和“小”dbbuffer)
  • 您有“根”服务器还是租用的虚拟机?如果它是虚拟机,请记住,您也与其他虚拟机共享您的资源。 (尤其是对 SAS-Disks 的访问,还有 CPU-Time)

您应该编写一些脚本来“识别”瓶颈:

  • 生成一个使用尽可能多的 CPU-Power 的 PHP 脚本,添加几百万次迭代,比较结果。 (猜猜这不是问题)
  • 生成一个使用大量 DISK-IO 的 PHP 脚本 - 比较成千上万次迭代的结果。
  • 生成一个使用大量内存的 PHP 脚本 - 再次比较。 (注意这一点 - 使用太多内存会导致数据写入硬盘,从而“破坏”结果)

如果您现在没有遇到(意外的)差异,那么您已经消除了硬件问题。 - 对繁重的数据库负载重复该任务,以确定数据库是否可能配置错误。有时它只是一个简单的“布尔”标志,可能会对性能产生重大影响。

【讨论】:

  • 感谢您的评论,我在检查您编写的步骤时学到了很多东西。我必须配置 postgresql conf 文件,现在速度快了很多。
【解决方案2】:

为了扩展 dognose 的回答,我发现优化您的数据库访问可以对性能产生很大影响。

如果您注释掉数据库查询,看看运行时会发生什么可能会很有趣。这将告诉您在 DB 上花费了多少运行时间。

如果数据库占用大量时间,请尝试批量处理您的请求。不要一次将单个插入发送到数据库,而是尝试将它们保存在一个变量中并批量发送超过 50 到 100 个插入(或更多)。根据您设置数据库连接的方式,每个请求都可能存在大量开销。

【讨论】:

  • 谢谢,我一定会尝试批量处理请求,我从来没有想过。
  • 如果您使用“休眠”之类的东西,使用批处理非常重要 - 否则您会发送数百万个愚蠢的选择查询。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多