2013-04-07 72 views
0

我在一個幾乎每秒更新的數據庫中都有一個大表。我想每5秒鐘查詢一下這個表以獲取最新的條目(直播)。php睡眠或usleep凍結了整個服務器

我無法查詢每個訪問者的數據庫(每5秒發送一次ajax請求),因爲mysql會死亡。這就是爲什麼我需要緩存文件。我將數據寫入文件而不是訪問者,JavaScript將每隔5秒打開一次/讀取/關閉文件。

一切工作正常,但我與cronjob +睡眠問題。

在的cPanel我無法設置5秒cronjobs,這就是爲什麼我運行一個爲()與5秒內睡眠12個週期。

for($i = 0; $i <12; $i++){ 
    mysql_query() /// writing in file, etc. 

    sleep(5); 
} 

問題是這是凍結整個服務器60秒。不僅cronjob的php文件,整個網頁超時。

我該怎麼辦?我做對了嗎?

+0

在開始睡眠之前關閉文件嗎? – Janoz 2013-04-07 14:58:36

回答

0

請注意,您不能保證您發佈的代碼準確運行60秒。事實上,該代碼將在至少60秒內運行。我不確定這是否重要,但這意味着將通過cron運行此腳本的兩個或更多實例之間存在重疊時段。

根據您的查詢內容和正在處理您的數據庫和緩存讀/寫,你可以創建一個數據庫鎖或死鎖的情況,這反過來又可能導致腳本運行長的方式。長時間運行意味着它可能會吃掉數據庫/服務器資源。這種情況是我傾向於導致您的網頁超時的原因。我需要更多關於你的查詢和數據庫/緩存文件的細節。