【问题标题】:queque system that manages load管理负载的队列系统
【发布时间】:2011-03-07 10:08:53
【问题描述】:

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

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

我需要以下物品:

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

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

【问题讨论】:

  • 这似乎不是一个编程问题。
  • 不能用C程序来完成吗?如果不是编程,那是什么?
  • 为什么“nice”不起作用?

标签: c daemon unix


【解决方案1】:

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

我不明白为什么 nice 不能为你工作。在您的上下文中,“似乎不起作用”到底是什么意思?

【讨论】:

  • 你不知道为什么 nice 不起作用。我总是把 -nice 19 放在我所有的命令前面。我使用 FFMPEG 和 ffmpeg2theora。另一个奇怪的事情是 ffmpeg2thoera 有一个很好的标志,我可以设置它,但它不起作用。我说“似乎不起作用”我的意思是 CPU 是 99-100%。甚至没有加载网页。
  • 我刚刚查看了 ffmpeg2thoera 网站,并没有看到一个不错的开关。这无关紧要。我会假设这些程序正在使用大量不一定与 CPU 相关的资源——内存、磁盘等。在尝试编写守护程序之前,您需要从命令行获取命令以工作。尝试创建一个进程,然后很好 19. 现在,尝试运行您的 ffmpeg 命令,看看您会得到什么。
  • 我想也许我不能很好地运行,因为它不是 root。有没有办法让它以非 root 身份运行?
  • nice -19 提高优先级,并且需要 root 访问权限。 nice 19 降低优先级,任何用户都可以访问它。
  • @jimmcnamara nice -19 降低优先级,nice --19 提高优先级(并且需要 root 权限)。这有点令人困惑,但使用了第一个 -,以便 nice 明白 19 不是命令。
【解决方案2】:

我写了一个非常好的小系统,它会发送数十万封电子邮件(给网站的用户),这些电子邮件首先检查了CPU Load average。如果它

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

【讨论】:

    猜你喜欢
    • 2012-02-16
    • 2011-08-28
    • 2014-06-12
    • 1970-01-01
    • 2010-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-23
    相关资源
    最近更新 更多