AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 24654
Accepted
Andrew Williams
Andrew Williams
Asked: 2009-06-13 02:40:22 +0800 CST2009-06-13 02:40:22 +0800 CST 2009-06-13 02:40:22 +0800 CST

Linux 上的批处理

  • 772

在业务中的另一个流程完成后,我们目前正在为一些繁重的工作 (ETL) 设置服务器,目前我们正在通过预定的 cron 作业或远程执行(通过 ssh)启动作业。本周早些时候,我们遇到了一个问题,即系统上并行运行的作业过多,这导致所有作业在争夺 CPU 时间时速度缓慢。

我一直在寻找一个批处理调度器,一个我们可以将作业插入运行队列的系统,系统会一个一个地处理它们。任何人都可以建议一个程序/系统来做到这一点吗?由于该项目的鞋带性质,低成本/ FOSS 将受到赞赏。

linux scheduling batch batch-processing
  • 10 10 个回答
  • 6172 Views

10 个回答

  • Voted
  1. Best Answer
    Martin M.
    2009-06-13T02:58:16+08:002009-06-13T02:58:16+08:00

    我会设置某种排队服务。一个关于“准备使用”的快速谷歌显示:

    • http://sqs.sourceforge.net/

    根据您的需要,您可以简单地

    • 创建一个用户提交作业的包装器,
    • 包装器将作业写入套接字/文件/任何东西
    • 创建一个消费者,逐个运行作业,等待它完成
    • 然后由 cron 定期调用消费者(每 5 分钟左右)
      • 当然要创建一些锁定机制,以便一次只运行 n 个作业(其中 n=>1)
    • 如果没有更多的工作什么都不做
    • 如果有更多的工作抓住下一个并等待它完成

    实际上还有更多,您可能有实现优先级队列的要求,这会带来诸如饥饿作业或类似问题之类的问题,但是让某些东西快速启动并运行并不是那么糟糕。

    如果 LDP 按照womble的建议,我会接受。由更大的社区维护这样一个系统当然比为其他人已经解决的问题创建自己的错误更好:)

    此外,排队服务具有将资源与实际数字运算解耦的优势。通过通过某些网络连接使作业可用,您可以简单地将硬件置于(可能的)扩展问题上,并具有几乎无限的可扩展性。

    • 6
  2. Dan Carley
    2009-06-13T02:52:46+08:002009-06-13T02:52:46+08:00

    我想到了两个解决方案:

    1. 用于xargs -P控制一次最大并行进程。
    2. 创建一个 Makefile 并使用make -j.

    它们实际上都在这个SO 线程中进行了更详细的总结。

    这些可能不适用于您的脚本结构。

    • 5
  3. rkthkr
    2009-06-13T02:59:21+08:002009-06-13T02:59:21+08:00

    您的问题的一个重量级解决方案是使用类似Sun Grid Engine的东西。

    太阳网格引擎 (SGE)。SGE是一个分布式资源管理软件,它允许集群/机器内的资源(cpu时间、软件、许可证等)得到有效利用。

    这是一个关于如何使用 SGE 的小教程。

    • 5
  4. Kjetil Joergensen
    2009-06-13T02:52:30+08:002009-06-13T02:52:30+08:00

    您可以查看一些用于在集群上调度作业的批处理系统,它可以选择监控资源使用情况并声明系统负载过大而无法向其分派更多工作负载。您也可以轻松地将它们配置为一次只运行一项作业,但为此,您最好使用比完整的批处理调度程序更简单的东西(本着保持简单的精神)。

    至于免费提供的批处理/调度系统,我想到的两个是 OpenPBS/Torque 和 SGE。

    编辑补充:如果您将来要以更多盒子的形式添加更多处理能力,那么像 Torque/OpenPBS/SGE 这样的批处理/调度系统可能是不错的选择,因为它们基本上是为管理计算资源而构建的并将工作负载分配给他们。

    • 4
  5. womble
    2009-06-13T02:43:27+08:002009-06-13T02:43:27+08:00

    你总是可以使用 lpd——是的,老派,但它实际上是一个伪装成打印服务器的通用批处理控制系统。

    • 3
  6. pgs
    2009-06-13T02:59:16+08:002009-06-13T02:59:16+08:00

    来自man batch:

    在系统负载水平允许时批量执行命令;换句话说,当平均负载低于 1.5 或 atd 调用中指定的值时。

    我想这可能是你正在寻找的。它是 Debian 软件包的一部分at。

    • 3
  7. idelvall
    2016-11-03T09:32:26+08:002016-11-03T09:32:26+08:00

    wava:一个内存感知调度程序,当系统中有足够的物理内存 (RSS) 可用时,它允许将批处理作业(以最大物理内存使用承诺提交)排队执行。

    最初创建此调度程序是为了在具有大量 RAM 的机器中将大量长时间运行的作业排入队列,并作为其中大多数并发运行,避免内存分页和交换,以免影响运行在其中的其他服务的性能系统。

    • 1
  8. jouell
    2017-11-13T18:07:28+08:002017-11-13T18:07:28+08:00

    出于这个确切原因,我们将Control M用于 ETL 等(但在几年前)。当然它不是免费或开源的,但它在批处理方面具有非常好的灵活性(la if-this-then-that 类型的执行流程)

    • 1
  9. pauska
    2009-06-13T02:44:44+08:002009-06-13T02:44:44+08:00

    由 cron 调用的 shell 脚本可以很容易地做到这一点,它会逐行处理它。

    • 0
  10. Bill Lee
    2009-10-08T17:28:34+08:002009-10-08T17:28:34+08:00

    我会使用 Torque,它是 FOSS OpenPBS 的更新版本。

    • 0

相关问题

  • 多操作系统环境的首选电子邮件客户端

  • 你最喜欢的 Linux 发行版是什么?[关闭]

  • 更改 PHP 的默认配置设置?

  • 保护新的 Ubuntu 服务器 [关闭]

  • (软)Ubuntu 7.10 上的 RAID 6,我应该迁移到 8.10 吗?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve