メモリ不足気味の本Webサーバをスケールアップしたついでに、rootファイルシステムのパーティションのサイズも変えてみた。

By | 2020年4月19日 , Last update: 2020年4月20日

はじめに

本Webサーバは「さくらのVPS」で絶賛運用中であり、皆様のおかげをもちまして、2017年4月の運用開始から満3年を迎えることができました。🎊 🎉🍾

これまでは「さくらのVPS」でも一番費用の安いメモリ512Mのプランで運用してきましたが、Google analyticsでアクセスの状況を分析した結果、同時にアクセスしているユーザの最大数に頭打ち感があり、メモリが512Mでは(少々定性的な表現ですが、)同時に処理できるリクエスト数がかなり限定されてしまっている可能性が高いことがわかりました。

そこで、VPSの1年契約の更新が新契約に切り替わったタイミングで本Webサーバ(Fedora 31)をメモリ512Mのプランからメモリ1Gのプランに変更し、ストレージも20GBから100GBへ増強することとしました。

スポンサーリンク

スケールアップ前のメモリの状況

スケールアップ前のメモリの状況を確認するために、以下のコマンドを実行します。

$ cat /proc/meminfo
MemTotal: 489332 kB
MemFree: 24268 kB
MemAvailable: 119252 kB
Buffers: 1192 kB
Cached: 87564 kB
SwapCached: 114968 kB
Active: 168824 kB
Inactive: 171720 kB
Active(anon): 130188 kB
Inactive(anon): 136140 kB
Active(file): 38636 kB
Inactive(file): 35580 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 1048572 kB
SwapFree: 645300 kB
(以下省略)

 
SwapTotalとSwapFreeの間に差があることから、スワップアップされているプロセスがそれなりに存在していることがわかります。

サーバのスケールアップ

さくらインターネットで公開しているマニュアルにしたがってスケールアップの作業を行います。

作業前にはスケールアップの対象となるサーバを停止します。念のため、この段階でバックアップも取得しておきます。

1Gのプランのストレージは何もしないと50GB(SSD)になりますが、1,100円(税込)をスケールアップ時に支払うことで、ストレージの容量を100GB(SSD)に拡張できます。

本Webサイトも最近解像度の高めの画像が増えてきていることと、今後作業用のファイル置き場が必要になるかもしれなそうなのと、月々の費用がかからないとのことだったので、ここは迷うことなくストレージも100GBに拡張です。

変更後のプランが決まったらお会計です。

お支払いを済ませると、スケールアップ処理が始まります。

スケールアップ処理中にはコントロールパネルが↑のような画面になります。画面左上に「進捗中」と表示されています。


スポンサーリンク

スケールアップ処理は5-10分ほどで終了します。終了するとコントロールパネルが↓のような画面になります。スケールアップ前はv4だったサーバのバージョンがv5になっています。

画面左上の「進捗中」だった表示が、「停止中」に変わります。

この状態でサーバを起動します。コンソール画面が表示されるとスケールアップは完了です。

スケールアップ後のメモリの状況

スケールアップ後のメモリの状況を確認するために、以下のコマンドを実行します。

$ cat /proc/meminfo
MemTotal: 1004420 kB
MemFree: 341052 kB
MemAvailable: 502920 kB
Buffers: 3180 kB
Cached: 273116 kB
SwapCached: 0 kB
Active: 303248 kB
Inactive: 220204 kB
Active(anon): 247536 kB
Inactive(anon): 3180 kB
Active(file): 55712 kB
Inactive(file): 217024 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 1048572 kB
SwapFree: 1048572 kB
(以下省略)

 
スケールアップ前と比較すると、

  1. 空きメモリを示すMemFreeが多くなっていること。
  2. スワップが使われていないこと。

がわかります。


スポンサーリンク

少なくともサーバ側の都合でページの表示速度が低下することはスケールアップ前と比較して少なくなることが期待できそうです。

rootパーティションのサイズの拡大

メモリのスケールアップができたところで、次はストレージのファイルシステム構成の変更と、ファイルシステムが載っているパーティションを以下の手順で拡大します。

なお、以下に示す手順はあくまでも例であり、この手順通りに作業を行った場合であってもその結果について一切保証するものではありません。

下準備

rootパーティションのサイズの拡大作業を行う前にストレージを拡張したことが原因による情報の不一致はてきるだけなくしておきたいので、以下の手順で確認及び修正します。

  1. 作業手順を誤るとサーバが起動しなかったり、サーバにあるプログラム、データ等の一切を失う可能性がありますので、サーバのバックアップを取得します。
  2. root権限でgdiskを実行し、パーティションの状況を確認します。
    [panda@pandanote.info ~]$ sudo gdisk -l /dev/vda
    [sudo] panda のパスワード:
    GPT fdisk (gdisk) version 1.0.4

    Partition table scan:
    MBR: protective
    BSD: not present
    APM: not present
    GPT: present

    Found valid GPT with protective MBR; using GPT.
    Disk /dev/vda: 209715200 sectors, 100.0 GiB
    Sector size (logical/physical): 512/512 bytes
    Disk identifier (GUID): 54E3B21C-DD69-4BDC-97B4-78938872A832
    Partition table holds up to 128 entries
    Main partition table begins at sector 2 and ends at sector 33
    First usable sector is 34, last usable sector is 41943006
    Partitions will be aligned on 2048-sector boundaries
    Total free space is 513981 sectors (251.0 MiB)

    Number Start (sector) End (sector) Size Code Name
    1 2048 4095 1024.0 KiB EF02
    2 514048 4708351 2.0 GiB 8200 Linux swap
    3 4708352 5732351 500.0 MiB 8300
    4 5732352 41940991 17.3 GiB 8E00


    スポンサーリンク

     

  3. Total free spaceが少ないような気がしますので、root権限で以下のコマンドを実行し、ストレージ拡張後の情報に更新します。
    [panda@pandanote.info ~]$ sudo sgdisk -s /dev/vda
    Warning: The kernel is still using the old partition table.
    The new table will be used at the next reboot or after you
    run partprobe(8) or kpartx(8)
    The operation has completed successfully.

     

  4. 再度gdiskコマンドをroot権限で実行して、Total free spaceを確認します。ストレージを20GBから100GBに拡張していますので、Total free spaceは80GB程度になっていればOKです。
    [panda@pandanote.info ~]$ sudo gdisk -l /dev/vda
    (中略)
    Disk /dev/vda: 209715200 sectors, 100.0 GiB
    Sector size (logical/physical): 512/512 bytes
    Disk identifier (GUID): 54E3B21C-DD69-4BDC-97B4-78938872A832
    Partition table holds up to 128 entries
    Main partition table begins at sector 2 and ends at sector 33
    First usable sector is 34, last usable sector is 209715166
    Partitions will be aligned on 2048-sector boundaries
    Total free space is 168286141 sectors (80.2 GiB)

    Number Start (sector) End (sector) Size Code Name
    1 2048 4095 1024.0 KiB EF02
    2 514048 4708351 2.0 GiB 8200 Linux swap
    3 4708352 5732351 500.0 MiB 8300
    4 5732352 41940991 17.3 GiB 8E00

     

  5. sgdiskコマンドを実行したときの出力に「kernelはまだ古いpartitionテーブルを使ってるよ。」と表示されているのが少々気になるので、ここでサーバをrebootします。これで準備完了です。

rootパーティションの削除及び再作成

rootパーティションのサイズを拡大するにはパーティションをいったん削除後に再度作成するのですが、再作成の際に以下の情報を使用します。

  1. 削除前のパーティションのセクタの開始位置(下図の赤矢印(a))
  2. 削除前のパーティションのGUID(下図の赤矢印(b))
  3. 削除の対象となるパーティションのパーティション番号。
  4. 削除の対象となるパーティションのパーティションのタイプ(Linux LVMの場合は8E00)。

上記の情報はgdiskコマンドを実行することで確認できます(下図)。

また、ディスク上において拡大しようとしているパーティションの後ろが開始位置となっているパーティションがないかどうかも確認します(拡大しようとしているパーティションの後ろに隙間がないとパーティションの拡大はできません)。

ここまでの確認ができたところで、以下の手順でrootパーティションのサイズを拡大します。

  1. root権限でgdiskを実行し、rootパーティション(本作業の場合はパーティション番号は4でした。)をいったん削除し、すかさず作成します。rootパーティションの拡大後の大きさは40GBとしています。また、本WebサーバのrootファイルシステムはLinux LVMの上に構成されているので、パーティションのタイプとして8E00を指定します。
    [panda@pandanote.info ~]$ sudo gdisk /dev/vda
    GPT fdisk (gdisk) version 1.0.4

    Partition table scan:
    MBR: protective
    BSD: not present
    APM: not present
    GPT: present

    Found valid GPT with protective MBR; using GPT.

    Command (? for help): d
    Partition number (1-4): 4

    Command (? for help): n
    Partition number (4-128, default 4): 4
    First sector (34-209715166, default = 5732352) or {+-}size{KMGTP}:
    Last sector (5732352-209715166, default = 209715166) or {+-}size{KMGTP}: +40G
    Current type is ‘Linux filesystem’
    Hex code or GUID (L to show codes, Enter = 8300): 8E00
    Changed type of partition to ‘Linux LVM’

    Command (? for help): x

    Expert command (? for help): c
    Partition number (1-4): 4
    Enter the partition’s new unique GUID (‘R’ to randomize): 38CC7DEB-F2AD-4C49-9D53-4A10EB84E85F
    New GUID is 38CC7DEB-F2AD-4C49-9D53-4A10EB84E85F

     

  2. パーティションの情報を保存する前に、内容をよーく確認します。パーティションの名前が設定されていますが、そのままにしておきます。
    Expert command (? for help): i
    Partition number (1-4): 4
    Partition GUID code: E6D6D379-F507-44C2-A23C-238F2A3DF928 (Linux LVM)
    Partition unique GUID: 38CC7DEB-F2AD-4C49-9D53-4A10EB84E85F
    First sector: 5732352 (at 2.7 GiB)
    Last sector: 89618431 (at 42.7 GiB)
    Partition size: 83886080 sectors (40.0 GiB)
    Attribute flags: 0000000000000000
    Partition name: ‘Linux LVM’

     

  3. パーティションの情報を保存します。
    Expert command (? for help): w

    Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
    PARTITIONS!!

    Do you want to proceed? (Y/N): Y
    OK; writing new GUID partition table (GPT) to /dev/vda.
    Warning: The kernel is still using the old partition table.
    The new table will be used at the next reboot or after you
    run partprobe(8) or kpartx(8)
    The operation has completed successfully.

     

  4. root権限でpartprobeコマンドを実行します。エラーがない場合には、特にメッセージが出力されないまま終了します。
  5. サーバを再起動します。

再作成結果の確認

再起動後に、gdiskコマンドを用いて結果を確認します。

一番下の行にサイズを拡大したrootパーティションの情報が表示されていますが、40GBくらいの大きさになっていることが確認できます。

これでrootパーティションの拡大作業は完了です。😃

まとめ

最初は2Gプランを新たに契約してすでに契約済みのサーバを解約することで、サーバを1台(というか1個)に集約することも検討したのですが、作業のタイミングが合わなかったのと、冗長性を確保したかったので、もともと契約していた1Gプランはそのままとし、512Mプランの本Webサーバをスケールアップして1Gプランx2とすることにしました。

ここまでの作業でメモリが増強されたので、Webサーバのページの表示速度は(定性的な評価ですが、)かなり改善されていて、画像などが逐次表示されることが少なくなっているように感じられます。一方、ストレージについてはrootパーティションの大きさを大きくしただけで、パーティション上のファイルシステムの拡張作業は別途行う必要があります。ファイルシステムの拡張作業は以前別の記事で書いた手順とほぼ同様の手順で行うことができますが、本Webサーバでの拡張作業についての顛末は別の記事で書く予定です。

この記事は以上です。

References / 参考文献