【本記事もChatrGPT】WS無料枠の t3.micro (1GB RAM) でWordPressを動かしていると、 サーバーがよく止まる。なぜ?

IT

はじめに

AWS無料枠の t3.micro (1GB RAM) でWordPressを動かしていると、
「サーバーがよく止まる」「接続できない」「MySQLが落ちる」といったトラブルが頻発します。
原因は主に メモリ不足(OOM: Out of Memory) です。

この記事では、実際にEC2上で遭遇したトラブルと、
再現性のある安定化手順(スワップ・MySQL・PHP・Docker制限) を記録します。

🔍 問題の発端:サーバーが週3で落ちる

  • ブラウザで「応答に時間がかかりすぎました」
  • SSH接続できない
  • AWSコンソールでは「インスタンス実行中」と表示

原因を調査すると、以下のログが出ていました👇

sudo journalctl -k --since "48 hours ago" | egrep -i 'oom|out of memory|killed process'
Out of memory: Killed process 1321 (mysqld)

👉 MySQL (mysqld) がメモリ不足で強制終了されていました。

🧠 対策の全体像

項目 内容
🧩 スワップ領域追加 RAMが1GBしかないため、2GBスワップを追加
🐬 MySQL省メモリ設定 InnoDBを軽量化、最大接続数を50へ
🐘 PHPメモリ制限 WP_MEMORY_LIMIT = 96M
🐳 コンテナごとの上限設定 mem_limitmemswap_limitdocker-compose.yml に追加
💾 定期バックアップ mysqldump コマンドで自動化予定

🧱 ステップ①:スワップ領域を追加する

sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

永続化(再起動後も有効に):

echo '/swapfile swap swap defaults 0 0' | sudo tee -a /etc/fstab

確認:

free -h

Swap: 2.0GiB が表示されればOK。

🧱 ステップ②:MySQLを軽量化する

cd ~/wordpress
mkdir -p mysql/conf.d
cat > mysql/conf.d/zz-tiny.cnf <<'EOF'
[mysqld]
innodb_buffer_pool_size=96M
innodb_log_file_size=32M
innodb_buffer_pool_instances=1
max_connections=50
performance_schema=OFF
table_open_cache=256
tmp_table_size=16M
max_heap_table_size=16M
skip-name-resolve
innodb_flush_method=O_DIRECT
EOF
cat > docker-compose.override.yml <<'YML'
services:
  db:
    volumes:
      - ./mysql/conf.d:/etc/mysql/mysql.conf.d:ro
YML
docker compose up -d --force-recreate --no-deps db

🧱 ステップ③:WordPressのPHPメモリ制限を追加

docker exec -it wordpress-wordpress-1 bash -lc \
"grep -q WP_MEMORY_LIMIT wp-config.php || sed -i \"/^\/\* That's all, stop editing!.*$/i define('WP_MEMORY_LIMIT','96M');\" wp-config.php"
docker exec -it wordpress-wordpress-1 php -i | grep -i '^memory_limit'
# => memory_limit => 96M => 96M

🧱 ステップ④:各コンテナのメモリ上限を設定

services:
  db:
    mem_limit: 512m
    memswap_limit: 1g
  wordpress:
    mem_limit: 256m
    memswap_limit: 512m
  nginx:
    mem_limit: 96m
    memswap_limit: 256m
docker compose up -d --force-recreate
docker stats

✅ 各コンテナに上限が反映済み!

🏁 結果まとめ

項目 結果
サーバー停止回数 週3回 → 0回に改善
MySQL落ち 再発なし
メモリ使用量 70〜150MiBで安定
スワップ 常時2GiB確保済み

💬 まとめ

無料枠の t3.micro でも、

  • スワップ
  • MySQL軽量化
  • PHPメモリ制限
  • Dockerコンテナ上限

を組み合わせることで、
安定してWordPressを24時間稼働させることが可能 です。

次のステップ

  • 🎨 絵画分類AIアプリの統合(Flask + WordPress)
  • 🔒 Azure AD B2C連携でログイン制御
  • 🧠 ChatGPT API連携の自動記事生成