問題タブ [handle-leak]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - C# PerformanceCounter クラスが原因でハンドル リークが発生する
.NET 4.0 で開発されたアプリケーションがあります。このアプリケーションは、いくつかのカスタム パフォーマンス カウンターを追跡し、ユーザーに表示します。最近、アプリケーションにハンドル リークがあることがわかりました。Mutant と PcwObject の 2 種類のハンドルがあります。
このページ ( http://blogs.technet.com/b/yongrhee/archive/2011/12/19/how-to-troubleshoot-a-handle-leak.aspx ) をたどり、次のスタック トレースを取得しました。
と
また、ハンドルの状態を監視するために Process Explorer も開きました。私の観察によると、上記の 2 つのハンドル (3760 と 3998) は 30 分以上存続し、まだ破壊されていません。ハンドル数は 2 時間以内に最大 1000 増加します。それらの半分は Mutant で、残りの半分は PcwObject です。
PerformanceCounter coz に関連していると思われます。レジストリからの PerformanceCounter クラスの grep データを知っており、スタック トレースで PerflibciQuery と RegQueryValue を見つけました。
インターネットで検索しましたが、うまくいかないようです。誰かこれについて何か考えがありますか?ありがとう
追加情報
これらのパフォーマンス カウンターを 1 つずつテストしたところ、このカウンターを取得するときにこれらのハンドルがリークしていたことがわかりました。PerformanceCounter("HTTP Service Request Queues", "CurrentQueueSize", "ABC")
私のコードは次のようなものです:
counter
はメンバー変数であり、このクラスが破棄されると破棄されると確信しています。だから、ハンドルが漏れる理由がわかりません。
memory-leaks - 「!htrace -diff」結果でスタック トレースのすべてのフレームを取得するにはどうすればよいですか?
「!htrace -diff」では 16 フレームしか表示できないようです。スタック トレースのフレーム数を増やすにはどうすればよいですか? 以下は、!htrace -diff によって検出されたリークされたハンドルの 1 つです。完全なスタック トレースがないと、何も読み取れません。
c++ - CreateFileMapping、MapViewOfFile、C++ リークの処理
背景:複数のプロセスからアクセスできるメモリ マップ ファイルを作成しようとしています。以下のコードでは、現在の質問に関連するコードのみを入れて、物事を単純化しています。msdn によると、ファイルマップを作成し、ファイルのビューをマップし、CreateFileMapping から受け取ったハンドルを閉じることができ、MapViewOfFile は FileMap を維持します。UnmapViewOfFile.
MSDN: CreateFileMapping 関数
ファイル マッピング オブジェクトのマップされたビューは、オブジェクトへの内部参照を維持し、ファイル マッピング オブジェクトは、それへのすべての参照が解放されるまで閉じません。したがって、ファイル マッピング オブジェクトを完全に閉じるには、アプリケーションは UnmapViewOfFile を呼び出してファイル マッピング オブジェクトのすべてのマップされたビューのマップを解除し、CloseHandle を呼び出してファイル マッピング オブジェクト ハンドルを閉じる必要があります。これらの関数は、任意の順序で呼び出すことができます。
問題:ファイルのビューを正常にマッピングし、CreateFileMapping によって受け取ったハンドルを閉じた後、FileMap は存在しなくなり (まだ存在するはずです)、MemMapFileReader はエラー 0 で新しいマップを作成できます。エラー 183 「既に存在します」)
悪い解決策:ハンドルを閉じないと MemMapFileReader プログラムからアクセスできますが、プロセスが閉じられるまでハンドルが閉じられないため、MemMapFileCreator でハンドル リークが発生します。
質問:何が欠けているか、または間違っていますか?
MemMapFileCreator
MemMapFileReader
windows - 同期コードが svhost rpcss でハンドルリークを引き起こす可能性があります
win7 x64 システムで一種のプロキシ ソフトウェアを実行していますが、svhost -k rpcss プロセスが深刻なハンドル リークに直面しているようで、数日で 100,000 に達したとしても、ハンドル リークは増え続けています。システムを再起動しないと、PC の動作が遅くなりすぎます。
今、私はこの問題がおそらくプロキシソフトウェアによって引き起こされているのではないかと考えています.windbgを使用してデバッグしようとしていますが、この問題の原因がプロキシソフトウェアであるかどうかを確認する方法はまだわかりません.
誰かが私に言った、悪い同期コードは svhost rpcss プロセスでのハンドルリークにつながる可能性がある、それは本当ですか? 誰かが svhost rpcss でリークを引き起こす可能性のあるコードを教えてもらえますか? はいの場合は、最初に windbg でこのコードを調べてから、そのプロキシ ソフトウェアを注意深く調べることができます。
編集1 @PanagiotisKanavosリークにつながる可能性のあるコードを要求するので、serverfaultではなくこの場所で質問する方がよいでしょう
.net - WCF ReliableSession: フレームワーク 4.5 でリークを処理しますか?
一部のサーバーに 4.5 ランタイムをインストールした後、多くの winsock 関連のエラーが発生しました。.Net 4.5 ランタイムで ReliableSessions を使用して WCF を使用している場合 (4.0 では再現できません)、\Device\Afd へのハンドル リークまで問題を追跡しました。
問題を特定/証明するためのテストプログラムを作成しました。
かなりダミーの WCF サービスとクライアント (VS から生成される可能性がある) を想定します。
そしてそれはホスティングと消費です。
テスト プログラムの出力は次のとおりです。
備考:
- Close() がスローされる可能性があるため、より適切なエラー処理を行う必要があることはわかっていますが、この場合はスローされないため、ここに貼り付けるコードを減らすことを好みました。
- ここでは、(\Device\Afd だけでなく) すべてのハンドルのハンドル数をログに記録します。これにより、すばやくテストしやすくなりますが、sysinternals の handle.exe で多くのチェックを行い、ハンドルの名前/タイプを確認しました。
- ハンドルは、サービスではなくクライアントによってリークされます (少なくとも、サービスホストを閉じた後に適切にクリーンアップされます)。
バリエーション:
- Proxy.Close() を Abort() に変更すると、すべてのハンドルが適切に解放されます (ただし、予想どおり、サービスを閉じるのは困難です)。
- でチャネルを作成して
IClientChannel proxy = ChannelFactory<IMyService>.CreateChannel(binding, address) as IClientChannel
も同じ結果が得られます - channelfactory インスタンスを介してチャネルを作成すると、ハンドルが適切に解放されます。
IClientChannel proxy = new ChannelFactory<IMyService>(binding, address).CreateChannel() as IClientChannel
- ClientBase<>.CacheSetting を AlwaysOn に設定すると、問題は解決しますが、常に可能とは限りません。
このプログラムがハンドルをリークしている理由を誰か知っていますか?
django - django 関数 object.filter を使用すると、python のハンドルが増加しました。これを解決するにはどうすればよいですか?
WIN7 32 System
、 、Django 1.8.13
を使用しPython 2.7
ます。
xxx.object.all()
またはのような関数を使用するxxx.object.filter('xx')
と、python のハンドル番号が増加します。
を使ったようでClass QuerySet
、ハンドル数が増えます。たとえadmin-site
、データベースを管理するために を使用するだけです。ハンドル漏れも発生します。
どうすれば解放または解決できますか?
handle-leak - クローズ ハンドルを閉じるスクリプト
私は開発者ではなく、プログラミングのスキルもありませんが、プレイしているゲームからのハンドル リークを軽減するソリューションを探しています。ゲームクライアントを長時間開いていると、ゲームのパフォーマンスが低下することがわかりました。なぜこれが起こっているのかを理解しようとしていたところ、何らかの理由 (おそらくアンチチート) で、ゲーム クライアントが PC 上の他のプロセスのために何千ものハンドルを開いていることに気付きました。たとえば、ゲームを 1 時間プレイした直後に、msedge.exe だけでも既に 500 を超えるハンドルが存在することがわかりました。そして、Edge ブラウザを閉じた後、ハンドルの数は 500 減少せず、増加し続けました。
簡単に言うと、特定の名前 (「msedge.exe」、「notepad.exe」など) のハンドルを探してそれらのハンドルを強制終了する、ある種の cmd/powershell スクリプトを探しています。ただし、特定のプロセス (この場合は BlackDesertOnline.exe) から使用されるハンドルのみです。
このようなことはできますか?