問題タブ [resource-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.

0 投票する
1 に答える
1506 参照

java - Apache HttpAsyncClient でのファイル記述子のリーク

によると、Linux で実行している場合 (Linux でのみ試行)、次のコードは 1 つの anon_inode と 2 つのパイプ ファイル記述子をリークしているようですlsof

ただし、client.execute()が 1 回以上呼び出された場合、リークは発生しません。


完全なサンプル コード:

そうですか

行のコメントを外すexecuteと、リークは消えます。


(1) 意図された/期待される動作ですか、それともバグですか?

(2)なぜ/どのようにこれが起こるのですか?

0 投票する
3 に答える
4494 参照

apache-camel - Camel: xxx から xxx へのファイルの名前変更に失敗しました。コピーが成功した後、ファイル xxx から削除できないためです。

システムの背景: Windows/ServiceMix/Camel/Smooks

私はキャメルルートを持っています

これは、ファイルを取得して Smooks カスタム EDI パーサーにストリーミングすることになっています。これは、キャメルがファイルをmoveNamePrefixディレクトリにコピーし、例外がスローされたときに元のファイルを削除しようとするまで機能します。ファイルがクリーンアップされることはないため、これは無期限に繰り返されます。


そうです、ファイルはまだ開いているため、削除がブロックされています。しかし、そこが少し興味深いところです。開いているファイルをリストすると、実際には複数回開いていることがわかり、2 秒ごとに別のファイルが表示されます。これがポーリングの遅延です。

それでも、この時点で約 7,000 サイクルが完了したにもかかわらず、100 未満であるため、GC (ガベージ コレクション) 中にすべてのファイルが閉じられ、再び蓄積が開始されます。はい、これは、ストリームを参照しているオブジェクトが GC によってクリーンアップされるまで、ストリームが閉じられないことを示唆しています。ただし、コードをトレースしたところ、ストリームは閉じられていますorg.milyn.delivery.sax.SmooksSAXFilter.doFilter

だから、私はここで少し途方に暮れています。これは、Smooks が終了する前に Camel が別のスレッドでトランザクションをコミットしようとしているということですか?

0 投票する
4 に答える
1297 参照

java - Java プログラムでのリソース リーク

ファイルから情報を取得し、ユーザーが探している情報がファイルに含まれているかどうかを確認するメソッドを Java で作成しようとしています。ただし、私が提示するコードでは、Eclipse は「return true;」行でリソース リークがあることを示しています。そして、「br = new BufferedReader(fr);」プログラムの最後で close() メソッドを使用しているにもかかわらず、決して閉じません。どうやら私は何かが欠けているようです。誰かが何が起こっているのかを理解するのを手伝ってくれますか? よろしくお願いします!

0 投票する
2 に答える
350 参照

macos - Mac OS X での奇妙なファイアウォール関連のソケット リーク

Mac OS XI で説明できない奇妙なソケット リークの問題が発生しました。他のポートの中でも 9010 (tcp)、9090 (tcp)、および 6454 (udp) をリッスンするオープン ソース デーモン (olad) があります。デーモンが終了すると、netstat はポート 6454 がまだ開いていてリッスンしていることを示します。

ただし、lsof はソケットを表示しません。

システムがこの状態になると、ポートにパケットを送信することで、キュー カウントが増加することがわかります。

これは、[設定] -> [セキュリティとプライバシー] でアプリケーション ファイアウォールが有効になっていて、バイナリを初めて実行した場合にのみ発生します。つまり、ファイアウォールを無効にすると、リークは発生しません。または、ファイアウォールが有効になっている場合、ダイアログ ボックスが表示されて同意をクリックした最初の実行後、問題は発生しなくなります。

ソケットがリークすると、ファイアウォールを無効にしても解放されません。

プログラムが終了する前にすべてのソケットで close() を呼び出しており、fork() または新しいスレッドへの呼び出しがないことを確認しました。

バグ ケースを絞り込もうとしていますが、pipe()、socket()、bind()、listen()、ioctl()、fnctl()、および select() の間のかなり複雑な相互作用のようです。呼び出しの順序を変更し、ポート 9010 および 9090 でリッスンを削除すると、問題が解消されます。

これをデバッグし続ける方法についての提案や、Mac アプリケーション ファイアウォールが内部でどのように機能するかについてのガイドはありますか?