メールで失敗したジョブ

こんにちは!

Discourse のビルド: 3.5.0.beta2-dev(176ee0bf60)
ホスト: VPS - Centminmod (131.00stable) on Alma8
問題: メール送信が断続的に失敗する

この VPS には 2 つの vHost があります。1 つは Xenforo、もう 1 つは Discourse です。

私の Xenforo ホストは、問題なく 24 時間 365 日メールを送信しています。しかし、Discourse は約 24 時間ごとに「[増加する数値] 件のメールジョブが失敗しました。app.yml を確認し、メールサーバーの設定が正しいことを確認してください。Sidekiq で失敗したジョブを確認してください。」というエラーで失敗するようです。

問題は、Docker サービスを再起動することで一時的に「解決」できます。メールフローが再開します。
メール設定が正しいことは確かです。Docker サービスを再起動すると、管理画面 → メール → サーバー設定とログ → 設定にアクセスしてメールを送信できます。

失敗すると、送信できません。

Fastserver-app の再起動のために Sidekiq が過剰なメモリ (5xxM を使用) を消費しているというログがたくさん見られます。

activesupport-7.2.2.1/lib/active_support/broadcast_logger.rb:130:in `block in warn'
activesupport-7.2.2.1/lib/active_support/broadcast_logger.rb:231:in `block in dispatch'
activesupport-7.2.2.1/lib/active_support/broadcast_logger.rb:231:in `each'
activesupport-7.2.2.1/lib/active_support/broadcast_logger.rb:231:in `dispatch'
activesupport-7.2.2.1/lib/active_support/broadcast_logger.rb:130:in `warn'
/var/www/discourse/lib/demon/sidekiq.rb:55:in `block in rss_memory_check'
/var/www/discourse/lib/demon/sidekiq.rb:49:in `each'
/var/www/discourse/lib/demon/sidekiq.rb:49:in `rss_memory_check'
config/unicorn.conf.rb:132:in `block (2 levels) in reload'

また、Job exception: no address for meta.discourse.org(ResolvError) というログも見られます。

excon-1.2.4/lib/excon/socket.rb:191:in `connect'
excon-1.2.4/lib/excon/ssl_socket.rb:194:in `connect'
excon-1.2.4/lib/excon/socket.rb:60:in `initialize'
excon-1.2.4/lib/excon/ssl_socket.rb:10:in `initialize'
excon-1.2.4/lib/excon/connection.rb:487:in `new'
excon-1.2.4/lib/excon/connection.rb:487:in `socket'
excon-1.2.4/lib/excon/connection.rb:120:in `request_call'
excon-1.2.4/lib/excon/middlewares/mock.rb:57:in `request_call'
excon-1.2.4/lib/excon/middlewares/instrumentor.rb:34:in `request_call'
excon-1.2.4/lib/excon/middlewares/idempotent.rb:19:in `request_call'
excon-1.2.4/lib/excon/middlewares/base.rb:22:in `request_call'
excon-1.2.4/lib/excon/middlewares/decompress.rb:14:in `request_call'
excon-1.2.4/lib/excon/middlewares/base.rb:22:in `request_call'
excon-1.2.4/lib/excon/connection.rb:293:in `request'
/var/www/discourse/lib/discourse_updates.rb:136:in `new_features_payload'
/var/www/discourse/app/jobs/scheduled/check_new_features.rb:24:in `execute'
/var/www/discourse/app/jobs/base.rb:316:in `block (2 levels) in perform'
rails_multisite-6.1.0/lib/rails_multisite/connection_management/null_instance.rb:49:in `with_connection'
rails_multisite-6.1.0/lib/rails_multisite/connection_management.rb:21:in `with_connection'
/var/www/discourse/app/jobs/base.rb:303:in `block in perform'
/var/www/discourse/app/jobs/base.rb:299:in `each'
/var/www/discourse/app/jobs/base.rb:299:in `perform'
/var/www/discourse/app/jobs/base.rb:379:in `perform'
mini_scheduler-0.18.0/lib/mini_scheduler/manager.rb:137:in `process_queue'
mini_scheduler-0.18.0/lib/mini_scheduler/manager.rb:77:in `worker_loop'
mini_scheduler-0.18.0/lib/mini_scheduler/manager.rb:63:in `block (2 levels) in ensure_worker_threads'

このサーバーの Docker に関する設定は、しばらく変更していません。カーネル、PHP、およびこの Docker 外の他のサービスは更新しました。
Discourse のビルドを更新してから、この問題がより頻繁に発生するようになりました。それ以前は安定していました。

DNS は 8.8.8.8 と 8.8.4.4 を使用しています。

何かヒントがあれば教えてください!

Sidekiqがメモリを過剰に消費すると、Discourseが再起動し、スケジュールされたメールジョブが中断される可能性があります。Discourseには、Sidekiqのメモリ使用量が定義されたしきい値を超えた場合に自動的に再起動する機能が含まれています。

この問題に対処するには、app.ymlファイルでUNICORN_SIDEKIQ_MAX_RSS設定を確認してください。値が低すぎる場合は、増やすことを検討してください。

この問題に関するさらなる議論については、こちらのトピックを参照してください。
Sidekiq is consuming too much memory - restarting

「いいね!」 2

その設定を今調整し、問題が続くようであれば元に戻します。

「いいね!」 1

うーん、24時間以上経ってもメールが失敗しました…

Jobs::HandledExceptionWrapper: Wrapped Net::OpenTimeout: execution expired
「いいね!」 1

SMTPサーバーがディスコースインスタンスから到達可能であることを確認してください
telnet DISCOURSE_SMTP_ADDRESS DISCOURSE_SMTP_PORT

「いいね!」 1

また失敗を待って、再試行します。

同じVPSにXenForoの非Dockerインストールがありますが、問題ありません。

結果を報告します。これまでのご指導に感謝します。

「いいね!」 2

SMTPサーバーに接続できます。

「いいね!」 2

短時間に数回の失敗がありましたが、その後約8時間何もありませんでした。

「いいね!」 1