sidekiq - 并发 > 50 稳定吗?

2024-03-15

Sidekiq 文档 https://github.com/mperham/sidekiq/wiki/Advanced-Options#concurrency says:

不要将并发设置高于 50。我见过稳定性问题 以并发数100为例

好吧,我的低内存消耗使我能够在单个 512MB X1 heroku dyno 上使用 350 个线程的并发性。我想使用 ~300,因为所有作业都是 IO 密集型(http 请求)。

我想知道我会遇到哪些问题?

我尝试用 80 来监控过载日志,但没有发现任何问题。

设置 300 个线程的并发时应该注意哪些问题?我是否会面临作业被终止而不被移至“死亡”队列的风险?或者只是我可以观看的工人终止。 将并发设置为 300 或 100 安全吗?

sidekiq 的所有者不知道答案,这是我打开的问题 https://github.com/mperham/sidekiq/issues/3211.

更新: 在高负载下,当我从 80 增加到 100 时,我开始到处出现“无法创建线程:资源暂时不可用”错误,在 180 个线程的极端情况下,有时会终止整个 sidekiq 进程。

根据 Heroku 指标,内存消耗始终在 140MB 到 240MB 之间。

I used TTIN信号 https://github.com/mperham/sidekiq/wiki/Signals#ttin正如所描述的here https://github.com/mperham/sidekiq/issues/2862

并发现大多数线程都在等待这些代码行:

app[worker.1]: 3 TID-ow5z46exw WARN: /app/vendor/ruby-2.3.0/lib/ruby/2.3.0/monitor.rb:187:in `lock'

app[worker.1]: 3 TID-os9ulw8ps WARN: /app/vendor/ruby-2.3.0/lib/ruby/2.3.0/net/http.rb:880:in `initialize'

app[worker.1]: 3 TID-os9ulw8ps WARN: /app/vendor/ruby-2.3.0/lib/ruby/2.3.0/timeout.rb:95:in `join'

app[worker.1]: 3 TID-osjnd6zac WARN: /app/vendor/ruby-2.3.0/lib/ruby/2.3.0/net/protocol.rb:158:in `wait_readable'

一切都记录在github中issue https://github.com/mperham/sidekiq/issues/3211

sidekiq 的所有者表示,痕迹看起来不错,因此无法找到稳定性问题的根本原因,但输入了有多少线程导致了该问题以及症状是什么。


根据并发数,必须增加数据库池大小。 并发数(线程)+ 2 = DB连接池大小 (300+2) = 302 个数据库连接

单个sidekiq进程的实际并发数取决于处理器核心的数量和其他参数。因此使用更多的货币将花费大部分时间在线程上下文切换上,而不是进行真正的IO/计算。

512MB X1 Heroku 测功机

普通 Rails 应用程序在启动时至少需要 200 MB 内存,如果每个线程占用(大约)1MB 内存,则总内存消耗将为

200 + (300 *1) = 500 MB

如果某个线程在计算期间需要更多内存(即获取更多 ActiveRecords、读取大文件……),则整个 sidekiq 将崩溃。

当我以全机器潜力运行 sidekiq 时,垃圾收集不会立即发生,这导致内存增加并经常使 sidekiq 崩溃。

另外,线程越多,完成每个作业所需的时间就越多。在您的环境中分析此案例。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

sidekiq - 并发 > 50 稳定吗? 的相关文章

随机推荐

  • 客户端加密的有效用例有哪些?

    我刚刚读到斯坦福大学 Javascript 加密库 http crypto stanford edu sjcl jsfiddle 示例 http jsfiddle net kRcNK 它完全用 JavaScript 支持 SHA256 AE
  • DICOM 和图像位置患者

    我试图弄清楚 DICOM 图像位置 0020 0032 是绝对坐标还是只是我拥有的任何切片方向的坐标 例如 我有两个平面 一个矢状平面和一个冠状平面 与 DICOM 标头中的 x y z 形式的相应图像位置 以毫米为单位 交错 我的问题是
  • 应用内结算,签名验证失败

    当我尝试获取订阅时 出现以下错误 签名认证失败 签名与数据不匹配 应用内结算警告 购买签名验证FAILED 不添加项目 我的代码是 String base64EncodedPublicKey MY KEY compute your publ
  • 我如何判断给定的 hWnd 是否仍然有效?

    我正在使用生成 Internet Explorer 实例的第三方类 该类有一个属性 hWnd 它返回进程的 hWnd 稍后 我可能想重用应用程序的实例 如果它仍然存在 因此我需要告诉我的帮助器类附加到它 在此之前 我想知道给定的 hWnd
  • 为什么我们需要绑定 std::cin 和 std::cout?

    默认情况下 标准输入设备与标准输出设备以以下形式绑定在一起 std cin tie std cout 这保证了在调用输入之前输出缓冲区已被刷新 所以我尝试使用来解开它们std cin tie 0 但看起来 结果 与并列的没有什么区别 inc
  • 如何使用另一个反应性对象 (ref) 的值设置反应性对象 (ref) 的值?

    我正在尝试设置 a 的值Form基于另一个反应变量中的数据 称为Product但它似乎不起作用 这Form应将其值设置为Product数据如果可用 如果不可用 则使用null 这是vue组件代码的一部分 props ProductID ty
  • CSS 动态创建列

    我有三个 div 要素 div class foo A div div class foo B div div class foo C div 期望的行为 我想编写一些CSS来随着屏幕尺寸的变化创建以下效果 不良行为 我知道如何实现以下 不
  • 如何增加数组的长度

    我有一个快速的问题 我在 java 中有一个整数数组 它的长度需要在整个类中变化 具体来说 我需要在某些情况下将其增加一 我这样尝试过 sbgHeadX new int numberOfSBG 当我需要时 我会增加整数变量 numberOf
  • JavaFX TableView scrollTo() 导致错误的行开始编辑

    我有一个可编辑的 TableView 其中有一个按钮添加新行 然后在该行的第一列上调用 table edit 当用户想要添加不在视口之外的行时 应该发生的情况是表格在视口内滚动新行并开始编辑 但是 调用 table scrollTo new
  • 在一天中的特定时间(例如,商店“营业时间”)显示 DIV

    我需要切换DIV基于时间的可见性 以便我的网站显示我的实体店何时营业 例如 07 00 15 59 显示 div 16 00 06 59 隐藏 div Thanks 这是一个基本示例 gets the current time var d
  • 如何在 MySQL 查询中使用正则表达式

    我有一个简单的任务 我需要搜索以字符串字符开头及其后一个数字的记录 我正在尝试的是这个 SELECT trecord FROM tbl WHERE trecord LIKE ALA d And SELECT trecord FROM tbl
  • 按 Enter 时未启动搜索活动

    按 Enter 时不会启动搜索活动 搜索视图在操作栏上显示得很好 但是当我输入搜索查询并按 Enter 键时 AndroidManifest xml
  • 由测试容器存储启动的 Ryuk 容器不会停止单例容器

    我有几个测试节点 但我将容器作为单例运行 ActiveProfiles test SpringBootTest webEnvironment SpringBootTest WebEnvironment RANDOM PORT AutoCon
  • 两个日期之间的周 Java + Joda 时间

    我想获取 Java 中两个日期范围之间的周数和月数 例如 开始日期 03 01 2012 结束日期 03 05 2012 由于这两个日期属于不同的两周 我希望结果为 2 而不是 0 问题的第二部分是 开始日期 02 29 2012 结束日期
  • IE可枚举垃圾创建

    我在实现 IEnumerable 接口的对象池中有以下代码 public IEnumerable
  • 使用 MongoDB 搜索实现自动完成功能

    我有一个MongoDB表格文件的收集 id 42 title candy can description canada candy canteen brand cannister candid manufacturer candle can
  • 如何增加条形图条形之间的间距

    How do I increase the space between each bar with matplotlib barcharts as they keep cramming them self to the centre thi
  • 强制不同的线程休眠

    所以我有一个程序可以充当其他程序的 外壳 它的核心是传递一个类 一个方法名称和一些参数 并处理函数的执行 其想法是允许其他程序员基本上安排他们的进程在此 shell 服务上运行 除了一个问题之外 一切正常 通常 这些计划执行的进程会占用大量
  • 获取模块中定义的所有常量的值

    我想获取模块中定义的所有常量的值 module Letters A apple freeze B boy freeze end constants给了我常量的名称 Letters constants false gt A B 我如何获得它们
  • sidekiq - 并发 > 50 稳定吗?

    Sidekiq 文档 https github com mperham sidekiq wiki Advanced Options concurrency says 不要将并发设置高于 50 我见过稳定性问题 以并发数100为例 好吧 我的