私のチームはapache camelを使用して動作する(非常に単純な)サービスを提供していますが、機能的にすべてのテストはOKですが、負荷テストはサービスが時間の経過とともにメモリを消費することを示します。ヒープダンプを調べると、メモリ消費量は機内リポジトリから来ていることがわかります。ルートを介して送信されたすべての単一の交換が保持されているように見えますが、ルートが完了し交換が正常に行われた後に交換を保持する必要がある理由は特定できません。なぜキャメラはインフォメーションレポジトリ内の交換を保持していますか?
私のチームからこの問題への初期の反応は、それがメモリリークであったことですが、私はこれが当てはまるとは思わない - 思いがけないアクションがある - ガベージコレクションはそれらを破棄しようとはしません。
難しいのは、保持されていると思われるエクスチェンジの1つのコピーだけではなく、交換ライフサイクルのすべてのステップが保持されていることです。ルートは特に複雑ではありませんが、そのルートを集約して問題を誇張します。
コンポーネントを追加して、失効したエクスチェンジをインフラレポジトリから消去することを検討しましたが、それはその点を見逃していました。
Camelがこのように動作する理由を誰でも説明できますか?
コードはありません?私は私のルートでこの動作を見ていない。 – Namphibian
サービスのコード全体(大量のコード自体)を提供することなく、いくつかのスニペットを提供することはかなり無意味です。それは疑問ではありません - キャメルが機内交換を保持する理由は何ですか?おそらく「ラクダはいつインフォメーションレポジトリからエクスチェンジを削除しますか?」より良い質問になるでしょう... – Julian
私はこの動作を見ていません。 – Namphibian