服务器设置和教程 · 24 7 月, 2025

增強 Linux VM 效能:使用交換分區的指南

在雲端運算的世界中,最佳化虛擬機器 (VM) 的效能至關重要,尤其是在處理記憶體密集型應用程式時。建立一個交換分區是一種有效的方法,它可以作為實體記憶體 (RAM) 的擴充。當 RAM 已滿時,作業系統會將不活躍的分頁 (pages) 轉移到交換空間中,為更活躍的行程釋放 RAM。這對使用雲端伺服器的使用者特別重要,包括那些使用 **香港伺服器**的使用者,這些服務供應商提供了高效能的雲端解決方案。

雖然具體步驟可能會因雲端供應商而異,但本文將重點介紹如何在 Azure Linux VM 上使用 cloud-init 建立交換分區。這種方法可以根據需要稍作修改,適用於其他雲端環境。

**什麼是交換分區?**

交換分區是硬碟上的一塊專用空間,作業系統將其用作實體記憶體 (RAM) 的擴充。當 RAM 已滿時,不活躍的分頁會被移動到交換空間中,從而為更活躍的行程釋放 RAM。這可以顯著提高系統的穩定性和效能,尤其是在記憶體使用量波動較大的場景下。

例如,執行在 **香港VPS** 上的應用程式可能需要處理大量資料,交換分區可以幫助避免記憶體不足的錯誤,從而保持系統平穩執行。

**為什麼在 Azure 中使用暫存磁碟作為交換空間?**

在 Azure,每個 Linux VM 都有一個暫存磁碟(也稱為暫存磁碟或資源磁碟)。該磁碟位於與 VM 相同的實體伺服器上,延遲較低,因此非常適合作為交換空間。然而,需要注意的是,這個磁碟是暫存的,如果 VM 被停止或移動到另一台主機,其上的資料將被清除。因此,它僅適用於非持久性資料,如交換空間。

對於其他雲端供應商(如 **香港雲伺服器**),可能也有類似的暫存儲存選項,但具體實作可能不同。建議查閱供應商的文件以確認最佳實踐。

**為交換分區建立做準備**

在建立交換分區之前,需要確保任何現有的交換設定都被停用。在 Azure Linux VM 上,`waagent`(Windows Azure Linux Agent)可能被設定為自動建立交換空間。為了防止這種情況,您需要修改 `waagent` 的設定檔。

1. **在 `waagent` 設定中停用交換建立**
開啟 `/etc/waagent.conf` 檔案,並確保以下行已設定為停用自動交換建立:
“`
# Format if unformatted. If ‘n’, resource disk will not be mounted.
ResourceDisk.Format=n

# Create and use SWAPfile on resource disk.
ResourceDisk.EnableSWAP=n

# Mount point for the resource disk
ResourceDisk.MountPoint=/mnt

# Size of the SWAPfile.
ResourceDisk.SWAPSizeMB=0
“`
這些設定確保 Azure Linux Agent 不會自動格式化暫存磁碟或建立交換檔案。

2. **重啟 Azure Linux Agent**
修改設定後,重啟 `waagent` 以套用變更。重啟命令因發行版而異。例如:

* **在 Ubuntu 上:**
“`bash
sudo service walinuxagent restart
“`

* **在 RHEL 上:**
“`bash
sudo systemctl restart waagent
“`
請根據您的 Linux 發行版選擇正確的命令。如果您使用的是 **香港伺服器** 或其他雲端供應商,可能需要檢查是否有類似的代理服務需要停用。

**使用 cloud-init 建立交換分區**

`cloud-init` 是一個強大的工具,可以在 VM 部署期間自訂 VM。以下是如何使用 `cloud-init` 在 Azure Linux VM 的暫存磁碟上建立交換分區。

* **適用於 Ubuntu VM**
Ubuntu 提供了專門的文件,介紹如何在 VM 部署期間使用 `cloud-init` 啟用交換分區。您可以參考取得詳細說明。預設情況下,Azure 上的 Ubuntu 映像不建立交換分區,因此需要透過 `cloud-init` 手動啟用。

* **適用於 RHEL VM**
* **建立 cloud-init 設定檔**
在您當前的 shell(例如 Cloud Shell)中建立一個名為 `cloud_init_swappart.txt` 的檔案,並貼上以下內容:
“`yaml
#cloud-config
disk_setup:
ephemeral0:
table_type: gpt
layout: [66, [33,82]]
overwrite: true
fs_setup:
– device: ephemeral0.1
filesystem: ext4
– device: ephemeral0.2
filesystem: swap
mounts:
– [“ephemeral0.1”, “/mnt”]
– [“ephemeral0.2”, “none”, “swap”, “sw,nofail,x-systemd.requires=cloud-init.service”, “0”, “0”]
“`
此設定在暫存磁碟上設定了 GPT 分割區表,建立了兩個分割區(一個用於 ext4 檔案系統,一個用於交換),並適當掛載它們。

* **建立資源群組和 VM**
使用 Azure CLI 建立資源群組和 VM,並將自訂資料傳遞給 `cloud-init`:
“`bash
az group create –name myResourceGroup –location eastus
az vm create –resource-group myResourceGroup –name vmName –image imageCIURN –custom-data cloud_init_swappart.txt –generate-ssh-keys
“`
請將 `imageCIURN` 替換為您所需 Linux 發行版的實際映像 URN(例如,`RedHat:RHEL:8.4:8.4.2021042701`)。

如果您使用的是 **香港VPS** 或其他雲端平台,可能需要使用不同的命令或工具來套用 `cloud-init` 設定。請參考供應商的文件。

**修改執行中的 VM**

如果需要在已執行的 VM 上新增交換分區,可以透過新增 `cloud-init` 設定檔並更新系統設定來實現。

1. **建立設定檔**
建立一個名為 `/etc/cloud/cloud.cfg.d/00-azure-swap.cfg` 的檔案,並新增與上面 RHEL 相同的設定內容。
2. **更新系統設定**
將以下行追加到 `/etc/systemd/system.conf`:
“`
DefaultEnvironment=”CLOUD_CFG=/etc/cloud/cloud.cfg.d/00-azure-swap.cfg”
“`
3. **套用變更**
要使變更生效,可能需要停止或重新部署 VM。但請注意,這會重設暫存磁碟,因此請確保備份任何重要資料。對於 **香港雲伺服器** 使用者,可能需要檢查供應商的控制台或 CLI 工具來執行類似操作。

**驗證交換分區**

一旦交換分區設定完成,您可以透過 SSH 連線到 VM 並執行以下命令來驗證:

“`bash
sudo swapon -s
“`

這將顯示交換空間的資訊,包括裝置、類型、大小、已用空間和優先順序。例如:

“`
Filename Type Size Used Priority
/dev/sdb2 partition 2494440 0 -1
“`

如果輸出顯示交換分區已啟用,則設定成功。

**其他建立交換分區的方法**

除了使用 `cloud-init`,您還可以透過以下方法建立交換分區:

* **手動建立交換檔案**:使用 `fallocate` 或 `dd` 命令在磁碟上建立交換檔案。例如:
“`bash
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
“`
然後,將其新增到 `/etc/fstab` 以確保重啟後自動啟用。

* **使用專用磁碟分割區**:如果您的 VM 有額外的磁碟,可以使用 `fdisk` 或 `parted` 建立專用交換分割區。然而,在雲端環境中(如 Azure 或 **香港伺服器**),暫存磁碟通常是更好的選擇,因為它不需要額外的儲存成本。

**以下是兩種方法的比較:**

| 方法 | 優點 | 缺點 |
| :——————- | :—————————————– | :—————————————– |
| **使用 cloud-init** | 自動化設定,適合雲端環境,易於部署 | 需要熟悉 cloud-init 語法 |
| **手動建立交換檔案** | 靈活,易於調整大小 | 需要手動設定,可能不適合自動化部署 |
| **專用交換分割區** | 效能略高 | 需要額外磁碟,增加成本 |

**結論**

為您的 Linux VM 建立交換分區可以顯著提高其效能,特別是在處理記憶體密集型任務時。雖然本指南重點介紹了 Azure Linux VM 使用 `cloud-init` 的方法,但這些原則也可以應用於其他雲端環境,包括 **香港伺服器**、**香港VPS** 和 **香港雲伺服器**,只要根據特定供應商的文件進行相應調整。

透過遵循這些步驟,您可以確保您的 VM 能夠更好地處理記憶體需求,從而實現更穩定的系統和更好的回應效能。無論是執行在 Azure 還是其他雲端平台(如 **香港雲伺服器**),交換分區都是最佳化 VM 效能的重要工具。