問題タブ [virtual-memory]

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 投票する
4 に答える
23921 参照

windows - sysinternals プロセス エクスプローラーの「仮想サイズ」とは

私のアプリケーションは数時間実行されますが、タスク マネージャーの値 (vmsize、メモリ) に増加はありません。しかし、数時間後にメモリエラーが発生します。

sysinternals では、「仮想サイズ」が継続的に増加していることがわかります。約 2 GB に達すると、メモリ エラーが発生し始めます。

それで、それはどのようなメモリリークですか?コードでそれを示すにはどうすればよいですか? メモリ値が増加せず、sysinternsl プロセス エクスプローラーの仮想サイズのみが増加する任意のコードで同じことを再現することは可能ですか?

提案をありがとう

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

linux - Linux: ページ フォールトとネットワーク ファイルシステム

Linux システムで物理メモリが不足した場合、非アクティブな実行可能コードページは削除されますか? それらをスワップに保持する理由がないため、答えはイエスだと思います。したがって、それらは単に破棄され、必要に応じて再ロードされます(私の知る限り、それがFreeBSDの機能です)。

上記が Linux に当てはまる場合、私の質問は、ネットワーク ファイルシステム (NFS など) から実行される実行可能ファイルをどのように処理するかということです。ページ フォールトが発生した場合、ネットワーク経由で実行可能なページを取得しますか?

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

.net - .NET ガベージ コレクターと x64 仮想メモリ

16 GB の RAM を搭載した Windows Server 2008 x64 で .NET アプリケーションを実行しています。このアプリケーションは、非常に大量のデータ (約 64 GB) をフェッチして分析し、一度にすべてのデータをメモリに保持する必要があります。

予想されること: プロセス サイズが 16GB を超えて 64GB に拡大します。Windows は仮想メモリを使用して、必要に応じてディスクとの間で余分なデータをページングします。これは、従来の仮想メモリの使用例です。

私が実際に見たもの:プロセスサイズは物理メモリの量(16GB)に制限されています。アプリケーションは、その時間の 99.8% をガベージ コレクターで費やします。

アプリケーションが仮想メモリを使用できないのはなぜですか? これは、.NET ガベージ コレクターの構成の問題ですか、それとも Windows x64 仮想メモリ マネージャー自体の問題ですか? アプリケーションが物理メモリに制限されるのではなく、仮想メモリを使用するようにするにはどうすればよいですか?

ありがとう。

-- ブライアン

更新: 同じ動作を示す非常に小さなプログラムを作成しました。

試してみたい場合は、必ず x64 用にビルドしてください。システムに負荷をかけるために、定数を少し変更する必要がある場合があります。私が見た動作は、サイズが 16GB に近づくとプロセスが停止することです。エラー メッセージや例外はスローされません。パフォーマンス モニターは、GC の CPU 時間の割合が 100% に近づいていることを報告します。

これは受け入れられませんか?仮想記憶システムはどこにありますか?

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

c++ - 異なるマシンでのプロセスの仮想メモリサイズ

プロセスの仮想メモリは、マシン(CPU、メモリ)によってサイズが異なる可能性がありますか?このプロセスは、両方のマシンで同じジョブを実行します。

プラットフォームはRHEL5.3(カーネル2.6.18)であり、プロセスはgcc(4.1.2)によってコンパイルされたC++です。

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

c - 仮想メモリの探索 (ProcessWalker)

MSDNのこの記事 「Win32でのヒープメモリの管理」を読んでいました

その中で、彼らは ProcessWalker.exe というツールについて説明しています。

この記事では、このツールを使用して任意のプロセスの仮想メモリの内容を調査できると説明しています。

  1. このツールをどこからダウンロードできるか知っている人はいますか? または、ProcessWalker が廃止される可能性があります。誰か他のそのようなツールを知っていますか?

  2. そして、どうしてそのようなツールが存在する可能性があるのか​​さえ理解できません。そのようなツールはセキュリティ違反を引き起こしませんか?

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

memory-management - Windowsで最小の空き仮想メモリアドレスを取得する

タイトルはほとんどすべてを示しています:ウィンドウの下で最小の空き仮想メモリアドレスを取得する方法はありますか?プログラムの開始時(動的メモリ割り当てが行われる前)に、この情報に関心があることを付け加えておきます。

mallocなぜそれが必要なのか: Windowsで実装を構築しようとしています。それが不可能な場合はVirtualAlloc()、最初のパラメーターとしてNULLを指定したときに返されるものをすべて実行する必要があります。利用可能なものの一番下にある割り当てメモリのように、それが賢明なことをすることを期待するでしょうが、保証はありません。

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

unix - 常駐メモリ使用量の制限

プロセスが使用できる仮想メモリの量を制限せずに、プロセスが使用できる物理メモリの量を制限したいと考えています。私はこれを、メモリ不足の下でさまざまなアルゴリズムの動作を測定するために行っており、利用可能なさまざまな量の物理メモリでパフォーマンスをテストする必要があります。または、何らかの方法でプロセスの常駐メモリの制限をサポートするオペレーティング システムが必要です。

残念ながら、Linux は を尊重/強制しませんしsetrlimit(RLIMIT_RSS, ...)、OSX もそうではありません.[1] これを実行できるオペレーティング システムを教えてください。OSX 以外の BSD はありますか? Solaris でこれを行うメカニズムはありますか? Windowsのいくつかのバリアントはこれを行うことができますか?


[1] Linux は要求を完全に無視し、OSX はそれを使用して、物理メモリが使い果たされたときに最初に何をスワップアウトするかを決定します。Xメガのメモリしか使用できない場合、どちらもアルゴリズムの動作を分析するのに役立ちません。Linux にはカーネル内でこれを行うためのメカニズムがないことが判明したため、誰かがこれを可能にするカーネル フォークを教えてくれない限り、完全に失敗しています。Solaris にはそのオプションすらありませんがsetrlimit()、私が知らない別の方法があるかもしれません。

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

c++ - スワップを使用せずに最大のバッファーを割り当てる

LinuxのC/C ++では、イーサネットポートに接続されたセンサーからのリアルタイムデータとストリーミングデータを約110MB /秒で保存するために、大きな(数ギガバイト)メモリブロックを割り当てる必要があります。保存できるデータシーケンスの長さを最大化するために、可能な限り多くのメモリを割り当てたいと思います。ただし、結果として生じる遅延とディスクアクセスの制限された帯域幅により、センサーの(非常に制限された)バッファーがオーバーフローするため、ディスクスワッピングが発生しないことも確認する必要があります。

割り当てるメモリの量を決定するための最良の方法は何ですか?報告された空きメモリよりもわずかに小さいブロックを割り当てることに制限されていますか、それともLinux仮想メモリマネージャーとより直接インターフェースできますか?

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

c++ - 仮想バイトがプライベート バイトの 2 倍になる理由は何ですか?

アプリケーションの仮想バイトは、プライベート バイトの 2 倍になります。

これはメモリリークを示していますか?アプリケーションの設計が悪い?

OSは32Bit

どんな考えでも大歓迎です。アプリケーションはストリーム データベースです。

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

virtual-memory - ページがディスクからフォールトインされたときに起動する(OS X)dtraceプローブはどれですか?

ページの障害に関するドキュメントを作成していて、具体的な数値を使用できるようにしようとしているので、12 * 1024*1024バイトのデータを読み取る簡単なプログラムを作成しました。簡単:

そうです、それはファイル全体を調べて読み取ります。問題は、このプロセス中に1536回起動するdtraceプローブが必要なことです(12M / 8k)。すべてのfbt:mach_kernel:vm_fault *:プローブとすべてのvminfo :::プローブを数えても、500に到達しないため、適切なプローブが見つからないことがわかります。

ページがディスクからフォールトインされたときに起動するdtraceプローブをどこで見つけることができるか知っている人はいますか?

アップデート:

stdio関数でインテリジェントなプリフェッチが行われていることが問題であるという偶然の機会に、私は次のことを試みました。

このバージョンの実行にははるかに長い時間がかかります(リアルタイムで42秒、そのうちの10秒はユーザーで、残りはシステム時間でした-ページフォールトだと思います)が、それでも予想される5分の1のフォールトが生成されます。

不思議なことに、時間の増加はループのオーバーヘッドとキャスト(charからint)によるものではありません。これらのアクションだけを実行するコードバージョンは.07秒かかります。