問題タブ [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.
solaris - prstat出力のSIZEおよびRSS値の意味
Solarisのprstatから取得するSIZE値とRSS値の意味を誰かが明確に説明できますか?
でメモリを割り当てnew[]
、それを埋め、で解放するテスト用C++アプリケーションを作成しましたdelete[]
。
私が理解したように、SIZE値は、プロセスによって「予約」された仮想メモリの量、つまりメモリが「割り当てられていない」または「新しくなっている」ことに関連している必要があります。
そのメモリは、実際に使用しない限り(いくつかの値で埋める)、RSS値に合計されません。しかし、メモリを解放してもRSSはドロップしません。
これらの2つの値に正しく割り当てることができるセマンティクスがわかりません。
asp.net - w3wp.exe で誰が/何が 5.5 GB の仮想メモリを予約したかを特定する
私のマシン (XP、64) では、ASP.net ワーカー プロセス (w3wp.exe) が常に 5.5 GB の仮想メモリを予約して起動します。これは、ホストしている Web アプリケーションに関係なく発生します (aspx の空の Web ページであっても、何でもかまいません)。
仮想メモリのこの大きな古いチャンクは、プロセスの開始時に予約されているため、これはある種の段階的なメモリ「リーク」ではありません。
windbg を使って調べてみると、メモリがプライベート、予約済み、RegionUsageIsVAD であることがわかります。これは、VirtualAlloc を呼び出す誰かの作業である可能性があることを示しています。また、問題のメモリが、それぞれ 1GB の 4 つの大きなチャンクといくつかの小さなチャンク (それぞれ 1/4GB) で割り当て/予約されていることも示しています。
したがって、誰が VirtualAlloc を呼び出して、このすべてのメモリを予約しているのかを突き止める必要があると思います。それ、どうやったら出来るの?
w3wp.exe は svchost.exe (つまり、IIS/ASP.Net フィルター) によって起動されるプロセスであり、デバッグするために自分で起動しようとすると、メモリ割り当ての前にデバッガーをプロセスに接続するのは難しいです。この大量のメモリ予約なしで終了するだけです。また、コマンド ライン パラメータを再利用すると無効になります (呼び出しプロセスによって作成されたパイプであるため、これは理にかなっています)。
事後にwindbgをプロセスにアタッチできます(これが問題のメモリ領域を見つけた方法です)が、その時点で誰が何を割り当てたかを判断できるかどうかはわかりません。
java - Linux での Java からの仮想メモリ使用量、メモリ使用量が多すぎる
Linux で実行している Java アプリケーションに問題があります。
デフォルトの最大ヒープ サイズ (64 MB) を使用してアプリケーションを起動すると、tops アプリケーションを使用すると、240 MB の仮想メモリがアプリケーションに割り当てられていることがわかります。これにより、コンピューター上の他のソフトウェアで問題が発生し、リソースが比較的制限されます。
OutOfMemoryError
ヒープ制限に達すると anがスローされるため、私が理解している限り、予約済みの仮想メモリはとにかく使用されません。Windows で同じアプリケーションを実行したところ、仮想メモリ サイズとヒープ サイズが似ていることがわかりました。
Linux で Java プロセスに使用する仮想メモリを構成する方法はありますか?
編集1 :問題はヒープではありません。問題は、たとえば 128 MB のヒープを設定した場合でも、Linux は 210 MB の仮想メモリを割り当てますが、これはまったく必要ありません。**
編集 2 : を使用ulimit -v
すると、仮想メモリの量を制限できます。サイズ セットが 204 MB 未満の場合、アプリケーションは 204 MB を必要とせず、64 MB しか必要としない場合でも実行されません。ですから、Java が大量の仮想メモリを必要とする理由を理解したいと思います。これは変更できますか?
編集 3 : 埋め込まれているシステムで実行されている他のいくつかのアプリケーションがあります。また、システムには仮想メモリの制限があります(コメント、重要な詳細から)。
java - オブジェクトをスワップ領域にプッシュしないように Java に指示する
JVM に OS に特定のオブジェクトをスワップ スペースにプッシュしないように指示することは可能ですか?
java - NetBeansから起動したアプリケーションの仮想メモリを増やす方法はありますか?
私のプロジェクトでは、Javaヒープスペースエラーが頻繁に発生します。つまり、プログラムを実行するのに十分なスペースがありません。仮想メモリを増やす方法はありますか?
コマンドラインを使用していません。NetBeansを使用しています。
memory - ページテーブルを使用して仮想アドレスを物理アドレスに変換するにはどうすればよいですか?
通常のページテーブルがあるとしましょう:
ページ テーブル (ページ サイズ = 4k)
51996 のような任意の論理アドレスを物理メモリ アドレスに変換するにはどうすればよいですか?
対数底 2 (4096) を取ると、12 になります。これは、アドレスのオフセットに使用するビット数だと思います。
よくわかりません。51996 / 4096 = 12.69。これは、特定のオフセットで page#12 にあるということですか?
それを「51996」の物理アドレスに変換するにはどうすればよいですか?
windows - 64 ビットの大きな malloc
特に 64 ビットで malloc() が失敗する理由は何ですか?
私の特定の問題は、64ビットシステムで10GBの巨大なRAMチャンクをmallocしようとすることです。マシンには 12 GB の RAM と 32 GB のスワップがあります。はい、malloc は極端ですが、なぜそれが問題になるのでしょうか? これは、Intel コンパイラと MSFT コンパイラの両方を使用する Windows XP64 にあります。malloc は成功する場合もあれば、失敗する場合もあり、約 50% です。8GB の malloc は常に機能し、20GB の malloc は常に失敗します。malloc が失敗した場合、プロセスを終了して新しいプロセスを再度開始しない限り、繰り返されるリクエストは機能しません (その後、50% の成功が得られます)。他の大きなアプリは実行されていません。新たに再起動した直後でも発生します。
リクエストに割り当てるのに十分な大きさのアドレス範囲がないように、利用可能な 32 (または 31) ビットのアドレス空間を使い果たした場合、malloc が 32 ビットで失敗することを想像できます。
物理 RAMとハード ドライブのスワップ スペースを使い果たした場合、malloc が失敗することも想像できます。これは私には当てはまりません。
しかし、他の理由で malloc が失敗する可能性があるのはなぜでしょうか? 他の理由は思いつきません。
私は、特定の例よりも一般的な malloc の質問に興味があります。いずれにせよ、メモリ マップされたファイルに置き換える可能性があります。失敗した malloc() は、何よりもパズルのようなものです...ツールを理解し、基本に驚かないことを望んでいます。
windows - 重いプロセスがスワップファイルに沈むのを防ぐ
私たちのサービスは、クライアントのサーバーで夜間にスリープ状態になり、その後、目覚めるのに苦労する傾向があります。発生しているように見えるのは、プロセスヒープ(場合によっては数百MB)がスワップファイルに移動されることです。これは、当社のサービスが使用されておらず、他のサービス(DBバックアップ、AVスキャンなど)の実行がスケジュールされている夜間に発生します。これが発生すると、数時間非アクティブになった後、サービスへの最初の呼び出しに最大数分かかります(その後の呼び出しには数秒かかります)。
これは仮想メモリ管理の問題であると確信しており、OSにサービスを物理メモリに保持させるという考えは本当に嫌いです。これを行うと、サーバー上の他のプロセスに悪影響を及ぼし、サーバー全体のスループットが低下することを私は知っています。そうは言っても、私たちのクライアントは私たちのアプリが応答することを望んでいます。彼らは毎晩の仕事にもっと時間がかかるかどうか気にしません。
Windowsに物理メモリにページを保持させる方法があることを漠然と覚えていますが、私はその考えを本当に嫌います。私は、より高いレベルの機能を開始する内部または外部のウォッチドッグにもっと傾いています(ほとんど何もせず、違いがない内部スケジューラがすでにいくつかあります)。そのようなサービスを提供するサードパーティのツールがあれば、それは同じくらい良かったでしょう。
この種の問題に対するコメント、推奨事項、および一般的な解決策をお聞かせください。このサービスはVC2005で記述されており、Windowsサーバーで実行されます。