Azure-sdk-for-java: [バグ] ServiceBusReceiverAsyncClientのメモリリークを閉じる

作成日 2020年12月06日  ·  3コメント  ·  ソース: Azure/azure-sdk-for-java

バグを説明する
ServiceBusReceiverAsyncClientインスタンスが作成されると、2つのLockContainerインスタンスフィールドが作成されます。

各変数( LockContainerのコンストラクター内)は、リソースを定期的にクリーンアップするためにFluxにサブスクライブします。 クリーンアップで使用されるラムダはロックコンテナーインスタンス自体を使用するため、Fluxはコンシューマーが破棄されるまでロックコンテナーインスタンスを参照し続けます。

問題は、 ServiceBusReceiverAsyncClientが閉じられているときに、 LockContainer変数も閉じられていないため、メモリリークが発生することです。

再現するには
再現するには、 ServiceBusReceiverAsyncClientインスタンスを作成し、 closestartを繰り返し呼び出します。 ヒープダンプでメモリ使用量を追跡するには、VisualVMを使用します。

これは、表示されるはずのメモリ使用パターンです(メモリ使用量はわずかですが着実に増加しています)。
Screenshot 2020-12-05 at 23 53 01

そして、これはヒープ内のインスタンスの数とそれらの保持されたサイズが時間内にどのように見えるかです:
Screenshot 2020-12-05 at 23 55 07
Screenshot 2020-12-05 at 23 56 24

予想される行動
LockContainerインスタンスは、クライアントが閉じられたときに閉じる必要があるため、メモリにリークしないようにする必要があります。

セットアップ(次の情報を入力してください):

  • OS:Mac / Linux
  • IDE:IntelliJ
  • 7.0.0

情報チェックリスト
上記のすべての情報を追加したことを確認し、必須フィールドをチェックしてください。そうしないと、発行者は不完全なレポートとして扱われます。

  • [X]バグの説明が追加されました
  • [X]再現手順が追加されました
  • [X]セットアップ情報が追加されました
Client Service Bus customer-reported question

全てのコメント3件

こんにちは、この問題を修正したPRを開きました: https

変更や詳細が必要な場合はお知らせください。

よろしくお願いします!

PR @connieyをチェックしてくれてありがとう! すぐに新しいリリースを期待できますか? よろしくお願いします!

@ marciopd 1月にリリースされます。

#17993で修正

このページは役に立ちましたか?
0 / 5 - 0 評価