我有一段用 PHP 编写的简单脚本(在阅读了大量 QA 后,我发现它的内存管理不太理想)。这是一个非常小的脚本,它循环遍历文件夹中的配置文件;将其与数据库中的记录进行比较,如果存在差异,它会相应地更新记录。
虽然脚本不到 20 行,但我随时都要处理超过 30,000 个配置文件。
我的电脑是英特尔双核 3.06 Ghz,配备 8 GB 的 RAM,运行 Ubuntu 12.04。
当我执行脚本时,CPU 几乎立即上升到 100% 并保持在该水平。使用 top 命令,我可以看到 PHP 进程的内存持续增加,直到最终达到 8 GB 的最大值并崩溃。(我通常在脚本崩溃前执行了大约 3/4,目前大约需要 90 分钟。)
从硬件角度来看,我如何才能使这个过程更有效率?如果我升级到四核处理器,执行脚本所需的时间会缩短一半吗?如果我升级到六核处理器,执行脚本所需的时间会缩短 4 倍吗?此外,以 2 倍或 4 倍的速度完成脚本是否也意味着我减少了内存使用量,还是我仍然需要升级 RAM?
答案1
我强烈建议使用 inotify 来监视更改并仅在发生变化时做出反应,而不是不断读取文件以查找更改(这可能会导致更多的 IO 等待而不是实际的 CPU 使用率):
文档:http://php.net/manual/en/book.inotify.php
看http://en.wikipedia.org/wiki/Inotify了解更多背景信息。
答案2
更多 CPU 只意味着 RAM 会更快耗尽。我不得不说,最好的办法是纠正脚本中的内存管理。要使用那么多 RAM,我不得不认为您存在内存泄漏。