Oracle Cloud（無料枠）が劇重なので改善

# 課題

以下の構成でOracleにインスタンスを立てて、Nginxをインストールするためにyumのアップデートを実行したところ、メモリ負荷が急激に高まりサーバーに接続してもタイムアウトになる。

`実行コマンド`

```
sudo yum update -y
```

## インスタンス構成

```
OS：Oracle Linux8
Shape：VM.Standard.E2.1.Micro
OCPU count：1
Network bandwidth (Gbps)：0.48
Memory (GB)：1
```

## コンソール画面（アップデート実行直後）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1602300/12f519a1-d6ad-13fe-f87a-38685e881de8.png)

# 対策

## 仮想マシン立ち上げ

- 仮想マシンの立ち上げ準備
SSHでサーバーに接続して作業を行なっていたが、頻繁にタイムアウトが発生して作業しづらいため、仮想マシンから操作を行う。
まずは、操作対象のコンソールを開き、サイドメニューの`Console connection`をクリックする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1602300/1d9bdbca-02a4-24db-b7d6-8d46c4acc2e9.png)


- 仮想マシン立ち上げ
`Launch Cloud Shell connection`をクリックして仮想マシンを立ち上げ、以下のメッセージがコンソールに表示されたら、エンターキーを叩く。
    
    ```
    =================================================
    IMPORTANT: Use a console connection to troubleshoot a malfunctioning instance. For normal operations, you should connect to the instance using a Secure Shell (SSH) or Remote Desktop connection. For steps, see https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/accessinginstance.htm
    
    For more information about troubleshooting your instance using a console connection, see the documentation: https://docs.cloud.oracle.com/en-us/iaas/Content/Compute/References/serialconsole.htm#four
    =================================================
    ```
    

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1602300/1ba06fca-c66c-3f81-32e3-27ea6f7cf469.png)


- サーバーへのログイン
ユーザー名とパスワードを入力して、ログインする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1602300/d9fa0d4c-6614-06f3-c6e8-80d3af73b83e.png)

## スワップ容量追加

- スワップ容量の確認
以下のコマンドを実行し、サーバーのスワップ容量を確認しておく。
今回立てたインスタンスは、デフォルトで1.9GBのスワップ容量が設定されていることが確認できた。
    
    ```
    free -h
    ```
    
    `実行結果`
    
    ```
                  total        used        free      shared  buff/cache   available
    Mem:          948Mi       201Mi       443Mi       1.0Mi       302Mi       600Mi
    Swap:         1.9Gi       178Mi       1.7Gi
    ```
    
    <aside>
    💡
    
    以下の参考記事によると、OCIイメージの作成時期によってスワップ容量に違いがあり、スワップの設定が無いケースもあるようです
    
    [Oracle CloudのFree Tier(メモリ1GB)でdnfが死ぬ件でswapサイズを調べた](https://blog.osakana.net/archives/14799)
    
    </aside>
    
- スワップファイル作成
上記のURLを参考にして、スワップ容量を4GBに設定していく。
まずは、以下のコマンドを実行し、2GBのスワップファイルを作成する。
    
    ```
    sudo fallocate -l 2.0G /swapfile2
    ```
    
- スワップファイルの権限設定
現状このサーバーには、機密性の高いデータはないが、念の為以下のコマンドを実行し、スワップファイルに権限を設定する。
    
    ```
    sudo chmod 600 /swapfile2
    ```
    
- スワップ領域の設定
以下のコマンドを実行し、作成したスワップファイルを初期化する。
    
    ```
    sudo mkswap /swapfile2
    ```
    
- スワップファイルの有効化
以下のコマンドを実行し、作成したスワップファイルを有効化する。
    
    ```
    sudo swapon /swapfile2
    ```
    
- マウント設定ファイルの変更
現状のままでは、サーバーを再起動するとスワップの設定が消えるため、以下のコマンドを実行して、マウントの設定ファイルを開く
    
    ```
    sudo vi /etc/fstab
    ```
    
    <aside>
    💡
    
    マウントとは？
    
    > ファイルシステムのマウントとは、ファイルシステムをディレクトリ (マウントポイント) に接続し、システムで使用可能にすること
    > 
    
    [Oracle](https://docs.oracle.com/cd/E19620-01/805-5854/6j5h9ja33/index.html)より引用
    
    </aside>
    
    <aside>
    💡
    
    fstab（ファイルシステムテーブル）とは？
    
    > 「/etc/fstab」ファイルは、マウントするファイルシステムの情報を記述するファイルです。OSを起動する際には、システムがデバイスをディレクトリにマウントしますが、その際、どのデバイスにどのディレクトリをマウントするか、の処理は、「/etc/fstab」ファイルの記述に従って進行します。
    > 
    
    [Linuc](https://linuc.org/study/knowledge/505/)より引用
    
    </aside>
    
- スワップファイルの永続化
以下の行を`/.swapfile`の下に追加し、保存する。
    
    ```
    /swapfile2      none    swap    sw  0   0
    ----------      ----    ----    --  -   -
    ①              ②       ③      ④  ⑤  ⑥
    ```
    
    | 番号 | 説明 |
    | --- | --- |
    | ① | 今回、新規に作成したスワップファイルのパス |
    | ② | マウントポイントを指定するが、スワップファイルはディレクトリにマウントしないため、none |
    | ③ | ファイルシステムの種類を指定しており、今回の場合はスワップファイルのためswapを使用 |
    | ④ | マウントオプションを指定しており、今回の場合はスワップファイルを有効化するためswを使用 |
    | ⑤ | dumpプログラムによるバックアップを行うか指定しており、通常スワップファイルは対象外のため0を指定 |
    | ⑥ | ファイルシステムのチェック順序を指定しており、通常スワップファイルはチェック対象外のため0を指定 |
- スワップファイルの確認
再度以下のコマンドを実行し、スワップ容量が追加されているか確認する。
スワップ容量が約4GBとなっており、想定した通りのスワップ容量となった。
    
    ```
    free -h
    ```
    
    `実行結果`
    
    ```
                  total        used        free      shared  buff/cache   available
    Mem:          948Mi       361Mi       272Mi       6.0Mi       314Mi       431Mi
    Swap:         3.9Gi          0B       3.9Gi
    ```
    

# 結果

30~40分ほどかけて、yumのアップデートが完了した。

【アップデート対象】

```
audit-3.1.2-1.0.1.el8.x86_64  
audit-libs-3.1.2-1.0.1.el8.x86_64  
avahi-libs-0.7-27.el8_10.1.x86_64  
bind-export-libs-32:9.11.36-16.el8_10.2.x86_64  
bind-libs-32:9.11.36-16.el8_10.2.x86_64  
bind-libs-lite-32:9.11.36-16.el8_10.2.x86_64  
bind-license-32:9.11.36-16.el8_10.2.noarch  
bind-utils-32:9.11.36-16.el8_10.2.x86_64  
blktrace-1.2.0-11.el8_10.x86_64  
bpftool-5.15.0-300.163.18.el8uek.x86_64  
bubblewrap-0.4.0-2.el8_10.x86_64  
ca-certificates-2024.2.69_v8.0.303-80.0.el8_10.noarch  
chkconfig-1.19.2-1.0.2.el8.x86_64  
chrony-4.5-1.0.2.el8.x86_64  
clang-libs-17.0.6-1.0.1.module+el8.10.0+90411+e344f03e.x86_64  
clang-resource-filesystem-17.0.6-1.0.1.module+el8.10.0+90411+e344f03e.noarch  
cloud-init-23.4-7.0.1.el8_10.8.noarch  
compiler-rt-17.0.6-1.module+el8.10.0+90411+e344f03e.x86_64  
curl-7.61.1-34.el8_10.2.x86_64  
emacs-filesystem-1:26.1-12.el8_10.noarch  
expat-2.2.5-15.0.1.el8_10.x86_64  
findutils-1:4.6.0-23.el8_10.x86_64  
firewalld-0.9.11-9.0.1.el8_10.noarch  
firewalld-filesystem-0.9.11-9.0.1.el8_10.noarch  
glibc-2.28-251.0.2.el8_10.5.x86_64  
glibc-common-2.28-251.0.2.el8_10.5.x86_64  
glibc-devel-2.28-251.0.2.el8_10.5.x86_64  
glibc-gconv-extra-2.28-251.0.2.el8_10.5.x86_64  
glibc-headers-2.28-251.0.2.el8_10.5.x86_64  
glibc-langpack-en-2.28-251.0.2.el8_10.5.x86_64  
grubby-8.40-49.0.2.el8.x86_64  
initscripts-10.00.18-1.0.2.el8.x86_64  
iproute-6.8.0-2.el8_10.x86_64  
iproute-tc-6.8.0-2.el8_10.x86_64  
iwl100-firmware-999:39.31.5.1-999.34.el8.noarch  
iwl1000-firmware-999:39.31.5.1-999.34.el8.noarch  
iwl105-firmware-999:18.168.6.1-999.34.el8.noarch  
iwl135-firmware-999:18.168.6.1-999.34.el8.noarch  
iwl2000-firmware-999:18.168.6.1-999.34.el8.noarch  
iwl2030-firmware-999:18.168.6.1-999.34.el8.noarch  
iwl3160-firmware-999:25.30.13.0-999.34.el8.noarch  
iwl5000-firmware-999:8.83.5.1_1-999.34.el8.noarch  
iwl5150-firmware-999:8.24.2.2-999.34.el8.noarch  
iwl6000-firmware-999:9.221.4.1-999.34.el8.noarch  
iwl6000g2a-firmware-999:18.168.6.1-999.34.el8.noarch  
iwl6050-firmware-999:41.28.5.1-999.34.el8.noarch  
iwl7260-firmware-999:25.30.13.0-999.34.el8.noarch  
iwlax2xx-firmware-999:20240715-999.34.el8.noarch  
jose-10-2.el8_10.3.x86_64  
kernel-headers-4.18.0-553.22.1.el8_10.x86_64  
kernel-tools-4.18.0-553.22.1.el8_10.x86_64  
kernel-tools-libs-4.18.0-553.22.1.el8_10.x86_64  
kexec-tools-2.0.28-1.0.6.el8_10.x86_64  
keyutils-1.5.10-9.0.1.el8.x86_64  
keyutils-libs-1.5.10-9.0.1.el8.x86_64  
keyutils-libs-devel-1.5.10-9.0.1.el8.x86_64  
krb5-devel-1.18.2-29.0.1.el8_10.x86_64  
krb5-libs-1.18.2-29.0.1.el8_10.x86_64  
libX11-1.6.8-9.el8_10.x86_64  
libX11-common-1.6.8-9.el8_10.noarch  
libcurl-7.61.1-34.el8_10.2.x86_64  
libdnf-0.63.0-20.0.1.el8_10.x86_64  
libipa_hbac-2.9.4-4.0.1.el8_10.x86_64  
libjose-10-2.el8_10.3.x86_64  
libkadm5-1.18.2-29.0.1.el8_10.x86_64  
libldb-2.8.0-1.el8_10.x86_64  
libndp-1.7-7.el8_10.x86_64  
libnfsidmap-1:2.3.3-59.0.2.el8.x86_64  
libomp-17.0.6-1.module+el8.10.0+90411+e344f03e.x86_64  
libomp-devel-17.0.6-1.module+el8.10.0+90411+e344f03e.x86_64  
libsmbclient-4.19.4-5.0.1.el8_10.x86_64  
libsss_autofs-2.9.4-4.0.1.el8_10.x86_64  
libsss_certmap-2.9.4-4.0.1.el8_10.x86_64  
libsss_idmap-2.9.4-4.0.1.el8_10.x86_64  
libsss_nss_idmap-2.9.4-4.0.1.el8_10.x86_64  
libsss_sudo-2.9.4-4.0.1.el8_10.x86_64  
libuser-0.62-26.el8_10.x86_64  
libwbclient-4.19.4-5.0.1.el8_10.x86_64  
linux-firmware-999:20240715-999.34.git4c8fb21e.el8.noarch  
linux-firmware-core-999:20240715-999.34.git4c8fb21e.el8.noarch  
llvm-libs-17.0.6-3.0.1.module+el8.10.0+90411+e344f03e.x86_64  
mdadm-4.2-14.0.4.el8_10.x86_64  
nano-2.9.8-3.el8_10.x86_64  
network-scripts-10.00.18-1.0.2.el8.x86_64  
nfs-utils-1:2.3.3-59.0.2.el8.x86_64  
nss-3.101.0-7.el8_8.x86_64  
nss-softokn-3.101.0-7.el8_8.x86_64  
nss-softokn-freebl-3.101.0-7.el8_8.x86_64  
nss-sysinit-3.101.0-7.el8_8.x86_64  
nss-util-3.101.0-7.el8_8.x86_64  
oci-utils-0.14.0-6.el8.noarch  
openssh-8.0p1-25.0.1.el8_10.x86_64  
openssh-clients-8.0p1-25.0.1.el8_10.x86_64  
openssh-server-8.0p1-25.0.1.el8_10.x86_64  
pcp-5.3.7-22.0.1.el8_10.x86_64  
pcp-conf-5.3.7-22.0.1.el8_10.x86_64  
pcp-doc-5.3.7-22.0.1.el8_10.noarch  
pcp-libs-5.3.7-22.0.1.el8_10.x86_64  
pcp-pmda-dm-5.3.7-22.0.1.el8_10.x86_64  
pcp-pmda-nfsclient-5.3.7-22.0.1.el8_10.x86_64  
pcp-pmda-openmetrics-5.3.7-22.0.1.el8_10.x86_64  
pcp-selinux-5.3.7-22.0.1.el8_10.x86_64  
pcp-system-tools-5.3.7-22.0.1.el8_10.x86_64  
pcp-zeroconf-5.3.7-22.0.1.el8_10.x86_64  
perf-4.18.0-553.22.1.el8_10.x86_64  
platform-python-3.6.8-67.0.1.el8_10.x86_64  
platform-python-setuptools-39.2.0-8.el8_10.noarch  
python3-audit-3.1.2-1.0.1.el8.x86_64  
python3-bind-32:9.11.36-16.el8_10.2.noarch  
python3-dnf-plugin-ulninfo-0.3-3.module+el8.10.0+90380+96a02ce9.noarch  
python3-firewall-0.9.11-9.0.1.el8_10.noarch  
python3-hawkey-0.63.0-20.0.1.el8_10.x86_64  
python3-libdnf-0.63.0-20.0.1.el8_10.x86_64  
python3-libs-3.6.8-67.0.1.el8_10.x86_64  
python3-pcp-5.3.7-22.0.1.el8_10.x86_64  
python3-perf-4.18.0-553.22.1.el8_10.x86_64  
python3-setuptools-39.2.0-8.el8_10.noarch  
python3-setuptools-wheel-39.2.0-8.el8_10.noarch  
python3-sssdconfig-2.9.4-4.0.1.el8_10.noarch  
python3-urllib3-1.24.2-8.el8_10.noarch  
python36-oci-sdk-2.135.0-1.el8  
```

# メモ

- マウントやファイルシステムテーブルについての理解が浅いため、勉強する

# 参考

[OCI Compute インスタンスに Nginx をインストールする - Qiita](https://qiita.com/letian/items/7156522308285099b981)

[How to Create an Always Free Website on the Oracle Cloud](https://www.youtube.com/watch?v=yWVD6qmQrb8)

[Oracle CloudのFree Tier(メモリ1GB)でdnfが死ぬ件でswapサイズを調べた](https://blog.osakana.net/archives/14799)

[「/etc/fstab」ファイル - Linux技術者認定 LinuC | LPI-Japan](https://linuc.org/study/knowledge/505/)