我在php中构建了一个应用程序,其中一个功能可分析大约10000个文本文件并从中提取内容并将其放入mysql数据库。代码本身只是一个for循环,其中每个文件都通过file_get_contents()
加载,并在该迭代结束后从内存中加载unset()
。文件分析是一个cron作业,并且一个php文件完成所有这些处理。EC2比共享主机慢?
然而,问题在于,应用程序最初是建立在共享服务器上的,而且一切都非常顺利。我没有注意到任何延迟或重大滞后,但是为了能够处理更多的负载,我将所有内容都移到了EC2服务器(微型实例)。
我现在遇到的问题是,每次运行cronjob(按小时处理文件),它会使整个服务器速度变慢,导致正常页面大约需要5-8秒才能加载,击败了将其转移到EC2的目的。
cron本身是一个非常漫长的过程。下面是一些测试脚本处理的结果(每小时)
SQL Insertion Time: 23.138303995132 seconds
Memory Used: 10.05 MB
Execution: 411.00507092476 seconds
但在每一个小时的顶部的服务器,尽管相比于共享服务器有更多的专用硬件加速减慢这么多7分钟(我至少想)。来自EC2仪表板的图表显示CPU使用率接近100%,但我不明白它是如何达到该水平的。
任何人都可以帮助我确定为什么会发生这种情况的原因吗?我注意到,当cron运行在共享服务器上时,甚至没有丝毫的延迟,但EC2的情况完全不同。
请随时问我任何我错过了提及。
噢...还有一件事:确保您在服务器上安装了APC。这也会产生巨大的差异。 – Homer6
感谢您的评论!我同意,如果它的编译速度会更快,但其中的一些文本文件中包含HTML,并且PHP提供了非常好的DOM解析器库。移植所有这些将会非常乏味。 – Kartik
让我安装apc,看看是否有所作为! – Kartik