# Sidekiq 任务并发问题

**URL:** <https://meta.discourse.org/t/sidekiq-job-concurrency-issue/274618>\
**Category:** Self-hosting\
**Tags:** unsupported-install\
**Created:** [2023年八月10日 10:48 UTC](https://meta.discourse.org/t/sidekiq-job-concurrency-issue/274618 "2023-08-10T10:48:29Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![Prasanth\_Balan](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/prasanth_balan/32/281256_2.png) [@Prasanth\_Balan](https://meta.discourse.org/u/Prasanth_Balan)\
**Post date:** [2023年八月10日 10:48 UTC](https://meta.discourse.org/t/sidekiq-job-concurrency-issue/274618/1 "2023-08-10T10:48:29Z")

</div>

我们有一个关于在多 Pod 上运行 Sidekiq 的问题。

**场景 1：**  
在开发环境中，我们只有一个副本，这意味着只有一个 Pod 在运行。这里没有任何问题。  
供参考：  
已检查：_forum\_url/sidekiq/busy_（运行 1 个进程）

**场景 2：**  
在预生产和生产环境中，我们有多个副本（运行多个 Pod）。我们遇到了 Sidekiq 并发问题（作业正在运行，但跳过了代码执行）。

供参考：  
已检查：_forum\_url/sidekiq/busy_（运行多个进程）。每个 Pod 运行一个 Sidekiq 进程。

请纠正我，  
_运行多个 Sidekiq 进程是否可以？_  
_如果不行，如何修复作业并发问题？_

供参考，我们正在使用 [Discourse Docker](https://github.com/discourse/discourse_docker)。

我需要遵循哪些适当的步骤。提前感谢。

---

<div class="post-metadata">

**Author:** ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)\
**Post date:** [2023年八月10日 11:02 UTC](https://meta.discourse.org/t/sidekiq-job-concurrency-issue/274618/2 "2023-08-10T11:02:27Z")

</div>

“并发”问题具体指的是什么？可以详细说明一下吗？到底是什么顺序被打乱了？

将 Sidekiq 作业添加到队列并不能保证整体的执行顺序，因为有不同的队列具有不同的优先级，所以某些作业可能会领先于其他作业。

还有“跳过代码执行”。可以详细说明一下吗？什么代码？当作业运行时，代码不会被跳过。您是否检查过 `/logs` 以确保没有出错？

并且请注意，您可能正在运行一个不受支持的安装，这可能是您问题的根源……

---

<div class="post-metadata">

**Author:** ![Prasanth\_Balan](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/prasanth_balan/32/281256_2.png) [@Prasanth\_Balan](https://meta.discourse.org/u/Prasanth_Balan)\
**Post date:** [2023年八月11日 05:35 UTC](https://meta.discourse.org/t/sidekiq-job-concurrency-issue/274618/3 "2023-08-11T05:35:10Z")

</div>

您好 @merefield 感谢您的回复

_ **您说的“并发”问题具体是指什么？可以详细说明一下吗？具体是什么东西没有按顺序执行？** _

正如我上面提到的，在预生产和生产环境中运行着多个 sidekiq 进程。

 ![Screenshot 2023-08-11 at 10.16.58 AM](https://global.discourse-cdn.com/meta/original/4X/4/2/0/4208af71548cd59653989e2f7b3e7ee705435743.jpeg)

我不确定！由于多工作进程，作业可能会在争抢时混淆它应该由哪个进程处理。

_ **还有“跳过代码执行”。可以详细说明一下吗？什么代码？当作业运行时，代码不会被跳过。您是否检查过 `/logs` 以确保没有出错？** _

我们正在运行一些自定义的 sidekiq 作业，用于将一些自定义统计数据导出到 CSV 文件。该作业是定期运行的。有时文件导出没有发生。作业运行但没有任何错误消息。

例如：

 ![Screenshot 2023-08-11 at 10.37.32 AM](https://global.discourse-cdn.com/meta/original/4X/5/7/8/5784859e3a4595a97458f2d46afd4c0ef032198d.png)

为了测试目的，如果我点击这个触发按钮，作业就会运行，但有时文件导出不会发生。

供您参考，在开发环境中运行的代码相同，但它只有一个 sidekiq 工作进程。在那里运行正常。我怀疑问题是由于在生产/预生产环境中运行了多个 sidekiq 进程。

_ **您是否检查过 `/logs` 以确保没有出错？** _

是的，我们没有收到与该作业相关的任何错误。

_ **并且请注意，您可能正在运行不受支持的安装** _

我们正在运行最新的 discourse 版本。

谢谢

---

<div class="post-metadata">

**Author:** ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)\
**Post date:** [2023年八月11日 08:11 UTC](https://meta.discourse.org/t/sidekiq-job-concurrency-issue/274618/4 "2023-08-11T08:11:42Z")

</div>

> [@Prasanth\_Balan](#):
>
> 我怀疑问题出在生产/预生产环境中运行了多个 sidekiq 进程。

你必须考虑并发性。这是一个多线程批处理系统。

> [@Prasanth\_Balan](#):
>
> 我们运行的是最新的 discourse 版本。

在 Kubernetes 上运行的人也有一些，但这里不支持。

我认为你必须在你的作业中添加一些日志记录，以找出发生了什么。

这是你自己的自定义代码，对吧？

---

<div class="post-metadata">

**Author:** ![Prasanth\_Balan](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/prasanth_balan/32/281256_2.png) [@Prasanth\_Balan](https://meta.discourse.org/u/Prasanth_Balan)\
**Post date:** [2023年八月11日 08:53 UTC](https://meta.discourse.org/t/sidekiq-job-concurrency-issue/274618/5 "2023-08-11T08:53:48Z")

</div>

> [@merefield](#):
>
> 我认为您将不得不为您的作业添加一些日志记录，以找出正在发生的事情。

我们已经在自定义代码中添加了日志记录。我们的代码没有问题。

> [@merefield](#):
>
> 这是您自己的自定义代码，对吗？

是的

> [@merefield](#):
>
> Kubernetes 上的某些人也是如此，但这里不支持。

是的，我们正在使用 Kubernetes 集群。

只有一个问题！

sidekiq 应该只运行一个进程吗？还是运行多个 sidekiq 进程也可以？

---

<div class="post-metadata">

**Author:** ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)\
**Post date:** [2023年八月11日 08:58 UTC](https://meta.discourse.org/t/sidekiq-job-concurrency-issue/274618/6 "2023-08-11T08:58:43Z")

</div>

> [@Prasanth\_Balan](#):
>
> sidekiq 应该只运行一个进程吗？还是运行多个 sidekiq 进程是可以的？

像任何一个不错的批处理系统一样，它被设计成可以同时运行多个作业，否则它就无法扩展。

确保在设计作业时考虑到这一点。
