ホームページ  >  記事  >  運用・保守  >  Linuxのスワップスペースは何に使われますか?

Linuxのスワップスペースは何に使われますか?

藏色散人
藏色散人オリジナル
2023-03-25 10:35:251972ブラウズ

Linux スワップ スペースの機能は、ホストが利用できる仮想メモリを増やすことです。スワップ スペースは、最新の Linux システムにおける 2 番目のタイプのメモリです。スワップ スペースの主な機能は、すべての RAM が占有されている場合などです。メモリが必要な場合、RAM メモリの代わりにディスク領域が使用されます。

Linuxのスワップスペースは何に使われますか?

#このチュートリアルの動作環境: linux5.9.8 システム、Dell G3 コンピューター。

Linux スワップ領域は何に使用されますか?

Linux システムのスワップ スペースの概要

システム上のスワップ スペースの容量を変更する方法と、必要なスワップ スペースの量について説明します。

今日、どのようなオペレーティング システムであっても、スワップスペースは非常に一般的です。 Linux はスワップ領域を使用して、ホストが利用できる仮想メモリを増やします。 1 つ以上の専用スワップ パーティションを使用したり、通常のファイルまたは論理ボリューム上のスワップ ファイルを使用したりできます。

一般的なコンピュータには 2 つの基本的なタイプのメモリがあります。 1 つ目のタイプのランダム アクセス メモリ (RAM) は、コンピュータが使用するデータとプログラムを保存するために使用されます。コンピュータは、プログラムとデータが RAM に保存されている場合にのみ使用できます。ランダム アクセス メモリは揮発性メモリであり、コンピュータの電源を切ると RAM に保存されているデータは失われます。

ハードディスクは、データやプログラムを長期保存するために使用される磁気媒体です。この磁気メディアはデータを非常によく保存できるため、コンピュータの電源が切れた場合でも、ディスクに保存されているデータは保持されます。 CPU (中央処理装置) はハードディスク上のプログラムやデータに直接アクセスすることはできません。それらはまず RAM にコピーされる必要があり、そこで CPU はコード命令にアクセスしてデータを操作します。ブート プロセス中に、コンピュータは特定のオペレーティング システム プログラム (カーネル、init、systemd など) とハード ディスク上のデータを RAM にコピーします。RAM では、コンピュータのプロセッサ (CPU がデータに直接アクセスできます)。

スワップ スペース

スワップ スペースは、最新の Linux システムにおける 2 番目のタイプのメモリです。スワップ スペースの主な機能は、すべての RAM が占有されており、より多くのメモリが必要な場合に、RAM メモリをディスク スペースに置き換えることです。

たとえば、8GB RAM を搭載したコンピューターがあると仮定します。起動したプログラムが RAM をいっぱいにしない場合は、すべて問題なく、スワップは必要ありません。スプレッドシートで作業しているとします。行を追加するとスプレッドシートが大きくなり、すべてのプログラムが実行されているため、RAM がすべて占有されてしまいます。この時点で利用可能なスワップ領域がない場合は、他のプログラムを閉じて RAM を解放するまで、スプレッドシートでの作業を停止する必要があります。

カーネルはメモリ マネージャーを使用して、最近使用されていないメモリ ブロック (メモリ ページ) を検出します。メモリ管理プログラムは、これらの比較的使用頻度の低いメモリ ページを、「ページング」またはスワッピング用に指定されたハード ディスク上の特別なパーティションにスワップします。これにより RAM が解放され、スプレッドシートにさらに多くのデータを入力できる余地が生まれます。ディスクにスワップアウトされたメモリ ページは、カーネルのメモリ管理コードによって追跡され、必要に応じて RAM にページバックできます。

Linux コンピュータのメモリの総量は RAM スワップ パーティションであり、スワップ パーティションは仮想メモリと呼ばれます。

Linux スワップ パーティションの種類

Linux が提供するスワップ領域には 2 種類あります。デフォルトでは、ほとんどの Linux インストールでスワップ パーティションが作成されますが、特別に構成されたファイルをスワップ ファイルとして使用することもできます。名前が示すように、スワップ パーティションは標準のディスク パーティションであり、スワップ領域は mkswap コマンドによって指定されます。

新しいスワップ パーティションを作成するためのディスク領域がない場合、またはスワップ領域用の論理ボリュームを作成するための領域がボリューム グループにない場合は、スワップ ファイルを使用できます。これは、指定されたサイズに作成され、事前に割り当てられる単なる通常のファイルです。次に、mkswap コマンドを実行して、スワップ スペースとして構成します。どうしても必要な場合を除き、スワップ領域にファイルを使用することはお勧めしません。 (LCTT 翻訳: Ubuntu の最近のバージョンはスワップ領域ではなくスワップ ファイルを使用するため、この記述については私の意見を留保します)

頻繁なスワップ

仮想メモリの合計が(RAM およびスワップ領域) がほぼいっぱいになると、スワップが頻繁に発生することがあります。システムは、スワップ領域と RAM の間でメモリ ブロックのページングに非常に多くの時間を費やすため、実際の作業に費やす時間がほとんどなくなります。この状態の一般的な症状は、システムが遅くなるか完全に応答しなくなり、ハード ドライブのライトがほぼ常に点灯することです。

free コマンドを使用して CPU 負荷とメモリ使用量を表示すると、CPU 負荷が非常に高く、おそらくシステム内の CPU コア数の 30 ~ 40 倍であることがわかります。もう 1 つの状況は、RAM とスワップ領域がほぼ完全に割り当てられている場合です。

実際、SAR (システム アクティビティ レポート) データを見ると、これらのことも明らかになります。各システムに SAR をインストールし、データ分析に使用します。

スワップ領域の正しいサイズはどれくらいですか?

何年も前、ハード ディスクに割り当てられたスワップ領域のサイズは、コンピュータの RAM のサイズの 2 倍でした (もちろん、これはほとんどのコンピュータの RAM が KB または MB 単位で測定されていた頃の話です) )。したがって、コンピュータに 64KB の RAM が搭載されている場合は、128KB のスワップ パーティションを割り当てる必要があります。このルールは、当時 RAM サイズが非常に小さく、スワップ領域に 2 倍を超える RAM を割り当ててもパフォーマンスが向上しなかったという事実を考慮しました。ほとんどのシステムは、実際に有益な作業を行うよりも、スワップに RAM を 2 倍以上使用する時間の方が長くなります。

RAM は現在安価であり、今日のほとんどのコンピューターには数ギガバイトの RAM が搭載されています。私の新しいコンピューターのほとんどには少なくとも 8GB の RAM が搭載されており、1 台には 32GB の RAM が搭載されており、メインのワークステーションには 64GB の RAM が搭載されています。私の古いコンピューターには 4 ~ 8GB の RAM が搭載されていました。

大量の RAM を搭載したコンピューターを操作する場合、スワップ領域のパフォーマンス制限要因は 2 倍をはるかに下回ります。 Fedora 28 オンライン インストール ガイドでは、スワップ スペース割り当ての現在のアプローチを定義しています。以下は私の提案です。

次の表は、システムの RAM の量と、システムを休止状態にするのに十分なメモリがあるかどうかに基づいた、スワップ パーティションの推奨サイズを示しています。推奨されるスワップ パーティション サイズは、インストール中に自動的に設定されます。ただし、システムの休止状態を満たすには、カスタム パーティションの段階でスワップ領域を編集する必要があります。

表 1: Fedora 28 ドキュメントの推奨システム スワップ スペース

システム メモリ サイズ 推奨スワップ スペース 推奨スワップ スペース サイズ (休止モードをサポート) 2 GB 未満 RAM の 2 倍 RAM の 3 倍 2 GB ~ 8 GB は RAM サイズの 2 倍 8 GB ~ 64 GB RAM の 0.5 倍 RAM の 1.5 倍 64 GB を超える ワークロード関連の休止モードは推奨されません 上記

リストされている各範囲間の境界 (たとえば、2GB、8GB、または 64GB のシステム RAM) は、選択したスワップ スペースと休止状態のサポートに基づいて注意してください。システム リソースが許可している場合は、スワップ領域を追加するとパフォーマンスが向上する可能性があります。

もちろん、ほとんどの Linux 管理者は、どのくらいのスワップ領域を使用すべきかについて独自の考えを持っています。以下の表 2 には、さまざまな環境での私の個人的な経験に基づいた推奨事項が含まれています。これらはあなたには当てはまらないかもしれませんが、表 1 と同様に役に立つかもしれません。

表 2: 著者が推奨するシステム スワップ スペース

RAM サイズ推奨スワップ スペース ≤ 2GB2X RAM2GB – 8GB= RAM>8GB8GB

これら 2 つ表全体に共通しているのは、RAM の量が増加するにつれて、特定のポイントを超えてスワップ領域を追加すると、スワップ領域がほぼ完全に使用される前にスワップが頻繁に発生するだけであるということです。上記の提案に基づいて、可能であればスワップ領域を追加するのではなく、RAM を追加する必要があります。システムのパフォーマンスに影響を与える同様の状況と同様に、自分にとって最適な推奨事項を使用してください。 Linux 環境でのテストと状況に応じた変更には時間と労力がかかります。

非 LVM ディスク環境へのスワップ スペースの追加

Linux がインストールされているホストとスワップ スペースのニーズの変化に直面し、場合によってはシステム定義の変更が必要になることがあります。スワップスペースのサイズ。この手順は、スワップ領域のサイズを増やす必要があるあらゆる状況で使用できます。十分な空きディスク容量が必要です。また、この手順では、ディスク パーティションが論理ボリューム管理 (LVM) を使用するのではなく、「生の」EXT4 およびスワップ パーティションであることを前提としています。

基本的な手順は簡単です。

  1. 既存のスワップ領域を閉じます。
  2. 必要なサイズの新しいスワップ パーティションを作成します。
  3. パーティション テーブルを再読み込みします。
  4. パーティションをスワップスペースとして構成します。
  5. 新しいパーティションを /etc/fstab に追加します。
  6. スワップ領域を開きます。

マシンを再起動する必要はありません。

安全上の理由から、スワップ領域を閉じる前に、少なくともアプリケーションが実行中でなく、スワップ領域が使用されていないことを確認する必要があります。 free または top コマンドを使用すると、スワップ領域が使用中かどうかを確認できます。セキュリティを強化するために、ランレベル 1 またはシングルユーザー モードに戻すことができます。

すべてのスワップ領域を閉じるコマンドを使用してスワップ パーティションを閉じます:

swapoff -a

次に、ハード ドライブ上の既存のパーティションを表示します。

fdisk -l

これにより、各ドライブのパーティション テーブルが表示されます。現在のスワップ パーティションを番号で識別します。

次のコマンドを使用して、対話モードで fdisk を起動します:

fdisk /dev/<device name>

例:

fdisk /dev/sda

此时,fdisk 是交互方式的,只在指定的磁盘驱动器上进行操作。

使用 fdiskp 子命令验证磁盘上是否有足够的可用空间来创建新的交换分区。硬盘上的空间以 512 字节的块以及起始和结束柱面编号的形式显示,因此您可能需要做一些计算来确定分配分区之间和末尾的可用空间。

使用 n 子命令创建新的交换分区。fdisk 会问你开始柱面。默认情况下,它选择编号最低的可用柱面。如果你想改变这一点,输入开始柱面的编号。

fdisk 命令允许你以多种格式输入分区的大小,包括最后一个柱面号或字节、KB 或 MB 的大小。例如,键入 4000M ,这将在新分区上提供大约 4GB 的空间,然后按回车键。

使用 p 子命令来验证分区是否按照指定的方式创建的。请注意,除非使用结束柱面编号,否则分区可能与你指定的不完全相同。fdisk 命令只能在整个柱面上增量的分配磁盘空间,因此你的分区可能比你指定的稍小或稍大。如果分区不是您想要的,你可以删除它并重新创建它。

现在指定新分区是交换分区了 。子命令 t 允许你指定定分区的类型。所以输入 t,指定分区号,当它要求十六进制分区类型时,输入 82,这是 Linux 交换分区类型,然后按回车键。

当你对创建的分区感到满意时,使用 w 子命令将新的分区表写入磁盘。fdisk 程序将退出,并在完成修改后的分区表的编写后返回命令提示符。当 fdisk 完成写入新分区表时,会收到以下消息:

The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.

此时,你使用 partprobe 命令强制内核重新读取分区表,这样就不需要执行重新启动机器。

partprobe

使用命令 fdisk -l 列出分区,新交换分区应该在列出的分区中。确保新的分区类型是 “Linux swap”。

修改 /etc/fstab 文件以指向新的交换分区。如下所示:

LABEL=SWAP-sdaX   swap        swap    defaults        0 0

其中 X 是分区号。根据新交换分区的位置,添加以下内容:

/dev/sdaY         swap        swap    defaults        0 0

请确保使用正确的分区号。现在,可以执行创建交换分区的最后一步。使用 mkswap 命令将分区定义为交换分区。

mkswap /dev/sdaY

最后一步是使用以下命令启用交换空间:

swapon -a

你的新交换分区现在与以前存在的交换分区一起在线。您可以使用 freetop 命令来验证这一点。

在 LVM 磁盘环境中添加交换空间

如果你的磁盘使用 LVM ,更改交换空间将相当容易。同样,假设当前交换卷所在的卷组中有可用空间。默认情况下,LVM 环境中的 Fedora Linux 在安装过程将交换分区创建为逻辑卷。您可以非常简单地增加交换卷的大小。

以下是在 LVM 环境中增加交换空间大小的步骤:

  1. 关闭所有交换空间。
  2. 增加指定用于交换空间的逻辑卷的大小。
  3. 为交换空间调整大小的卷配置。
  4. 启用交换空间。

首先,让我们使用 lvs 命令(列出逻辑卷)来验证交换空间是否存在以及交换空间是否是逻辑卷。

[root@studentvm1 ~]# lvs
  LV     VG                Attr       LSize  Pool   Origin Data%  Meta%  Move Log Cpy%Sync Convert
  home   fedora_studentvm1 -wi-ao----  2.00g                                                      
  pool00 fedora_studentvm1 twi-aotz--  2.00g               8.17   2.93                            
  root   fedora_studentvm1 Vwi-aotz--  2.00g pool00        8.17                                   
  swap   fedora_studentvm1 -wi-ao----  8.00g                                                      
  tmp    fedora_studentvm1 -wi-ao----  5.00g                                                      
  usr    fedora_studentvm1 -wi-ao---- 15.00g                                                      
  var    fedora_studentvm1 -wi-ao---- 10.00g                                                      
[root@studentvm1 ~]#

你可以看到当前的交换空间大小为 8GB。在这种情况下,我们希望将 2GB 添加到此交换卷中。首先,停止现有的交换空间。如果交换空间正在使用,终止正在运行的程序。

swapoff -a

现在增加逻辑卷的大小。

[root@studentvm1 ~]# lvextend -L +2G /dev/mapper/fedora_studentvm1-swap
  Size of logical volume fedora_studentvm1/swap changed from 8.00 GiB (2048 extents) to 10.00 GiB (2560 extents).
  Logical volume fedora_studentvm1/swap successfully resized.
[root@studentvm1 ~]#

运行 mkswap 命令将整个 10GB 分区变成交换空间。

[root@studentvm1 ~]# mkswap /dev/mapper/fedora_studentvm1-swap
mkswap: /dev/mapper/fedora_studentvm1-swap: warning: wiping old swap signature.
Setting up swapspace version 1, size = 10 GiB (10737414144 bytes)
no label, UUID=3cc2bee0-e746-4b66-aa2d-1ea15ef1574a
[root@studentvm1 ~]#

重新启用交换空间。

[root@studentvm1 ~]# swapon -a
[root@studentvm1 ~]#

现在,使用 lsblk 命令验证新交换空间是否存在。同样,不需要重新启动机器。

[root@studentvm1 ~]# lsblk
NAME                                 MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda                                    8:0    0   60G  0 disk
|-sda1                                 8:1    0    1G  0 part /boot
`-sda2                                 8:2    0   59G  0 part
  |-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   10G  0 lvm  [SWAP]
  |-fedora_studentvm1-usr            253:5    0   15G  0 lvm  /usr
  |-fedora_studentvm1-home           253:7    0    2G  0 lvm  /home
  |-fedora_studentvm1-var            253:8    0   10G  0 lvm  /var
  `-fedora_studentvm1-tmp            253:9    0    5G  0 lvm  /tmp
sr0                                   11:0    1 1024M  0 rom  
[root@studentvm1 ~]#

您也可以使用 swapon -s 命令或 topfree 或其他几个命令来验证这一点。

[root@studentvm1 ~]# free
              total        used        free      shared  buff/cache   available
Mem:        4038808      382404     2754072        4152      902332     3404184
Swap:      10485756           0    10485756
[root@studentvm1 ~]#

请注意,不同的命令以不同的形式显示或要求输入设备文件。在 /dev 目录中访问特定设备有多种方式。

推荐学习:《linux视频教程

以上がLinuxのスワップスペースは何に使われますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。