我在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