Oracle CloudのAlways Free マイクロ・インスタンス( VM.Standard.E2.1.Micro)をUbuntuで限界まで利用する



# 0. はじめに

oracle CloudのAlways Freeっていいよね。
どこまで使っても無料だそうで、とても太っ腹なOracleさんです。

しかし、4OCPU、24GBまで使える`VM.Standard.A1.Flex`は非常に人気で、既にリソースが枯渇しており、申し込むことができません。

そこで、まだ申込みできる `VM.Standard.E2.1.Micro` の 1 OCPU(2 CPU)、1 Memory (GB) を使う事になります。

2 CPUは、そこそこという感じですが、メモリーが1GBなのは辛いですね。
なので、できるだけUbuntuの不要なものを止めてメモリーを確保する方法について書いてみたいと思います(といっても、空けられるのは恐らく10 MBぐらい)

# 1. Ubuntu の イメージを `Canonical-Ubuntu-22.04-Minimal-2024.05.31-0`にする

まず最初から不要な物が入っていないMinimalのイメージを選択しましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15176/25dc83c4-d309-0924-e405-83aaa53971b8.png)

これで、大体この記事の言いたいことは終わりです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15176/d2192282-49ba-43ed-e995-cfd928f6623b.png)

これを使うと、used 166MBの最小インスタンスができあがります。

さらにここから乾いたぞうきんを絞ってきます。

# 1. graphical.targetを止める

Ubuntuを通常インストールするとグラフィカルなUIになりますが、これを止めましょう。
といっても、MinimalではそもそもGNOME Desktopも動いていないですし、Xサーバーなんてどこにもないのであまり意味はありませんが、不要なものがインストールされてしまわないとも限らないので、オフにしておきましょう。

```
sudo systemctl set-default multi-user.target
```

# 2. `unattended-upgrades.service`を止める

unattended-upgrades.serviceは、自動的にパッケージをアップデートしたりしてくれる便利なサービスですが、自分でアップデートすればいいので、止めちゃいましょう。

```
$ systemctl status unattended-upgrades.service
● unattended-upgrades.service - Unattended Upgrades Shutdown
     Loaded: loaded (/lib/systemd/system/unattended-upgrades.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2024-08-25 08:04:07 UTC; 1min 33s ago
       Docs: man:unattended-upgrade(8)
   Main PID: 603 (unattended-upgr)
      Tasks: 2 (limit: 1065)
     Memory: 12.8M
        CPU: 324ms
     CGroup: /system.slice/unattended-upgrades.service
             └─603 /usr/bin/python3 /usr/share/unattended-upgrades/unattended-upgrade-shutdown --wait-for-signal
```

12.8MB使っています。

```
sudo systemctl disable --now unattended-upgrades.service 
```

# 3. ModemManagerを止める

```
$ systemctl status ModemManager.service
● ModemManager.service - Modem Manager
     Loaded: loaded (/lib/systemd/system/ModemManager.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2024-08-25 07:07:19 UTC; 49min ago
   Main PID: 721 (ModemManager)
      Tasks: 3 (limit: 1065)
     Memory: 2.3M
        CPU: 349ms
     CGroup: /system.slice/ModemManager.service
             └─721 /usr/sbin/ModemManager
```

2.3MB使っています。これ求めましょう。

```
sudo systemctl disable --now ModemManager.service
```

# 4. `iscsid.service`を止める

```
$ systemctl status iscsid.service
● iscsid.service - iSCSI initiator daemon (iscsid)
     Loaded: loaded (/lib/systemd/system/iscsid.service; enabled; vendor preset: enabled)
    Drop-In: /etc/systemd/system/iscsid.service.d
             └─restart-policy.conf
     Active: active (running) since Sun 2024-08-25 07:07:17 UTC; 51min ago
TriggeredBy: ● iscsid.socket
       Docs: man:iscsid(8)
   Main PID: 682 (iscsid)
      Tasks: 2 (limit: 1065)
     Memory: 2.9M
```

2.9MBですね。止めましょう

```
sudo systemctl disable --now iscsid.service
```

# 5. `rpcbind.service`を止める

まあ、いらないですね。
0.9MB使っています

```
systemctl status rpcbind.service
● rpcbind.service - RPC bind portmap service
     Loaded: loaded (/lib/systemd/system/rpcbind.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2024-08-25 07:07:02 UTC; 54min ago
TriggeredBy: ● rpcbind.socket
       Docs: man:rpcbind(8)
   Main PID: 437 (rpcbind)
      Tasks: 1 (limit: 1065)
     Memory: 984.0K
```

```
sudo systemctl disable --now rpcbind.service
```

# 6. 止めた結果

```
$ systemctl | grep running
  proc-sys-fs-binfmt_misc.automount                                                            loaded active running   Arbitrary Executable File Formats File System Automount Point
  init.scope                                                                                   loaded active running   System and Service Manager
  session-1.scope                                                                              loaded active running   Session 1 of User ubuntu
  dbus.service                                                                                 loaded active running   D-Bus System Message Bus
  getty@tty1.service                                                                           loaded active running   Getty on tty1
  networkd-dispatcher.service                                                                  loaded active running   Dispatcher daemon for systemd-networkd
  polkit.service                                                                               loaded active running   Authorization Manager
  serial-getty@ttyS0.service                                                                   loaded active running   Serial Getty on ttyS0
  snap.oracle-cloud-agent.oracle-cloud-agent-updater.service                                   loaded active running   Service for snap application oracle-cloud-agent.oracle-cloud-agent-updater
  snap.oracle-cloud-agent.oracle-cloud-agent.service                                           loaded active running   Service for snap application oracle-cloud-agent.oracle-cloud-agent
  snapd.service                                                                                loaded active running   Snap Daemon
  ssh.service                                                                                  loaded active running   OpenBSD Secure Shell server
  systemd-journald.service                                                                     loaded active running   Journal Service
  systemd-logind.service                                                                       loaded active running   User Login Management
  systemd-networkd.service                                                                     loaded active running   Network Configuration
  systemd-resolved.service                                                                     loaded active running   Network Name Resolution
  systemd-timesyncd.service                                                                    loaded active running   Network Time Synchronization
  systemd-udevd.service                                                                        loaded active running   Rule-based Manager for Device Events and Files
  user@1001.service                                                                            loaded active running   User Manager for UID 1001
  ```

  さすがにこれ以上は止められないですね。
  snapdも止めたいところですが、最近のUbuntuはいろいろとsnapに頼っているところがあるので止められません。dbusも同じくです。

■各種設定前

```
$ free -m
               total        used        free      shared  buff/cache   available
Mem:             947         166         225           1         555         615
Swap:              0           0           0
```


■各種設定後

```
$ free -m
               total        used        free      shared  buff/cache   available
Mem:             947         121         524           0         301         687
Swap:              0           0           0
```

Usedが45MBほど減り、Freeは524MBに増えました。

```
$ cat /proc/meminfo
MemTotal:         970232 kB
MemFree:          522744 kB
MemAvailable:     690660 kB
Buffers:           16664 kB
Cached:           266160 kB
SwapCached:            0 kB
Active:           272852 kB
Inactive:          79060 kB
Active(anon):      70092 kB
Inactive(anon):        0 kB
Active(file):     202760 kB
Inactive(file):    79060 kB
```

まあまあでしょう。

# 7. おまけ

freeコマンドを見て分かると思いますが、クラウドのインスタンスは一般的にswapがありません。昔は、swapなんて、役に立たない100害あって1利無しとか思っていましたが、それはDiskスピードが遅かったからで、今はガンガンに早いSSDのお陰で問題なく利用できます。

2GBぐらいのスワップを用意して追加してみましょう。

```
sudo dd if=/dev/zero of=/swapfile bs=1024 count=2000000
```

```
sudo mkswap /swapfile
```

```
sudo chmod 0600 /swapfile
```


```
/swapfile       swap       swap       defaults       0 0
```


```
sudo systemctl daemon-reload
```


```
sudo swapon /swapfile
```