管理负载的queque系统

时间:2010-06-23 16:28:23

标签: c daemon unix

我需要一个尽可能快地运行但不会减慢服务器速度的队列系统。

我有一个网络应用程序(php),可以转换不同的媒体(照片,视频等)。当有人想要转换文件时,要转换的命令会进入数据库。我需要一个能够以不会使我的服务器崩溃的方式运行命令的程序。

我需要以下内容:

- 始终在服务器上运行的东西。 - 在postgres数据库中查找新内容 - 上一个命令完成后,程序将前进到数据库中的下一个命令 - 当命令完成时,它会使用成功/失败和时间戳更新postgres表 - 程序应该根据需要使用尽可能多的cpu但不是优先级...我希望进程快,但我不希望我的服务器爬行停止。 -Program需要能够限制不同的程序(所以如果app 1正在运行并且有人提交app 2 ... app 2不会运行,除非服务器可以处理它。)

任何人都知道现有的任何脚本或想法吗?我玩过cpulimit,但只是限制它不会让服务器在没有服务器负载时充分利用它的潜力。我试过-nice -n但这似乎不起作用。

2 个答案:

答案 0 :(得分:0)

守护进程会很好。考虑客户端服务器模型 - 服务器将转换任务分派给子进程或调用pthread_create来创建客户端线程来处理任务。在fork()/ exec或pthread_create时,您可以确定活动客户端的数量,从而确定系统上的负载。然后您可以相应地调整优先级。 这使您可以动态控制资源消耗。

我不明白为什么好不能为你效劳。究竟什么“似乎不起作用”意味着你的背景?

答案 1 :(得分: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