PHP 服务器上的脚本比 WAMP 本地主机上的脚本慢得多

PHP script much slower on server than on WAMP localhost

所以正如我上面所说:我有一个相当大但非常简单的脚本,它从网站获取一个 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。

性能问题可能由很多因素引起。

  • 首先,我很确定 (?) 您的本地 PC 有 SSD 磁盘,而服务器可能 运行 在 "default SAS-Drives" 上。当涉及到向硬盘写入/读取内容时,这会产生巨大的差异。特别是 "Random-IO"(即有条件的很多选择和 "small" dbbuffer)
  • 您有 "root" 服务器或租用的 VM 吗?如果它是虚拟机,请记住,您也可以与其他虚拟机共享您的资源。 (特别是SAS-Disks上的访问,也是CPU-Time)

您应该编写一些脚本来解决 "identify" 瓶颈:

  • 生成一个PHP脚本,使用尽可能多的CPU-Power,添加几百万次迭代,比较结果。 (估计不是这个问题)
  • 生成一个 PHP Scirpt,它使用了大量的 DISK-IO - 比较 thausands 迭代的结果。
  • 生成一个 PHP 脚本,该脚本使用大量内存 - 再次比较。 (注意这一点 - 使用太多内存会导致数据写入硬盘,结果 "destroys")

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

为了扩展 dognose 的答案,我发现优化数据库访问可以显着提高性能。

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

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