問題描述
騰訊云學(xué)生優(yōu)惠服務(wù)器在部署Wordpress項目后頻繁出現(xiàn)Mysql崩潰情況,翻閱日志發(fā)現(xiàn)報錯信息InnoDB: mmap (x bytes) failed; errno 12,通過Google最終在StackOverFlow找到解決方案。
問題原因:
云服務(wù)物理內(nèi)存不足,且默認(rèn)沒有設(shè)置Swap分區(qū)(據(jù)了解騰訊云,阿里云,Amazon等均無),Mysql無法申請到足夠的內(nèi)存。
解決方案:使用文件創(chuàng)建Swap
//在終端中執(zhí)行以下操作
dd if=/dev/zero of=/swapfile bs=1M count=1024
mkswap /swapfile
swapon /swapfile
//可能會提示`swapon: /swapfile:不安全的權(quán)限 0644,建議使用 0600`,無需理會
//參考步驟: `vim /etc/fstab`...
在/etc/fstab中添加行/swapfile swap swap defaults 0 0
//參考步驟:`systemctl restart mariadb`
重啟mysql服務(wù)
Swap作用:
一般來說,如果硬件的配備資源足夠的話,那么 swap 應(yīng)該不會被我們的系統(tǒng)所使用到, swap 會被利用到的時刻通常就是實體內(nèi)存不足的情況了。從第零章的計算機概論當(dāng)中,我們知道 CPU 所讀取的數(shù)據(jù)都來自于內(nèi)存, 那當(dāng)內(nèi)存不足的時候,為了讓后續(xù)的程序可以順利的運行,因此在內(nèi)存中暫不使用的程序與數(shù)據(jù)就會被挪到 swap 中了。 此時內(nèi)存就會空出來給需要執(zhí)行的程序載入。由于 swap 是用磁盤來暫時放置內(nèi)存中的信息,所以用到 swap 時,你的主機磁盤燈就會開始閃個不停啊!
雖然目前(2015)主機的內(nèi)存都很大,至少都有 4GB 以上啰!因此在個人使用上,你不要設(shè)置 swap 在你的 Linux 應(yīng)該也沒有什么太大的問題。 不過服務(wù)器可就不這么想了~由于你不會知道何時會有大量來自網(wǎng)絡(luò)的要求,因此最好還是能夠預(yù)留一些 swap 來緩沖一下系統(tǒng)的內(nèi)存用量! 至少達到“備而不用”的地步啊!如果是在實體分區(qū)無法支持的環(huán)境下,此時前一小節(jié)提到的 loop 設(shè)備創(chuàng)建方法就派的上用場啦! 與實體分區(qū)不一樣的,這個方法只是利用 dd 去創(chuàng)建一個大文件而已。
——引自《鳥哥的linux私房菜》