今天把 GCP 的記憶體調整縮小,立馬發生 MySQL 崩潰的問題,大膽判斷此問題與記憶體有關,檢查了一下 LOG 果真如此
InnoDB: Initializing buffer pool, size = 128.0M InnoDB: mmap(137363456 bytes) failed; errno 12 InnoDB: Completed initialization of buffer pool InnoDB: Fatal error: cannot allocate memory for the buffer pool
檢查發現 GCP 建立的時候沒有幫我開啟 Swap,然後我又把規格調整到最低的 f1-micro 才引發此問題。
新增 Swap 的步驟如下:
- 建立虛擬記憶體用的檔案並設定啟動
sudo dd if=/dev/zero of=/swapfile bs=1M count=1024 sudo mkswap /swapfile sudo swapon /swapfile
- 修改檔案權限
sudo chmod 600 /swapfile
- 修改 `/etc/fstab` 加入開機啟用
/swapfile swap swap defaults 0 0
- `free` 可以查看目前記憶體使用狀況
total used free shared buff/cache available Mem: 1736424 1007616 365780 8804 363028 521744 Swap: 1048572 0 1048572
- 關閉虛擬記憶體
swapoff -v /swapfile