不久前,我在 Linux (Debian) 机器上编写了一些 PHP 和 MySQL 脚本(在 LAMPP 上运行)。请求大约 2000 个 MySQL 行的页面在大约 0.001 秒内执行并返回数据,更新此 MySQL 表的循环脚本(多线程)在后台运行,每个循环大约需要 10 秒。
我们刚刚升级了我们的机器(全新的 PC),获得了四倍的 RAM 和更高的 CPU 时钟速度。此机器安装了 Windows Server 2008(和 XAMPP)。在 Linux 机器上运行的完全相同的脚本现在可以在 Windows 机器上运行,但是:
- 从 MySQL 获取信息的页面需要 5-10 秒才能返回数据
- 在 Linux 机器上花费 10 秒的循环现在需要 60-80 秒
- 如果 Apache 正在运行,循环会冻结(或每个循环使用超过 30 分钟)
到底发生了什么?在 Windows 上运行 PHP 和 MySQL 是否存在已知问题?如果没有,我该如何弄清楚为什么现在每个小命令都会让 CPU 以 100% 的速度运行数秒,而在配置较低的 Linux 机器上,它们可以在 0.001 秒内完成,而不会影响 CPU?
我最想知道的是:这到底是 Windows 的问题,还是新机器的问题?(如果我们在新机器上安装了 Linux,结果会怎样?)
答案1
事实证明,这只是运行 Windows Server 的更大开销加上每个 PHP 进程打开的所有 CMD。在机器上安装 Debian 后,一切又恢复顺利运行。
答案2
当您启用 IPv6 时,就会出现问题。localhost
在服务器名称上使用 (非常常见)会导致连接建立时间过长。将其更改为127.0.0.1
。
由于您有一个循环,如果您关闭并重新建立连接,它会使速度减慢一倍,而快速连接将会产生巨大的差异。
答案3
您可以安装 sql express,看看问题是否出在 Windows 上的 mysql(我知道没有问题,但也许您使用的是过时的版本?)。Windows 本身不是问题。PHP 在 IIS 下运行应该没有问题(请参阅在 IIS 上运行 PHP 应用程序页面了解详情。如果直接 mysql 查询运行速度与 sql server 一样快(相当接近,因为 mysql 不会那么快),那么下一个要检查的是 apache。我遇到的唯一真正问题是,它配置得像 apache 的 *nix 副本 - 这肯定会降低性能。