2011-08-30 24 views
1

我有一個PHP腳本通過cronjob在我的服務器上運行。這項工作每分鐘運行一次。在php腳本中,我有一個執行的循環,然後等待一個sevond並再次循環。基本上創建一個腳本,每秒運行一次。可能優化Php腳本以限制對服務器內存和cpu的影響?

現在我想知道,如果我讓cronjob每小時只運行一次,並讓腳本仍然循環一整小時或可能一整天..這會對服務器cpu和/或內存產生任何影響,並且如果是這樣,它會是正面還是負面?

+0

我喜歡幾個同時執行的cron作業,對CPU有*正面影響!如果你能創造這個,你就會變得富有! ; -D – deceze

+0

哈哈哈我實際上是爲了節約資源而不經常執行的cronjob。 – ShadyD

+0

1分鐘後循環結束了嗎?爲什麼不是每秒鐘都運行cron作業,腳本中沒有循環?是否真的需要有一個每秒運行的cron作業?這個cron工作做什麼? – dqhendricks

回答

0

在我看來這會產生負面影響。因爲腳本不斷使用資源。 在服務器上已經運行的基於時間的比例上調用cron。 但是cronjob最多隻能每分鐘運行一次。

另一件事是,如果腳本超時,失敗,因任何原因崩潰,最終在最長1小時內未運行腳本。會對服務器負載產生積極的影響,但不是你想要的,我猜? :)

可能每2或5分鐘運行它以備用服務器負載?

或者也許改變腳本,所以它不會等待,只是執行一次,並從cron作業調用它。應該對服務器負載產生積極的影響。

+0

這帶來了另一個問題,任何建議如何檢查腳本是否正在運行?腳本每秒運行一次是絕對必要的。 – ShadyD

+0

在這種情況下,我認爲最好的方法是創建一個腳本,該腳本在調用php文件的服務器上運行。 cronjob不會每秒運行一次以上。假設您有可能創建這樣的腳本。閱讀更新我會建議創建一個SQL觸發器請參閱http:// stackoverflow。com/questions/1467369/invoking-a-php-script-from-a-mysql-trigger這將有助於服務器加載。 – FLY

1

我發現了一個設計缺陷。

您始終可以在循環中永久運行PHP腳本,以執行您所需的任何功能,而不依賴於Web服務器或客戶端。

你很明顯是用這個腳本檢查一些東西,有沒有煽動什麼?對你來說可能有更好的解決方案。例如,如果它是一個數據庫考慮SQL觸發器。

+0

請賜教:)!如何永久運行PHP腳本而不依賴於服務器/客戶端?這不會佔用資源嗎? – ShadyD

+0

對不起,忘了添加。它是一個腳本,用於檢查數據庫(MySQL)的更新,並在需要時插入記錄。這是技術是可比較的拍賣腳本我想。 – ShadyD

0

我想你應該改變腳本邏輯,如果可能的話。

如果腳本執行的任務不是週期性的,而是由某些事件觸發的,則可以使用某些Message Queue(如Gearman)。

否則您的解決方案是好的。內存泄漏可能發生,但在新的PHP版本(5.3.x)中,垃圾收集器非常好。一些擴展可能導致內存泄漏。或者你的應用程序設計可能導致飢餓的內存使用(比如Doctrine ORM加載的對象緩存)。 但是,您可以通過monit等工具來控制腳本內存使用情況,並在mempry限制達到某個點時重新啓動腳本,或者在腳本意外關閉時再次啓動腳本。