Linux的 VPS 上設定虛擬記憶體 (Swap)

由於之前部落格的文章都被刪了,所以切換寫作環境到 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

https://www.digitalocean.com/community/tutorials/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

Screenshot 2016-05-18 19.13.12

關掉 XML-RPC 有2個主要的問題:

  1. wordpress plugins 無法 auto upgrade.
  2. 無法使用桌面版本的編輯器,只能使用網頁版。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *