Digest 邮件发送中的无限循环

大家好。

我们的 Discourse 服务器陷入了无限循环,不停地发送邮件。以下是 shared/standalone/log/rails/production.log 的输出:

Delivered mail 7db8eecd-c36a-419c-ae34-0561b08bae25@community.xx.cc (1322.2ms)
  Rendered user_notifications/digest.text.erb (Duration: 50.1ms | Allocations: 12577)
  Rendering user_notifications/digest.html.erb within layouts/email_template
  Rendered user_notifications/digest.html.erb within layouts/email_template (Duration: 139.5ms | Allocations: 26910)
  Rendering user_notifications/digest.text.erb
  Rendered user_notifications/digest.text.erb (Duration: 71.7ms | Allocations: 13505)
Delivered mail 5bbf2e54-96a8-437d-a032-69f98a00f22a@community.xx.cc (1485.2ms)
  Rendering user_notifications/digest.html.erb within layouts/email_template
  Rendered user_notifications/digest.html.erb within layouts/email_template (Duration: 70.9ms | Allocations: 20613)
  Rendering user_notifications/digest.text.erb
  Rendered user_notifications/digest.text.erb (Duration: 38.2ms | Allocations: 11390)

这个问题是突然发生的(可能是在摘要定时任务启动时:

现在有一个核心完全忙于发送摘要邮件。

  • 重新构建应用没有帮助;

  • 更新到最新版本后也没有变化;

  • 开启“禁用所有用户的摘要邮件”并重新构建应用后仍无变化;

    #### 已安装
    
    ### 2.4.0.beta5
    

我还能做什么?我该如何停止这种情况?
提前感谢。

1 个赞

我可能说错了,但我觉得发生的情况是:摘要邮件被排入了队列,现在正在发送。它会一直发送直到全部发完。

如果我的判断正确,你可以先禁用邮件,然后找到包含这些邮件的表并删除它们。但下次发送摘要邮件时,这种情况还会再次发生。

1 个赞

是的,但这已经持续三天了。所有其他邮件(例如注册邮件)也不再投递了。社区功能正常,但所有邮件发送功能都失效了。
我发现了一个非常类似的问题——https://meta.discourse.org/t/extreme-memory-usage-due-to-bad-mail-credentials/120080。所以这看起来像是某种棘手的漏洞。

我找到的唯一解决方法是:在我的 SMTP 提供商处移除了身份验证令牌。Discourse 开始显示数百个错误,之后负载才下降。随后我恢复了令牌,现在一切似乎都正常了。

1 个赞

您的邮箱凭证是否不正确?

@codinghorror 我找到了问题的根本原因。我们的邮件服务商出于他们自己愚蠢的原因,移除了我们账户的已验证主机记录。这些主机记录用于在邮件的 from 字段中提供我们的主机信息。因此,在他们这样做之后,Discourse 陷入了无限循环。我认为 Discourse 的流程在这个情况下也存在一个 bug,因为它应该报告错误并停止占用 100% 的 1 个核心。所以账户本身是正确的。但邮件服务商会返回一个发送邮件的错误,比如“发送主机错误”之类的,而这个流程导致了问题。

2 个赞

我同意,这是一种糟糕的状态,我们应该更好地处理它。

1 个赞

现在一切恢复正常了吗?

是的。在我更改了邮件凭证之后。

1 个赞