16

この質問への回答は、レジストリ設定と Windows のバージョン、および十分なメモリがない場合は RAM の量に依存する可能性があることを理解しています。この質問のために、サーバーには十分な RAM (3+ GiB) があると仮定します。

アプリケーション (この場合はサード パーティのアプリケーション) が 1 時間に数百のハンドルをリークする場合、他のアプリケーションが問題に遭遇する前に、そのアプリケーションが合計何個のハンドルをリークできるでしょうか? 「トラブル」とは、たとえば、スレッドの開始に失敗したり、ファイルを開けなかったりすることを意味します。

数万のハンドルを使用するプロセス (通常はデータベース プロセス) で問題なく動作するサーバー (負荷の軽い) を見たことがあります。(とにかく、それはプロセスごとの制限だったので、その点をはるかに下回っている私のアプリケーションには影響しません。)

誰かが質問に答えるか、(ハンドルやその他のシステム リソースを) 実質的に使い果たす前に Windows サーバーが許可する合計ハンドル数について説明しているリソースを教えてもらえますか?

4

5 に答える 5

21

このトピックに関する Raymond Chen の投稿を参照してください。ウィンドウ マネージャーは、プロセスごとに 10K の制限を適用し、システム全体で合計 32K の制限を設けています。そのため、1 時間あたり 100 ハンドルのみがリークする場合は、誤動作を開始するまでに数日間のアップタイムがあります。

すべてのハンドルが等しいわけではないことに注意してください。たとえば、ウィンドウ ハンドルは DB ハンドルではなく、異なる規則に従う場合があります。したがって、プログラムがリークしているハンドルの種類によっては、この制限が適用されない場合があります。こちらのブログ記事もお読みください。

于 2009-06-04T15:57:53.830 に答える
6

ハンドルが表す実際の「もの」が存在するメモリのプールであるデスクトップヒープ。割り当てたハンドルの数ではなく、そのハンドルの下の各オブジェクトが使用しているメモリの量が重要な場合があります。この方法でヒープをデバッグできます。インストールするのは苦痛です。

(これは私の回答の別のものからリサイクルされました)

于 2009-06-04T15:58:19.413 に答える
5

これらの値は新しい Windows バージョンで変更される可能性があるため、SysInternals ツールを使用して概算を取得できTestLimitますTestLimit64。x64 バージョンは、特にメモリ テストのために、しばらく実行される可能性があります (ハード ディスク (スワップ ファイル) を使用して、より多くの仮想メモリを取得する場合があります)。

http://live.sysinternals.com/WindowsInternals/または http://download.sysinternals.com/files/TestLimit.zipからツールを取得します。

コマンド ライン オプション:

-p check process limit
-t check thread limit
-h check handle limit
-u check user handle limit
于 2015-01-07T23:10:18.930 に答える
2

これによると、10000。

于 2009-06-04T15:53:29.383 に答える