2010-06-23 44 views
1

我需要一個運行速度儘可能快但不會降低服務器速度的queque系統。管理負載的queque系統

我有一個Web應用程序(PHP),可以轉換不同的媒體片斷(照片,視頻等)。當有人想要轉換文件時,要轉換的命令進入數據庫。我需要一個能夠以不會使服務器崩潰的方式運行命令的程序。

我需要以下內容:

- 一直在服務器上運行的東西。 在postgres數據庫中查找新內容 - 上一個命令完成後,程序前進到數據庫中的下一個命令 - 當命令完成時,它會更新postgres表,並顯示成功/失敗和時間戳 - 程序應該使用盡可能多的CPU,但不是優先考慮的事情......我希望這個過程很快,但我不希望我的服務器爬到停止位置。 - 程序需要能夠限制不同的程序(所以如果應用程序1正在運行,並且有人提交應用程序2 ...應用程序2不運行,除非服務器可以處理它。)

任何人都知道任何現有的腳本可用或想法?我已經玩過cpulimit,但這只是限制它不會讓服務器在沒有服務器負載時充分利用其潛力。我已經嘗試過--nice -n,但這似乎不起作用。

+2

這似乎不是一個編程問題。 – 2010-06-23 16:29:44

+0

難道不能通過C程序來完成嗎?如果它不是編程,那麼它是什麼? – Keith 2010-06-23 18:20:47

+0

爲什麼「不錯」工作? – 2010-06-23 18:57:29

回答

0

一個守護進程將會很好。考慮客戶端服務器模型 - 服務器將轉換任務分派給子進程或調用pthread_create來創建客戶端線程來處理任務。在fork()/ exec或pthread_create時,您可以確定活動客戶端的數量,從而確定系統上的負載。然後你可以相應地調整優先級。 這使您可以動態控制資源消耗。

我不明白爲什麼不好爲你工作。在你的上下文中,「似乎不起作用」究竟意味着什麼?

+0

你不知道爲什麼漂亮不起作用。我總是在我所有的命令前面注入19。我使用FFMPEG和ffmpeg2theora。另一個奇怪的事情是ffmpeg2thoera有一個很好的標誌,我可以設置,這是行不通的。我說「似乎沒有工作」我的意思是CPU是99-100%。甚至沒有網頁加載。 – Keith 2010-06-23 19:17:37

+0

我剛剛檢查了ffmpeg2thoera網站,並沒有看到一個不錯的開關。這並不重要。我會假設這些程序正在使用大量資源,這些資源不一定與CPU - 內存,磁盤等有關。在嘗試編寫守護程序之前,您需要從命令行獲取命令。嘗試創建一個進程,然後很好19.現在,嘗試運行你的ffmpeg命令,看看你得到了什麼。 – 2010-06-23 19:51:43

+0

我想也許我不能跑得好,因爲它不是根。有沒有辦法讓它作爲非root用戶運行? – Keith 2010-06-23 22:55:13

0

我寫了一個非常漂亮的小系統,它會發送成千上萬的電子郵件(給網站的用戶),首先檢查CPU Load average。如果是< 2.0,請繼續,否則它會睡幾秒鐘,然後重試。包裝該PHP腳本是一個bash腳本,它在短暫暫停後不斷運行PHP腳本。

#!/bin/sh 
nice /usr/bin/php -f ..../phpjobs/resizeContentFromDb.php 
sleep 5 
# and .... restart. 
exec $0