スワップメモリ​​とは何ですか?


26

データベーステーブルの一部を保存するためにRAMを使用しており、その他はハードディスクに保存されています。

今日、自分のプロセスがスワップメモリ​​を使用していることを知りました。スワップメモリ​​とは何ですか?どのプロセスがスワップメモリ​​を使用しているかをどのように検出できますか?


どのプロセスがスワップメモリ​​を使用しているかを知る方法はありませんか???

使用されているページファイルの量とページフォールトについては、Windowsタスクマネージャー(または同様のツール)をご覧ください。

スワップはプロセスごとのものではなく、OS全体のものです。「vmstat」は、使用しているスワップの量に関する情報を表示します。
jrockway

私はwimdowsではなくLinuxで作業しています

このスワップの使用量の理由を持って.....誰かが、それはいつものように多くの私を助けた理由全体thng WSは、当社のside.Thanksから何らかの原因なしに起こるすべてのあなたの答えのための私のサイトのthatsを解析しようとしていた:-)

回答:


41

物理メモリが不足した場合、ディスク上のメモリにデータを保存する仮想メモリを使用します。ディスクからの読み取りは、メモリからの読み取りよりも桁違いに遅いため、すべてが遅くなります。(実メモリと仮想メモリ間でのデータ交換は「スワップ」です。ディスク上のスペースは「スワップスペース」です。)

アプリが「スワップを使用する」場合、使用するメモリを減らすか、RAMを追加購入する必要があります。

(スワップは、使用されていないアプリケーションを使用するまでディスクに保存できるので便利です。その後、「ページイン」して再び正常に実行できます。メモリにない間でも、OSはそのメモリを使用できます。ディスクキャッシュのような他の何かのため。それは非常に便利な機能ですが、プログラムを実行するのに十分な物理メモリがない場合は、間違いなくより多くのメモリが必要です。幸いなことに、メモリは本当に本当に安いです。


1
正確さのために:仮想メモリは、仮想メモリアドレス(使用可能なRAMの数に関係なく、最新のCPUで常に有効になっているもの)を使用することを意味し、スワッピングに直接関係しません(組み合わせて使用​​されますが、基本的に異なる概念)。
FORTRAN


7

コンピューターには、一定量の物理メモリーがあります。しかし、ほとんどの場合、もっと欲しいです。したがって、ディスク上のメモリを交換します。

そのメモリが必要になるたびに、メモリにスワップバックする必要があります(他の部分をスワップアウトする)。遅延を最小限に抑えるための非常にインテリジェントなアルゴリズムがありますが、それでも待機する必要がある場合があります。

Windowsでは、タスクマネージャーを見ると、列ページフォールトを表示できます。これは時間を示し、アプリケーションはディスク上にあり、交換する必要のあるメモリを要求します。ページフォールトが多い=アプリケーションが遅い。

このプロセスはいくつかのレベルで使用されます。高速から低速への要約:

  • CPUレベルには、レジスタがあります。これらは最速のメモリですが、量は限られています。
  • また、CPUには小さなメモリキャッシュがあります。ここでは、高速アクセスのために実行中のプログラムの小さな断片が保存されます。詳細を知りたい場合は、分岐予測アルゴリズムを検索してください。
  • CPUとメインメモリの間にレベル2キャッシュがある場合があります。
  • 次のレベルはメインメモリ(RAM)です。
  • 最後のレベルで最も遅いのはディスクです。USBメモリを追加メモリとして使用できる場合があります。

3
cat /proc/pid/smaps

スワップを使用したくない場合は、スワップパーティションを使用しないでください(の行をコメントアウトします/etc/fstab)が、それにより新しいプロセスの開始が妨げられ、物理メモリが不足するとmallocが失敗します。OSはメモリ内にホットページを保持し、最近使用されていないものをディスクにスワップするため、これは一般的には良い考えではありません...あまり安全ではなく、非常に有用でもありません。

別の解決策は、データベースをハッキングしてページをメモリにロックすることです(実行できることはわかっていますが、今どのように正確に説明することはできません)が、とにかく、データベースが独自のスワッピングを使用する可能性がありますキャッシングメカニズム。

スワップとは何か、仮想メモリがどのように機能するかを知るには、いくつかのオペレーティングシステムの講義をご覧になることをお勧めします。MITオープンコースウェアが役立つかもしれません。


多くのLinuxディストリビューションのデフォルト設定はメモリをオーバーコミットすることであるため、OOMキラーがプロセスをスニッピングし始める可能性があります。事)。
symcbean

1

私は部分的に答えを見つけました。スワップメモリ​​は、オペレーティングシステムが実際にRAMにある情報を別のアプリケーション用に解放するために使用する、コンピューターのハードディスク内のスペースです。これは、システムが新しいプロセスにメモリを必要とし、何も存在しない場合に実行する必要があります。したがって、システムに十分なRAMがある場合、SWAPメモリは必要ないことがわかります。

更新

スワップスペース(または仮想メモリ)を見つけるには、タスクマネージャー(Ctrl + Alt + Del)に移動し、[表示]-> [列]-> [仮想メモリ]からオンにします。次に、メモリ使用量と仮想メモリの差を計算します。また、Vistaを実行している場合にそれを確認する方法についても説明します:http : //www.ehow.com/how_5067693_increase-swap-space.html


-1

スワップは、RAMとして使用されるハードディスク領域です。それは(相対的に言って)で非常に遅いが、彼らはその後、彼らのRAMを扱うことができるより多くのデータを扱うためにしようとしているときにクラッシュからコンピュータを停止します。

プロセスがスワップを使用しないようにするには、RAMを追加します。


1
スワッピングが必要ない場合は、ページファイルの使用を停止してください。しかし、他の問題を期待してください。

1
そうではありません。スワッピングは、データのブロックを移動しているから物理メモリにハードディスク。1回の読み取り。通常は十分高速です。

@xtofl答えはスワッピングに言及せず、パーティションをスワップするだけで、gamecatのコメントはあなたが言ったこととは何の関係もありませんでしたか?:P
RapidWebs 14

-1

プロセスでスワップメモリ​​を使用したくない場合は、スワップメモリ​​を完全に無効にしてください。残念ながら、メモリが足りなくなった場合、Linuxカーネルは実行中のプロセスの一部を強制終了して、メモリを解放して使用できるようにします。

システムに十分なRAMがあれば、実際にはスワップメモリ​​なしで実行できます。

スワップメモリ​​を使用しない768MbのRAMを搭載したラップトップを使用しています。私のニーズには十分です。256MbのRAMを搭載したサーバーがあり、スワップメモリ​​を使用していません。OpenVZ仮想化を使用して、8台の仮想サーバーを問題なく実行しています。

そのため、スワップメモリ​​が必要かどうかはあなた次第です。


どのようにあなたが実行している8つののみ256を持つマシン上のVMをメガバイトのRAM?!?
ウォーレン

VZでは、共通のライブラリがVM間で共有されるためRAMが完全にパーティション分割されていないため、またはそのような影響が生じる可能性があります。したがって、8 x 64Mは必ずしも512Mとは限りません。:)
sybreon

それにもかかわらず-基になるデバイスはどのように安定して実行されていますか?
ウォーレン

非アクティブなプログラムをスワップアウトすると、ファイルキャッシング用のメモリが増えます。そして、それは物事をスピードアップします。通常、この1回の読み取りはかなり高速であり、全体的な影響は無視できます。使用可能なRAMの範囲内である場合に使用されるだけではありません。16GBのRAMを搭載したマシンが時々SWAPを使用するのを見てきました。
RapidWebs 14

また、データベースサーバーでSWAPを無効にすることはお勧めしません。OOMが単純な夜間バックアップ操作などでバックエンドを強制終了した場合、彼の顧客またはWebアプリはあまり満足しませんか?アプリケーションの使用状況と使用可能なメモリに関連してデータベースキャッシュを調整する方が賢明です。すでにスワップしている場合は、より多くのRAMが必要か、DBサーバーをより適切に構成する必要があります。そうしないと、SWAPを無効にすると、OOMが強制的にスワップするたびにDBサーバーを強制終了します。彼の質問から判断すると、しばしばそうです。
RapidWebs 14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.