由於之前部落格的文章都被刪了,所以切換寫作環境到 WordPress,在 DigitalOcean 的 VM(或稱為VPS,虛擬主機)上架設WordPress網站,是滿快的,一下子就設好了,但用了幾天之後,會一直出現:「無法連到資料庫」的錯誤訊息。
透過 SSH 連到 VM 裡之後,下指令:
mysql -u root
指令執行結果是:無法連上 mysql 資料庫。
下指令:
ps -aux | grep mysql
發現,mysql 沒有在記憶體裡執行中。
下指令:
/etc/init.d/mysql start
顯示錯誤訊息:
Checking for tables which need an upgrade, are corrupt or were not closed cleanly.
再下指令:
less /var/log/syslog | grep mysql
發現是記憶體不足,由於是 VM,而且是DigitalOcean 裡最便宜的付款方案,所以只有512MB的RAM.
執行指令的畫面:
syslog 裡說,Out of memory: Kill process mysqld.
透過指令:
free -h
得知,即使mysql deamon 沒有在執行,剩下的 RAM 只有 92MB 可以使用。
峰哥的技術日誌:在 Ubuntu VPS 上設定虛擬記憶體 (Swap) 來解決RAM不夠用的問題
http://fonger.logdown.com/posts/2015/02/01/setting-swap-for-ubuntu-to-solve-out-of-memory
設定 Swap File 的指令:
cd /
fallocate -l 512M swapfile
chmod 600 swapfile
mkswap /swapfile
swapon /swapfile
執行完,這幾行就有 swap 了,接著執行這一行,讓開機都自動啟用swap:
echo "/swapfile none swap sw 0 0" >> /etc/fstab
進伺服器裡,執行 reboot,開機後,再執行 free -h 指令,已經可以看到有 swap.
調整 swappiness
swappiness
參數是一個介於0~100的數值,當數值越接近100,代表系統越積極使用Swap,當數值越接近0,系統將會盡量使用RAM。預設值是 60
你可以用下面的指令來看現在的設定:
cat /proc/sys/vm/swappiness
硬碟效能比記憶體差,所以建議調整到到10 ~ 30。使用指令:
sysctl vm.swappiness=10
要讓重開機後也能生效,請修改sysctl.conf
設定檔。使用指令:
echo "vm.swappiness = 10" >> /etc/sysctl.conf
但設完 swap 只能多撐2分鐘而已…, 過沒多久還是記憶體被用完,所以問題還是沒有被解決。
再研究這一篇:
WordPress server that worked flawlessly for months now runs out of memory and crashes for no apparent reason. How to troubleshoot and fix?
https://www.digitalocean.com/community/questions/wordpress-server-that-worked-flawlessly-for-months-now-runs-out-of-memory-and-crashes-for-no-apparent-reason-how-to-troubleshoot-and-fix
似乎大家都會遇到 @_@:
按照這一篇的指示,關掉 xml-rpc:
How To Protect WordPress from XML-RPC Attacks on Ubuntu 14.04
- sudo nano /etc/apache2/sites-available/000-default.conf
Add the highlighted lines below between the <VirtualHost>
tags. Apache VirtualHost Config
<VirtualHost>
…
<files xmlrpc.php>
order allow,deny
deny from all
</files>
</VirtualHost>
Save and close this file when you are finished.
Restart the web server to enable the changes:
- sudo service apache2 restart
關掉後,透過 ps -aux, 看apache process 少掉超多的!再透過 free -h 來看,發現即使過了很久,都不會使用到 swap…,所以會掛掉的主因是 xml-rpc
關掉 XML-RPC 有2個主要的問題:
- wordpress plugins 無法 auto upgrade.
- 無法使用桌面版本的編輯器,只能使用網頁版。