

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 中 WordPress 執行個體的秘訣和最佳實務 Amazon Lightsail
<a name="amazon-lightsail-wordpress-tips-best-practices"></a>

本指南收集將 WordPress 執行個體維持在Amazon Lightsail快速、穩定且安全的實用秘訣。

## 讓您的網站保持安全並保持最新狀態
<a name="wordpress-keep-secure-and-updated"></a>

### 讓 WordPress、佈景主題和外掛程式保持更新
<a name="wordpress-keep-updated"></a>
+ 立即套用 WordPress 核心、主題和外掛程式更新。更新通常包含效能和安全性修正。如需詳細資訊，請參閱[使用更新管理保護Lightsail執行個體和容器的安全](amazon-lightsail-update-management.md)。
+ 移除您未使用的外掛程式和主題。非作用中外掛程式仍會增加維護開銷和安全表面，而寫入不良的外掛程式是高記憶體用量的常見原因。
+ 在執行個體的快照啟動複本上測試主要更新，然後再將其套用至即時網站。

### 在您進行變更之前備份
<a name="wordpress-back-up-before-changes"></a>

在編輯組態檔案或安裝外掛程式之前，請拍攝執行個體的快照，以便在發生錯誤時，從快照輕鬆還原應用程式：
+ 從Lightsail主控台建立手動快照，或
+ 啟用自動快照。

如需說明，請參閱[使用快照備份 Linux/Unix Lightsail執行個體](lightsail-how-to-create-a-snapshot-of-your-instance.md)和[設定自動快照](amazon-lightsail-configuring-automatic-snapshots.md)。

## 監控和疑難排解
<a name="wordpress-monitoring-and-troubleshooting"></a>

### 如何知道執行個體是否記憶體不足？
<a name="wordpress-detect-out-of-memory"></a>

常見的症狀包括：
+ 您的網站會顯示**「建立資料庫連線錯誤」**（在公有網站和管理員面板上）。這通常表示 MariaDB 已停止。
+ 網站負載緩慢或在低流量下逾時。

若要確認，請透過 SSH 連線至您的執行個體，並檢查目前的記憶體使用量：

```
free -m
```

查看 下方的資料`available`欄`Mem:`。這是執行個體仍然可以使用的記憶體數量。如果 `available` 低於 **50 MB**，您的執行個體會承受很大的記憶體壓力，並面臨 OOM 刪除程序的風險。

您也可以檢查核心是否已終止記憶體不足的程序 (「OOM 刪除」)：

```
sudo dmesg | grep -i "out of memory"
```

如果您看到提及 `mariadbd`或 的項目`mysqld`，您的資料庫會在記憶體壓力下終止，而[改善記憶體效能](#wordpress-improve-memory-performance)中的步驟應會有所幫助。

### 我的執行個體是否已有自動記憶體調校？
<a name="wordpress-automatic-memory-tuning"></a>

較新的 LightsailWordPress 藍圖包含一項服務，可偵測執行個體的記憶體大小，並在每次執行個體啟動時自動套用本指南所述的交換、MariaDB 和 Apache/PHP 設定，包括在您啟動或重新啟動之後。若要檢查您的執行個體是否具有它，請透過 SSH 連線並執行：

```
systemctl status lightsail-memory-config
```

如果服務存在，您的執行個體已自動管理這些設定，您不需要手動套用這些設定。如果命令報告找不到單位，請遵循[改善記憶體效能](#wordpress-improve-memory-performance)中的步驟。

## 最佳化效能
<a name="wordpress-optimize-performance"></a>

### 為您的工作負載選擇正確的套件
<a name="wordpress-choose-bundle"></a>

改善 WordPress 效能的最有效方法是在具有足夠工作負載記憶體的執行個體套件上執行。WordPress 本身很輕量；不過，外掛程式、主題和資料庫可能會耗用大量記憶體。
+ **512 MB – 1 GB RAM (Lightsail奈米和微型執行個體套件）：**適用於具有最少外掛程式的小型部落格和低流量網站。這些執行個體最有可能遇到記憶體壓力，並受益於以下調校。
+ **2 GB RAM 以上：**如果您執行頁面建置器 （例如 Elementor 或 Divi)、WooCommerce 或許多作用中外掛程式，則建議使用。

隨著您的網站成長並需要更多資源，您可以透過[建立快照並從中啟動新的、較大的執行個體，](how-to-create-larger-instance-from-snapshot-using-console.md)升級到更大的套件。

### 改善記憶體效能
<a name="wordpress-improve-memory-performance"></a>

**注意**  
較新的 LightsailWordPress 藍圖會在每次執行個體啟動時自動套用大小感知記憶體調校，因此如果您要建立新的 WordPress Lightsail 執行個體，本節中的大部分手動步驟都會為您處理。

如果您的網站在您 （或訪客） 嘗試載入頁面時顯示「建立資料庫連線錯誤」，或者您看到日誌訊息指出 MariaDB 因記憶體不足而遭到終止 （例如在系統日誌`Out of memory: Killed process ... (mariadbd)`中），則您的執行個體很可能記憶體不足。在較小的執行個體上，Linux 核心可能會在記憶體耗盡時終止 MariaDB 資料庫程序 (「OOM 刪除」)。

以下三個步驟透過新增交換空間和限制資料庫和 Web 伺服器可使用的記憶體數量，來降低記憶體壓力。每個步驟都有自己的幫助，因此您只能套用您需要的步驟，或全部套用三個步驟，以獲得最大的效果。開始之前，請確定您擁有執行個體的最新快照。如需詳細資訊[，請參閱進行變更前的備份](#wordpress-back-up-before-changes)。

**重要**  
這些步驟需要透過 SSH 連線至執行個體，並使用 執行命令`sudo`。重新啟動資料庫和 Web 伺服器會短暫中斷您的網站 （幾秒鐘）；因此在低流量時段進行變更。

若要連線至執行個體，請在 Lightsail主控台中使用瀏覽器型 SSH 用戶端，或請參閱[連線至 Linux 或 Unix 執行個體](lightsail-how-to-connect-to-your-instance-virtual-private-server.md)。

#### 步驟 1：新增交換檔案
<a name="wordpress-add-swap-file"></a>

交換檔案可讓作業系統空間將非作用中記憶體卸載至磁碟，這有助於防止記憶體不足當機的執行個體，其 out-of-memory少於約 1.5 GB。我們建議在奈米或微型套件上新增交換，在較大的套件上通常不需要。

首先，檢查交換是否已啟用：

```
cat /proc/swaps
```

如果唯一列印的行是 標頭 （未列出交換項目），則不會設定交換：

```
Filename                Type        Size       Used    Priority
```

建立 650 MB 交換檔案：

```
sudo dd if=/dev/zero of=/mnt/.lightsail.swap bs=1K count=665600 status=progress
sudo chmod 600 /mnt/.lightsail.swap
sudo mkswap /mnt/.lightsail.swap
sudo swapon /mnt/.lightsail.swap
```

若要讓交換檔案在重新啟動時持續存在，請將其新增至 `/etc/fstab`：

```
echo '/mnt/.lightsail.swap none swap sw 0 0' | sudo tee -a /etc/fstab
```

確認交換現在處於作用中狀態：

```
cat /proc/swaps
```

交換檔案現在會出現在輸出中：

```
Filename                Type        Size       Used    Priority
/mnt/.lightsail.swap    file        665596     0       -2
```

#### 步驟 2：調校 MariaDB 資料庫
<a name="wordpress-tune-mariadb"></a>

`innodb_buffer_pool_size` 是 MariaDB 中最大的單一記憶體取用者。如果與執行個體記憶體相比，預設集區大小太大，可能會導致out-of-memory當機。

從建議的[組態表中](#wordpress-recommended-memory-values)尋找`innodb_buffer_pool_size`適用於執行個體的建議 ，然後使用該值建立專用組態檔案 (`16M`將範例中的 取代為您的值）：

```
sudo tee /etc/mysql/mariadb.conf.d/90-lightsail-memory.cnf > /dev/null <<'EOF'
[mysqld]
innodb_buffer_pool_size = 16M
EOF
```

若要執行變更，請執行下列命令來重新啟動資料庫：

```
sudo systemctl restart mariadb
```

#### 步驟 3：調校 Apache 和 PHP
<a name="wordpress-tune-apache-php"></a>

Apache 是 Web 伺服器，可處理傳入 WordPress 網站的請求。根據預設，它最多允許 150 個同時工作者程序 (`MaxRequestWorkers`)。在小型執行個體上，每個 PHP 工作者都可以使用數十 MB，這會耗盡負載下的記憶體。若要限制工作者數量以符合您的執行個體，並限制單一 PHP 請求可以使用多少記憶體，請設定 Apache `mpm_prefork`限制 （顯示的值適用於微型執行個體；檢查執行個體[的建議組態表](#wordpress-recommended-memory-values))：

```
sudo tee /etc/apache2/mods-available/mpm_prefork.conf > /dev/null <<'EOF'
<IfModule mpm_prefork_module>
    StartServers            1
    MinSpareServers         1
    MaxSpareServers         3
    MaxRequestWorkers       5
    MaxConnectionsPerChild  5000
</IfModule>
EOF
```

設定 PHP `memory_limit`(512 MB 是所有大小的安全上限）。首先偵測您的 PHP 版本，然後寫入組態檔案：

```
PHP_VERSION=$(php -r 'echo PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')
sudo mkdir -p /etc/php/${PHP_VERSION}/apache2/conf.d
sudo tee /etc/php/${PHP_VERSION}/apache2/conf.d/90-lightsail-memory.ini > /dev/null <<'EOF'
memory_limit = 512M
EOF
```

透過重新啟動 Apache 套用這兩個變更：

```
sudo systemctl restart apache2
```

#### 執行個體記憶體的建議值
<a name="wordpress-recommended-memory-values"></a>

根據執行個體的總 RAM，使用以下值。若要檢查執行個體的記憶體，請執行`free -m`並查看 `total`欄，或在 Lightsail主控台中參考您的套件大小。


**執行個體 RAM 建議的記憶體組態**  

|  執行個體記憶體 (RAM)  |  MariaDB `innodb_buffer_pool_size`  |  Apache `MaxRequestWorkers`  |  PHP `memory_limit`  |  交換檔案  | 
| --- | --- | --- | --- | --- | 
| 高達 \~1.5 GB | 16M | 5 | 512M | 是 (650 MB) | 
| \~1.5–3 GB | 256M | 10 | 512M | 否 | 
| \~3–6 GB | 256M | 25 | 512M | 否 | 
| \~6–13 GB | 2048M | 50 | 512M | 否 | 
| \~13–26 GB | 2048M | 125 | 512M | 否 | 
| 超過 \~26 GB | 4096M | 250 | 512M | 否 | 

### 使用快取來減少負載
<a name="wordpress-use-caching"></a>

快取可減少 WordPress 查詢資料庫和執行 PHP 的頻率，這會同時降低 CPU 和記憶體用量：
+ **頁面快取：**安裝快取外掛程式，例如 W3 Total Cache 或 WP Super Cache，以提供頁面的靜態複本。
+ **物件快取：**如果您的網站有許多登入使用者、執行 WooCommerce 或使用經常變更的動態內容 （例如論壇或成員資格區域），物件快取外掛程式 （例如 [Redis Object Cache](https://wordpress.org/plugins/redis-cache/) 或 APCu 型快取） 會將經常使用的查詢結果儲存在記憶體中，並減少重複的資料庫查詢。
+ **內容交付網路 (CDN)：**將靜態資產 （影像、CSS、JavaScript) 卸載至[Lightsail分佈](amazon-lightsail-creating-content-delivery-network-distribution.md)等 CDN，因此執行個體不會提供這些資產。