バグを説明する
ServiceBusReceiverAsyncClient
インスタンスが作成されると、2つのLockContainer
インスタンスフィールドが作成されます。
各変数( LockContainer
のコンストラクター内)は、リソースを定期的にクリーンアップするためにFluxにサブスクライブします。 クリーンアップで使用されるラムダはロックコンテナーインスタンス自体を使用するため、Fluxはコンシューマーが破棄されるまでロックコンテナーインスタンスを参照し続けます。
問題は、 ServiceBusReceiverAsyncClient
が閉じられているときに、 LockContainer
変数も閉じられていないため、メモリリークが発生することです。
再現するには
再現するには、 ServiceBusReceiverAsyncClient
インスタンスを作成し、 close
とstart
を繰り返し呼び出します。 ヒープダンプでメモリ使用量を追跡するには、VisualVMを使用します。
これは、表示されるはずのメモリ使用パターンです(メモリ使用量はわずかですが着実に増加しています)。
そして、これはヒープ内のインスタンスの数とそれらの保持されたサイズが時間内にどのように見えるかです:
予想される行動
LockContainerインスタンスは、クライアントが閉じられたときに閉じる必要があるため、メモリにリークしないようにする必要があります。
セットアップ(次の情報を入力してください):
情報チェックリスト
上記のすべての情報を追加したことを確認し、必須フィールドをチェックしてください。そうしないと、発行者は不完全なレポートとして扱われます。
PR @connieyをチェックしてくれてありがとう! すぐに新しいリリースを期待できますか? よろしくお願いします!
@ marciopd 1月にリリースされます。
#17993で修正