1

私は現在、Gmail からユーザーのメールのスライド ウィンドウを取得し、パフォーマンス上の理由からそれらをローカルに保存する IMAP サービスに取り組んでいます。電子メールの転送、デコード、および保存は機能しますが、IMAP IDLE コマンドを介してアイドル状態になっているスレッドは、存続することが困難になっています。

何が起こるのですか?スレッドは、ユーザーごとに 1 つのスレッドで rake タスクを実行することによって開始されます。これは正常に動作しており、IMAP IDLE シグナルが失われたり、接続がリセットされたり、スレッドが停止したりした場合に、問題のあるスレッドを再起動しています。しかし、コードがメモリ リークなどを引き起こしているようで、スレッドの枯渇につながっています。つまり、IMAP IDLE シグナルが受信されないため、スレッドは正常に停止していると識別されますが、スレッドを再起動しようとすると、スレッド自体が実行されません。

より具体的には、メモリ使用量が数日以内に64 MiB から 300 MiB を超えるまで増加し、スレッドの枯渇を引き起こす可能性があります。しかし、これについてはよくわかりません。ステージング マシンでより少ないスレッド (15 ユーザーのみ = 15 スレッドに加えて Ruby IMAP ライブラリの 15 スレッド) を使用してデバッグし、作成されたオブジェクトをカウントすると、メモリ使用量のわずかな増加しか確認できませんでした。

したがって、私の質問は... ;)

  • これを適切にデバッグする方法は?
  • Ruby にはスレッド スタベーションの問題がありますか? JRuby も試しましたが、役に立ちませんでした。
  • そして、他の誰かが同様の問題を経験していますか、または他の誰かが同様の問題を経験しましたか?
4

1 に答える 1

0

これは一筋縄ではいきませんが、コードまたは一部のライブラリがスレッドまたはメモリをリークしていると思われる場合は、アプリケーションの JRuby バージョンでPlumbrを試すことができます。Plumbr は主に Java アプリケーションのメモリ リークを検出することを目的としていますが、JVM ベースの言語でもいくつかの成功例があります。

于 2012-09-19T06:54:18.760 に答える