問題タブ [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.
gtk - Windowsのcairoまたはgtkでの再フォーカス時にGDIオブジェクトがリークしますか?
cairo、poppler、および gtk+ を使用するプログラム (グミ) があります。alt-tab でフォーカスを切り替えるたびに (ただし、他の手段を使用してフォーカスを変更するときはそうではありません)、タスク マネージャーは 10 ~ 20 個の GDI オブジェクトを取得することを通知します。GDIView によると、これらはほとんどがビットマップと DC ですが、これらは "GDI の合計" のほとんどを占めているにすぎません。「GDI 合計」の 3 ~ 4 倍の「すべての GDI」があります。
これがグミのバグであるかどうかを判断するにはどうすればよいですか (グミは再フォーカス/再描画で何もしないと思うので、可能性は低いと思います)、cairo、poppler、または gtk? バグ レポートを送信できるように、バグの場所を見つけるにはどうすればよいですか? (あるいは、これが gtk/cairo/poppler の既知のバグである場合は、バグ レポートを教えてもらえますか?)
他のスレッド ( Win32Exception: Operation completed successfully ) で述べたように、Windows はプロセスを 10,000 ハンドルに制限しています。そのようなイベントからの gdb バックトレースを以下にコピーします。
http://www.gtk.org/download/win32.php、http://ftp.gnome.org/pub/の 32 ビット ダウンロードから gtk+-bundle_2.24.10-20120208_win32 の cairo と gtk+ を使用しています。 gnome/binaries/win32/gtk+/2.24/gtk+-bundle_2.24.10-20120208_win32.zip . このプロジェクトでは、gtksourceview-2.10.0、libpng-1.5.10、openjpeg-1.5.0、poppler-0.18.4、およびその他のライブラリも使用しています。~すべて MinGW の下でソースからビルドされたもので、関連しているとは思いません。グラフィック。
.net - GDI+ オブジェクトのリーク (フォント、ブラシ)
アプリケーションで GDI フォントとブラシ リークが発生します。ソース コードで作成された (および破棄された) オブジェクトを見つけるにはどうすればよいですか?
呼び出しはなくtoHFont
、Graphics へのすべてのアクセスは using ステートメントにカプセル化されています。GDIView や .NET Memory Profiler などのツールからそのブラシとフォントを知っていますが、リークされたオブジェクトがソース コードのどこで作成されたかはわかりません。
VS2008、.NET 3.5 で C# を使用しています。
java - 別のクローズメソッドによるEclipse4.2リソースリーク
リソースリーク警告を有効にしてEclipse4.2を使用しています。
このコードは、私の意見では、リソースリークの警告を生成します。
コードをリファクタリングし、closeメソッドをfinallyブロックにプルすると、すべて問題ありません。
メソッドのコードを複製したりclose
、リソースリークの警告を無効にしたりせずに、どういうわけかこれらの警告を削除できますか?
ループで同様のことが発生しているというバグレポートをここで見つけましたが、コードにループが存在しません。
mysql - Mysql が突然、失敗したソケットを定期的に開くようになりました
ここで何が起こったのかを必死に理解しようとしましたが、この特定の問題はどこにも見られませんでした。私はデータベースサーバー(リモート、データウェアハウス内、sshによってアクセスされる)の管理を「継承」しました(データクローラーとして機能するLinuxサーバー上でいくつかのphpデーモンが実行され、挿入mysqlへの比較的安定したストリームで情報を処理します。
数日前、サーバーがクラッシュし、再び起動しました。再起動したmysqlサーバーとクローラーにログインし、それ以上考えませんでした。1 日半後、mysql サーバーが動作を停止し、ログインできなかったため診断できず、「/etc/init.d/mysql stop」またはその種類に応答しませんでした。ログ ファイルによると、非常に定期的に (4 分 16 秒に 1 回) エラーをスローし続け、開いているファイル ハンドラーが多すぎると述べています。ただし、クローラーをシャットダウンすると、再度ログインできましたが、mysql はエラーをスローし続けました。lsof を確認したところ、「プロトコルを識別できません」というエラーが表示された多くのオープン ソケットが表示されました。
mysqld 28843 mysql 1990u sock 0,4 2856488 プロトコルを識別できません
mysqld 28843 mysql 1989u sock 0,4 2857220 プロトコルを識別できません
^数千行
クローラーがやったことだと思い、mysqlを再起動したところ、失敗したソケットが消えました。しかし、クローラーが実行されていないときでも、mysql が新しいものを開き続けていることに驚きました。これは非常に定期的に行われ、クローラーがアクティブかどうかに関係なく、1 分間に約 2 つの新しいソケットが失敗しました。mysql が時間を稼ぐために許可されるファイル ハンドラの最大量を増やしましたが、明らかに診断と恒久的な解決策を探しています。
私がフォーラムで見つけたそのようなエラー (ソケット リーク) のすべての説明は、ソケットを閉じているのではなく、独自のソフトウェア リークに関するものであるようです。しかし、これはそれを行うmysql自体のようであり、サーバーがクラッシュして再起動しただけで、正常に機能したときからコードに変更はありません。
何か案は?
java - このコードで「リソース リークの可能性」という警告が生成されるのはなぜですか?
Eclipse (Juno) では、次の警告が表示されます。
潜在的なリソース リーク: 'os' が閉じられていない可能性があります
try
このコードの本文の最初の行:
メソッドopenFileOutput
は をスローするように宣言されていFileNotFoundException
ます。
これは偽陽性ですか?かなりバニラの実行パス分析のようです。
javafx - JavaFX ストレス テストに失敗しました
デスクトップアプリケーションを構築するためのフレームワークとして JavaFX 2.2 を検討しています。しかし、開発者の多くの時間を費やす前に、JavaFX がその仕事に適していることを確認したかったので、リソースがリークするかどうかを確認するための小さなストレス テストを行いました。このテストは、ラベルとボタンを含むステージを無限ループで表示および非表示にします。これは問題なく永久に続くと予想されますが、約 15500 回の反復の後、この例外が発生します。
ステージ上の show()/hide() がリソースをリークし、テスト中にデスクトップ ヒープ メモリが実際にリークしていることを dheapmon が明らかにしているが、制限 (テスト マシンで 20 MB) には達していないことが最も推測されます。GDI ハンドルと USER ハンドルの制限も問題ではありません。これらのハンドルはリークされていないためです (プロセス エクスプローラーによると)。例外の原因について何か提案はありますか?
c++ - C++ - マルチスレッド環境で SQLite3 がハンドルをリークする
10 個のスレッドを生成し、各スレッドがデータベースを開き (すべてのスレッドに共通)、またはオープンに失敗した場合はデータベースを作成し ("Write-Ahead Log" オプションを使用)、データベースにテーブルを作成してから実行する単純なプログラムを作成しました。テーブルに一度に 1 つの行を追加する無限ループに入ります。プログラムが 5 分ごとに約 2 つのハンドルをリークすることがわかりました。Memory Verify というツールを試してみると、リークしたハンドルが SQLite3 ファイル ロックであることがわかりました (バージョン 3.7.13 の 34034 行)。 SQLiteまたは私がそれを使用する方法です。
SQLite3 をビルドするためのコンパイラ オプションを指定していないため、マルチスレッドとしてビルドされます。私の理解では、すべてのスレッドに独自の SQLite 接続があるため、マルチスレッドは正常に動作するはずです。
データベースを開くか作成するには、次のコードを使用します。
すべてのスレッドのハード ループは、INSERT ステートメントの準備、ステップ、およびファイナライズを行う ExecuteQuery を呼び出します。
私のコードに何か間違いがありますか、それとも SQLite の既知の問題ですか? 数日間グーグルで検索しようとしましたが、何も見つかりませんでした。
ご助力ありがとうございます。
よろしく、
アンドレア
PS WinXP 64 ビット PC でテストを実行していることを忘れていました。コンパイラは VS2010、アプリケーションは 32 ビットでコンパイルされ、SQLite バージョンは 3.7.13 です...
android - ファイル ストリームでのリソース リークの警告
行に警告が表示されるのはなぜfos = new FileOutputStream(file)
ですか? 興味深いことに、最初のブランチのみを削除if ( externalStorage )
して残すと、警告は表示されません。
java - リソースリークの危険を冒さずに Java イテレーター内で ExecutorService を使用する方法
リモートの場所から項目をリストする Java イテレーターがあります。アイテムのリストは「ページ」で表示され、「次のページを取得する」操作はかなり遅くなります。(具体的には、イテレータが呼び出されS3Find
、Amazon S3 からオブジェクトを一覧表示します)。
そこで、処理を高速化するために、1 つのリスト ページをプリフェッチしたいと考えました。これを行うために、ExecutorService
およびCallable
/Future
パターンを使用してアイテムの「ページ」をプリフェッチしました。問題は、その反復子の呼び出し元が、クラスに通知せずにいつでも操作を放棄する可能性があることです。たとえば、次のループを考えてみましょう。
その結果、リソース リークが発生しExecutorService
ます。サブミットに使用するCallable
は、含まれている への参照がなくなってS3Find
も (そして次のプリフェッチが完了しても) 実行されたままになるためです。
これを処理する適切な方法は何ですか?間違ったアプローチを使用していますか? プリフェッチごとに新しいベアスレッドを放棄ExecutorService
して使用する必要がありますか (プリフェッチが完了したらスレッドを強制終了します)? ページの各フェッチには約 500 ミリ秒かかるため、毎回新しいスレッドを作成することはおそらく無視できることに注意してください。私が望んでいないことの 1 つは、反復処理が完了したことを呼び出し元に明示的に通知S3Find
することを要求することです (確実に忘れてしまう人もいるからです)。
現在のプリフェッチ コードは次のとおりです ( 内S3Find
)。