| 1 | = 2011-04-11 = |
| 2 | |
| 3 | == VMWare Server == |
| 4 | |
| 5 | * 雖然知道 trac 網站效能低落的主因是主機實體記憶體不足(只有 2GB),但始終找不到好的方法可以最佳化。 |
| 6 | * 今天大概找到幾個方法: |
| 7 | * <1> 將 VMDK 檔案變成多個 2GB 的檔案,這樣有助於減少系統花在 File System Cache 的記憶體。 |
| 8 | * 首先,參考 [http://www.howtoforge.com/how-to-shrink-vmware-virtual-disk-files-vmdk How To Shrink VMware Virtual Disk Files (.vmdk)],先塞 /dev/zero 到剩餘空間去。 |
| 9 | * 因為切成三個磁區,所以要對 / 以及 /home 兩個掛載點做動作 |
| 10 | {{{ |
| 11 | jazz@trac-pool:~$ sudo blkid |
| 12 | /dev/sda1: UUID="d659e093-f3b5-4a5d-be27-fd6ab81f1ace" TYPE="reiserfs" |
| 13 | /dev/sda5: UUID="3bad1077-171b-448b-9dc0-a8a0d84ee549" TYPE="swap" |
| 14 | /dev/sda6: UUID="bc027096-44bf-437a-a461-b5cd116942c4" TYPE="reiserfs" |
| 15 | jazz@trac-pool:~$ mount |
| 16 | /dev/sda1 on / type reiserfs (rw,notail) |
| 17 | /dev/sda6 on /home type reiserfs (rw) |
| 18 | }}} |
| 19 | * 首先,根據 pidstat -d 5 把比較多 I/O 的 process 關閉 |
| 20 | {{{ |
| 21 | jazz@trac-pool:~$ sudo /etc/init.d/apache2 stop |
| 22 | jazz@trac-pool:~$ sudo /etc/init.d/varnish stop |
| 23 | jazz@trac-pool:~$ sudo /etc/init.d/munin-node stop |
| 24 | }}} |
| 25 | * 接著,把 /home 塞滿 /dev/zero 再清掉: |
| 26 | {{{ |
| 27 | jazz@trac-pool:~$ cat /dev/zero > zero.fill;sync;sleep 1;sync;rm -f zero.fill |
| 28 | }}} |
| 29 | * 其次,清除不必要的快取,再把 / 塞滿 /dev/zero 再清掉: |
| 30 | {{{ |
| 31 | jazz@trac-pool:~$ sudo apt-get clean |
| 32 | jazz@trac-pool:~$ sudo su - |
| 33 | root@trac-pool:~# cd / |
| 34 | root@trac-pool:/# cat /dev/zero > zero.fill;sync;sleep 1;sync;rm -f zero.fill |
| 35 | }}} |
| 36 | * 關閉虛擬機器。然後進到 VM 主機,把原本高達 26GB 的單檔 VMDK 進行 Shrink 的動作 |
| 37 | {{{ |
| 38 | jazz@vm:~$ cd /var/lib/vmware/Virtual\ Machines/Trac_Pool |
| 39 | jazz@vm:/var/lib/vmware/Virtual Machines/Trac_Pool$ sudo vmware-vdiskmanager -r Trac_Pool.vmdk -t 1 Trac_Pool_New.vmdk |
| 40 | }}} |
| 41 | * 縮完之後果然有差,VMDK 檔案空間總和變小了,大概是 18.6GB 左右。 |
| 42 | {{{ |
| 43 | $ du Trac_Pool_New*.vmdk | awk '{ SUM=SUM+$1 } END { print SUM }' |
| 44 | 18623760 |
| 45 | }}} |
| 46 | * <2> 調整 Aggressiveness of swapping |
| 47 | * 參考 [http://distilledb.com/blog/archives/date/2009/02/22/swap-files-in-linux.page Understanding swap files in Linux] |
| 48 | * 首先,將 SWAP 的內容釋放出來 |
| 49 | {{{ |
| 50 | ~$ sudo swapoff -a |
| 51 | ~$ sudo swapon -a |
| 52 | }}} |
| 53 | * 其次,把 /proc/sys/vm/swappiness 設為 0 (盡可能不做 SWAP) |
| 54 | {{{ |
| 55 | ~$ sudo sysctl -w vm.swappiness=0 |
| 56 | }}} |
| 57 | * 最後,設定 /proc/sys/vm/vfs_cache_pressure 設高,使 kernel 更勤於回收 cache。 |
| 58 | {{{ |
| 59 | ~$ sudo sysctl -w vm.vfs_cache_pressure=200 |
| 60 | }}} |
| 61 | * <3> 最後,應該說是這一連串記憶體不足事件的元兇:VMWare Server 2.0.0-122956 的 WebAccess 介面!! |
| 62 | * 根據 top 的結果,若按下大寫「O」,選「o:VIRT」排序,會發現大致上排行榜前三名是 vmware-vmx 跟 webAccess |
| 63 | * 本來實體記憶體就不夠了,居然浪費在很少用的網頁介面上,實在是不智之舉。所以要把它關掉。 |
| 64 | * 改法是參考 [http://blog.netnerds.net/2009/01/vmware-server-2-for-linux-how-to-disable-vmware-virtual-infrastructure-web-access/ VMware Server 2 for Linux: HOW-TO Disable VMware Virtual Infrastructure Web Access] 這篇文章,為了不關閉 hostd 而關閉 webAccess 要往返註解兩處。 |
| 65 | * 第一次先改 /etc/init.d/vmware 的第 1202 行 |
| 66 | {{{ |
| 67 | #!diff |
| 68 | --- /etc/init.d/vmware.org 2011-04-11 23:31:35.000000000 +0800 |
| 69 | +++ /etc/init.d/vmware 2011-04-11 23:32:12.000000000 +0800 |
| 70 | @@ -1199,7 +1199,7 @@ |
| 71 | vmware_stop_webAccess |
| 72 | #clean up output from webAccess |
| 73 | echo |
| 74 | - vmware_stop_hostd |
| 75 | + #vmware_stop_hostd |
| 76 | fi |
| 77 | ;; |
| 78 | restart) |
| 79 | }}} |
| 80 | * 然後下 vmware-mgmt stop |
| 81 | {{{ |
| 82 | ~$ sudo /etc/init.d/vmware-mgmt stop |
| 83 | }}} |
| 84 | * 接著把上一個修正改回來,然後註解掉啟動 webAccess 的第 1191 行 |
| 85 | {{{ |
| 86 | #!diff |
| 87 | --- vmware.1 2011-04-11 23:32:12.000000000 +0800 |
| 88 | +++ vmware.2 2011-04-11 23:30:52.000000000 +0800 |
| 89 | @@ -1188,7 +1188,7 @@ |
| 90 | if [ "`vmware_product`" = "wgs" ]; then |
| 91 | echo 'Starting VMware management services:' |
| 92 | vmware_start_hostd |
| 93 | - vmware_start_webAccess |
| 94 | + #vmware_start_webAccess |
| 95 | #clean up output from webAccess |
| 96 | echo |
| 97 | fi |
| 98 | @@ -1199,7 +1199,7 @@ |
| 99 | vmware_stop_webAccess |
| 100 | #clean up output from webAccess |
| 101 | echo |
| 102 | - #vmware_stop_hostd |
| 103 | + vmware_stop_hostd |
| 104 | fi |
| 105 | ;; |
| 106 | restart) |
| 107 | }}} |