2012-07-18 25 views
0

我有一個EC2服務器與多個Cronjobs被稱爲每分鐘。大多數情況下,一切正常,但有時會發生,由於數據庫和下一個wget調用,一個cronjob(wget)會花費很長時間。這會降低數據庫的速度,最終導致許多wget調用和超過200個數據庫連接。大多數情況下,除了關閉RDS和EC2之外沒有其他方法可以在沒有cronjob的情況下重新啓動。PHP Cronjob造成太多的數據庫連接

我想知道: 1.什麼是cronjobs更好的解決方案(我必須獲取大量數據並將其存儲在RDS中)? 2.如何確保每個URL只有一個wget正在運行? 3.爲什麼RDS不會關閉連接,但需要多分鐘時間?我必須更改哪個參數?

謝謝!

+0

使用鎖定文件可防止腳本的多個實例同時運行。 – wildplasser 2012-07-18 11:26:48

回答

1

取決於你想達到的目標。

  • 是否要擴展數據庫以處理多個連接而不發生故障?

你會這樣做,如果每個cronjob調用都很重要。你不能錯過半請求。

要優化這個,你首先要確定你的時間花在哪裏。它是在服務器端處理,還是純粹的數據。

  • ,如果你不介意的部分​​請求或跳過的通話

速戰速決是使用的wget的超時選項之一(假設wget的是所有的cronjobs做) 注意這可能會使呼叫捱餓。如果請求總是要超過超時時間,它將永遠不會執行。

更強大的解決方案是確保一次只有一個cronjob實例處於活動狀態。 IIRC Perl有一個簡單的CPAN解決方案。