一般的なコンピュータには、2つの基本的なタイプのメモリがあります。最初のタイプであるランダムアクセスメモリ(RAM)は、データとプログラムがコンピュータによってアクティブに使用されているときにそれらを格納するために使用されます。プログラムやデータは、RAMに保存されていない限り、コンピュータで使用することはできません。 RAMは揮発性メモリです。つまり、コンピュータの電源を切ると、RAMに保存されているデータは失われます。
ハードドライブは、データやプログラムの長期保存に使用される磁気メディアです。磁性媒体は不揮発性です。コンピュータの電源を切っても、ディスクに保存されているデータは残ります。 CPU(中央処理装置)は、ハードドライブ上のプログラムやデータに直接アクセスすることはできません。最初にRAMにコピーする必要があります。ここで、CPUはプログラミング命令とそれらの命令によって操作されるデータにアクセスできます。起動プロセス中に、コンピュータはカーネルやinit、systemdなどの特定のオペレーティングシステムプログラムとデータをハードドライブからRAMにコピーし、そこでコンピュータのプロセッサであるCPUから直接アクセスします。
最新のLinuxシステムの2番目のタイプのメモリはスワップスペースです。
スワップスペース
その他のLinuxリソース
- Linuxコマンドのチートシート
- 高度なLinuxコマンドのチートシート
- 無料のオンラインコース:RHELの技術概要
- Linuxネットワーキングのチートシート
- SELinuxチートシート
- Linuxの一般的なコマンドのチートシート
- Linuxコンテナとは何ですか?
- 最新のLinux記事
スワップスペースの主な機能は、実際のRAMがいっぱいになり、より多くのスペースが必要になったときに、RAMメモリの代わりにディスクスペースを使用することです。
たとえば、8GBのRAMを搭載したコンピュータシステムがあるとします。そのRAMをいっぱいにしないプログラムを起動した場合、すべてが正常であり、スワッピングは必要ありません。ただし、行を追加すると、作業中のスプレッドシートが大きくなり、実行中の他のすべてのものに加えて、RAM全体がいっぱいになるとします。利用可能なスワップスペースがないと、他のプログラムを閉じて限られたRAMの一部を解放できるようになるまで、スプレッドシートでの作業を停止する必要があります。
カーネルは、コンテンツが最近使用されていないメモリのブロック(別名ページ)を検出するメモリ管理プログラムを使用します。メモリ管理プログラムは、これらの比較的まれにしか使用されないメモリのページを、「ページング」またはスワッピング用に特別に指定されたハードドライブ上の特別なパーティションに十分にスワップアウトします。これによりRAMが解放され、スプレッドシートに入力するデータを増やすためのスペースが確保されます。ハードドライブにスワップアウトされたメモリのページは、カーネルのメモリ管理コードによって追跡され、必要に応じてRAMにページバックできます。
Linuxコンピュータのメモリの総量は、RAMとスワップスペースの合計であり、仮想メモリと呼ばれます。 。
Linuxスワップの種類
Linuxは2種類のスワップスペースを提供します。デフォルトでは、ほとんどのLinuxインストールでスワップパーティションが作成されますが、特別に構成されたファイルをスワップファイルとして使用することもできます。スワップパーティションは、その名前が示すとおり、 mkswap
によってスワップスペースとして指定されている標準のディスクパーティションです。 コマンド。
新しいスワップパーティションを作成するための空きディスクスペースがない場合、またはスワップスペース用に論理ボリュームを作成できるボリュームグループ内にスペースがない場合は、スワップファイルを使用できます。これは、作成され、指定されたサイズに事前に割り当てられた通常のファイルです。次に、 mkswap
コマンドを実行して、スワップスペースとして設定します。どうしても必要な場合を除いて、スワップスペースにファイルを使用することはお勧めしません。
スラッシング
スラッシングは、RAMとスワップスペースの両方の仮想メモリの合計がほぼいっぱいになると発生する可能性があります。システムは、スワップスペースとRAMの間でメモリのブロックをページングし、元に戻すのに非常に多くの時間を費やしているため、実際の作業にほとんど時間が残っていません。これの典型的な症状は明らかです。システムが遅くなるか、完全に応答しなくなり、ハードドライブアクティビティライトがほぼ常に点灯します。
free
のようなコマンドを発行することができれば これはCPU負荷とメモリ使用量を示しており、CPU負荷が非常に高く、おそらくシステム内のCPUコアの数の30〜40倍にもなることがわかります。もう1つの症状は、RAMとスワップスペースの両方がほぼ完全に割り当てられていることです。
事後、SAR(システムアクティビティレポート)データを見ると、これらの症状を示すこともできます。作業するすべてのシステムにSARをインストールし、修復後のフォレンジック分析に使用します。
スワップスペースの適切な量はどれくらいですか?
何年も前、ハードドライブに割り当てる必要のあるスワップスペースの量の経験則は、コンピューターにインストールされているRAMの量の2倍でした(もちろん、ほとんどのコンピューターのRAMはKBまたはMBで測定されていました)。 。したがって、コンピューターに64KBのRAMがある場合、128KBのスワップパーティションが最適なサイズになります。このルールは、当時のRAMサイズは通常非常に小さく、スワップスペースに2Xを超えるRAMを割り当ててもパフォーマンスは向上しないという事実を考慮に入れていました。スワップ用に2倍以上のRAMがあるため、ほとんどのシステムは実際に有用な作業を実行するよりもスラッシングに多くの時間を費やしていました。
RAMは安価な商品になり、最近のほとんどのコンピューターには数十ギガバイトに及ぶRAMが搭載されています。私の新しいコンピューターのほとんどには少なくとも8GBのRAMがあり、1台には32GBがあり、私のメインワークステーションには64GBがあります。私の古いコンピューターには4〜8GBのRAMが搭載されています。
大量のRAMを搭載したコンピューターを扱う場合、スワップスペースの制限パフォーマンス係数は2X乗数よりはるかに低くなります。 Fedoraインストールガイドでオンラインで見つけることができるFedora28オンラインインストールガイドは、スワップスペースの割り当てについての現在の考え方を定義しています。以下に、いくつかのディスカッションとそのドキュメントからの推奨事項の表を含めました。
次の表は、システム内のRAMの量と、システムが休止状態になるのに十分なメモリが必要かどうかに応じて、スワップパーティションの推奨サイズを示しています。推奨されるスワップパーティションサイズは、インストール中に自動的に確立されます。ただし、休止状態を許可するには、カスタムパーティショニングステージでスワップスペースを編集する必要があります。
表1:Fedoraドキュメントで推奨されるシステムスワップスペース
システムRAMの容量 | 推奨されるスワップスペース | 休止状態との推奨スワップ |
---|---|---|
2GB未満 | RAMの2倍の量 | RAMの3倍の量 |
2 GB-8 GB | RAMの容量と同じ | RAMの2倍の量 |
8 GB-64 GB | RAMの量の0.5倍 | RAMの1.5倍 |
64GB以上 | | |
上記の各範囲の境界(たとえば、2 GB、8 GB、または64 GBのシステムRAMを備えたシステム)では、選択したスワップスペースと休止状態のサポートに関して慎重に行ってください。システムリソースで許容できる場合は、スワップスペースを増やすとパフォーマンスが向上する可能性があります。
もちろん、ほとんどのLinux管理者は、適切な量のスワップスペースだけでなく、他のほとんどすべてについて独自のアイデアを持っています。以下の表2には、複数の環境での個人的な経験に基づいた推奨事項が含まれています。これらはうまくいかないかもしれませんが、表1と同様に、始めるのに役立つかもしれません。
表2:作成者ごとの推奨システムスワップスペース
RAMの量 | 推奨されるスワップスペース |
---|---|
≤2GB | 2X RAM |
2GB – 8GB | =RAM |
> 8GB | 8GB |
両方のテーブルで考慮すべき点の1つは、RAMの量が増えると、特定のポイントを超えると、スワップスペースがいっぱいになる前に、単にスラッシングが発生することです。これらの推奨事項に従って仮想メモリが少なすぎる場合は、可能であれば、スワップスペースを増やすのではなく、RAMを追加する必要があります。システムパフォーマンスに影響を与えるすべての推奨事項と同様に、特定の環境に最適なものを使用してください。これには、Linux環境の条件に基づいて実験し、変更を加えるのに時間と労力がかかります。
非LVMディスク環境にスワップスペースを追加する
Linuxがすでにインストールされているホストのスワップスペースの要件が変更されたため、システムに定義されているスワップスペースの量を変更する必要がある場合があります。この手順は、スワップスペースの量を増やす必要がある一般的なケースに使用できます。十分な空きディスク容量があることを前提としています。この手順では、ディスクが「raw」EXT4およびスワップパーティションにパーティション化されており、論理ボリューム管理(LVM)を使用していないことも前提としています。
実行する基本的な手順は簡単です:
-
既存のスワップスペースをオフにします。
-
目的のサイズの新しいスワップパーティションを作成します。
-
パーティションテーブルを読み直してください。
-
パーティションをスワップスペースとして構成します。
-
新しいpartition/etc/fstabを追加します。
-
スワップをオンにします。
再起動は必要ありません。
安全のため、スワップをオフにする前に、少なくとも、アプリケーションが実行されていないこと、およびスワップスペースが使用されていないことを確認する必要があります。 無料コード> または
top
コマンドは、スワップスペースが使用されているかどうかを示します。さらに安全にするために、実行レベル1またはシングルユーザーモードに戻すことができます。
すべてのスワップスペースをオフにするコマンドを使用して、スワップパーティションをオフにします。
$ swapoff -a
次に、ハードドライブ上の既存のパーティションを表示します。
$ fdisk -l </ code>
これにより、各ドライブの現在のパーティションテーブルが表示されます。現在のスワップパーティションを番号で識別します。
fdisk
を起動します コマンドを使用したインタラクティブモードの場合:
$ fdisk / dev/<デバイス名>
例:
$ fdisk / dev / sda
この時点で、 fdisk
インタラクティブで、指定されたディスクドライブでのみ動作します。
fdisk p
を使用します 新しいスワップパーティションを作成するのに十分な空き領域がディスクにあることを確認するサブコマンド。ハードドライブ上のスペースは、512バイトのブロックと開始シリンダー番号と終了シリンダー番号で示されているため、割り当てられたパーティション間およびパーティションの最後で使用可能なスペースを決定するために、いくつかの計算が必要になる場合があります。
n
を使用する 新しいスワップパーティションを作成するためのサブコマンド。 fdiskは開始シリンダーを尋ねます。デフォルトでは、使用可能な最小番号のシリンダーが選択されます。それを変更したい場合は、始動シリンダーの番号を入力してください。
fdisk
コマンドを使用すると、最後のシリンダー番号やバイト、KB、MB単位のサイズなど、さまざまな形式でパーティションのサイズを入力できるようになりました。 4000Mと入力すると、新しいパーティションに約4GBのスペースが割り当てられます(たとえば)。Enterキーを押します。
p
を使用する パーティションが指定どおりに作成されたことを確認するサブコマンド。終了シリンダー番号を使用しない限り、パーティションはおそらく指定したものと正確には一致しないことに注意してください。 fdisk
コマンドは、シリンダー全体に増分でのみディスクスペースを割り当てることができるため、パーティションは指定したよりも少し小さいか大きい可能性があります。パーティションが希望どおりでない場合は、パーティションを削除して再作成できます。
ここで、新しいパーティションをスワップパーティションにするように指定する必要があります。サブコマンドt
パーティションのタイプを指定できます。したがって、 t
と入力します 、パーティション番号を指定し、16進コードのパーティションタイプを要求されたら、Linuxスワップパーティションタイプである82と入力し、Enterキーを押します。
作成したパーティションに問題がなければ、 w
を使用します 新しいパーティションテーブルをディスクに書き込むサブコマンド。 fdisk
プログラムは終了し、改訂されたパーティションテーブルの書き込みが完了するとコマンドプロンプトに戻ります。 fdisk
として次のメッセージが表示される可能性があります 新しいパーティションテーブルの書き込みが完了しました:
パーティションテーブルが変更されました!
ioctl()を呼び出してパーティションテーブルを再読み取りします。
警告:パーティションテーブルの再読み取りがエラー16:デバイスまたはリソースビジーで失敗しました。
カーネルは引き続き古いテーブルを使用します。
新しいテーブルは次回の再起動時に使用されます。
ディスクの同期。
この時点で、 partprobe
を使用します 再起動を実行する必要がないように、カーネルにパーティションテーブルの再読み取りを強制するコマンド。
$ partprobe
次に、コマンド fdisk -l
を使用します パーティションを一覧表示するには、新しいスワップパーティションが一覧表示されている必要があります。新しいパーティションタイプが「Linuxスワップ」であることを確認してください。
新しいスワップパーティションを指すように/etc/fstabファイルを変更する必要があります。既存の行は次のようになります:
LABEL =SWAP-sdaX swap swap swap defaults 0 0
ここで、 X
はパーティション番号です。新しいスワップパーティションの場所に応じて、これに似た新しい行を追加します。
/ dev / sdaY swap swap defaults 0 0
必ず正しいパーティション番号を使用してください。これで、スワップパーティションを作成する最後のステップを実行できます。 mkswap
を使用します パーティションをスワップパーティションとして定義するコマンド。
$ mkswap / dev / sdaY
最後のステップは、次のコマンドを使用してスワップをオンにすることです。
$ swapon -a
これで、新しいスワップパーティションが既存のスワップパーティションとともにオンラインになります。 無料
を使用できます またはtop
これを確認するコマンド。
LVMディスク環境へのスワップの追加
ディスクセットアップでLVMを使用している場合、スワップスペースの変更はかなり簡単です。この場合も、これは、現在のスワップボリュームが配置されているボリュームグループでスペースが使用可能であることを前提としています。デフォルトでは、LVM環境でのFedora Linuxのインストール手順により、スワップパーティションが論理ボリュームとして作成されます。これにより、スワップボリュームのサイズを簡単に増やすことができるため、簡単になります。
LVM環境でスワップスペースの量を増やすために必要な手順は次のとおりです。
-
すべてのスワップをオフにします。
-
スワップ用に指定された論理ボリュームのサイズを増やします。
-
サイズ変更されたボリュームをスワップスペースとして構成します。
-
スワップをオンにします。
まず、 lvs
を使用して、スワップが存在し、論理ボリュームであることを確認します コマンド(論理ボリュームの一覧表示)。
LV VG AttrのLSIZEプール由来のデータ%メタ%移動ログインCPY%同期コンバート
ホームfedora_studentvm1 -Wi-AO ---- 2.00グラム
pool00 fedora_studentvm1 TWI-aotz - 2.00グラム8.17 2.93
ルートfedora_studentvm1 VWI-aotz-- 2.00グラムpool00 8.17
スワップfedora_studentvm1 -Wi-AO ---- 8.00グラム
TMP fedora_studentvm1 -Wi-AO --- - 5.00グラム
USR fedora_studentvm1 -Wi-AO ---- 15.00グラム
VAR fedora_studentvm1 -Wi-AO ---- 10.00グラム
現在のスワップサイズが8GBであることがわかります。この場合、このスワップボリュームに2GBを追加します。まず、既存のスワップを停止します。スワップスペースが使用されている場合は、実行中のプログラムを終了する必要がある場合があります。
$ swapoff -a
次に、論理ボリュームのサイズを増やします。
#lvextend -L + 2G / dev / mapper / fedora_studentvm1-swap
論理ボリュームfedora_studentvm1/swapのサイズが8.00GiB(2048エクステント)から10.00 GiB(2560エクステント)に変更されました。
論理ボリュームfedora_studentvm1/swapのサイズが正常に変更されました。
mkswap
を実行します この10GBのパーティション全体をスワップスペースにするコマンド。
#mkswap / dev / mapper / fedora_studentvm1-swap
mkswap:/ dev / mapper / fedora_studentvm1-swap:警告:古いスワップ署名を消去します。
スワップスペースバージョン1のセットアップ、サイズ=10 GiB( 10737414144バイト)
ラベルなし、UUID =3cc2bee0-e746-4b66-aa2d-1ea15ef1574a
スワップをオンに戻します。
#swapon -a
次に、listblockdevicesコマンドを使用して新しいスワップスペースが存在することを確認します。繰り返しますが、再起動は必要ありません。
#lsblk
NAME MAJ:MIN RMサイズRO TYPE MOUNTPOINT
SDA 8:0 0 0 60Gディスク
| -sda1 8:1 0 0 1G部/ブート
`-sda2 8:2 059G0パート
| -fedora_studentvm1-pool00_tmeta 253:0 0 4M 0 lvm | `-fedora_studentvm1-pool00-tpool 253:2 0 2G 0 lvm
| | -fedora_studentvm1-root 253:3 0 2G 0 lvm /
| `-fedora_studentvm1-pool00 253:6 0 2G 0 lvm
| -fedora_studentvm1-pool00_tdata 253:1 0 2G 0 lvm
| `-fedora_studentvm1-pool00-tpool 253:2 0 2G 0 lvm
| | -fedora_studentvm1-root 253:3 0 2G 0 lvm /
| `-fedora_studentvm1-pool00 253:6 0 2G 0 lvm
| -fedora_studentvm1-swap 253:4 0 253 0 10G 0 lvm [SWAP]
5 br /> | -fedora_studentvm1-home 253:7 0 2G 0 lvm / home
| -fedora_studentvm1-var trap lvm / tmp
sr0
swapon -s
を使用することもできます コマンド、または top
、無料
、またはこれを確認するための他のいくつかのコマンドのいずれか。
総使用されるフリー共有バフ/キャッシュ
Memの利用可能:4038808 382404 2754072 4152 902332 3404184
スワップ:10485756 0 10485756
さまざまなコマンドが、さまざまな形式のデバイス特殊ファイルを入力として表示または要求することに注意してください。 /devディレクトリで特定のデバイスにアクセスする方法はいくつかあります。私の記事「Linuxでのデバイスの管理」には、/devディレクトリとその内容に関する詳細が含まれています。
この記事は元々2018年9月に公開され、編集者によって追加情報で更新されました。