2011-04-11
VMWare Server
- 雖然知道 trac 網站效能低落的主因是主機實體記憶體不足(只有 2GB),但始終找不到好的方法可以最佳化。
- 今天大概找到幾個方法:
- <1> 將 VMDK 檔案變成多個 2GB 的檔案,這樣有助於減少系統花在 File System Cache 的記憶體。
- 首先,參考 How To Shrink VMware Virtual Disk Files (.vmdk),先塞 /dev/zero 到剩餘空間去。
- 因為切成三個磁區,所以要對 / 以及 /home 兩個掛載點做動作
jazz@trac-pool:~$ sudo blkid /dev/sda1: UUID="d659e093-f3b5-4a5d-be27-fd6ab81f1ace" TYPE="reiserfs" /dev/sda5: UUID="3bad1077-171b-448b-9dc0-a8a0d84ee549" TYPE="swap" /dev/sda6: UUID="bc027096-44bf-437a-a461-b5cd116942c4" TYPE="reiserfs" jazz@trac-pool:~$ mount /dev/sda1 on / type reiserfs (rw,notail) /dev/sda6 on /home type reiserfs (rw)
- 首先,根據 pidstat -d 5 把比較多 I/O 的 process 關閉
jazz@trac-pool:~$ sudo /etc/init.d/apache2 stop jazz@trac-pool:~$ sudo /etc/init.d/varnish stop jazz@trac-pool:~$ sudo /etc/init.d/munin-node stop
- 接著,把 /home 塞滿 /dev/zero 再清掉:
jazz@trac-pool:~$ cat /dev/zero > zero.fill;sync;sleep 1;sync;rm -f zero.fill
- 其次,清除不必要的快取,再把 / 塞滿 /dev/zero 再清掉:
jazz@trac-pool:~$ sudo apt-get clean jazz@trac-pool:~$ sudo su - root@trac-pool:~# cd / root@trac-pool:/# cat /dev/zero > zero.fill;sync;sleep 1;sync;rm -f zero.fill
- 關閉虛擬機器。然後進到 VM 主機,把原本高達 26GB 的單檔 VMDK 進行 Shrink 的動作
jazz@vm:~$ cd /var/lib/vmware/Virtual\ Machines/Trac_Pool jazz@vm:/var/lib/vmware/Virtual Machines/Trac_Pool$ sudo vmware-vdiskmanager -r Trac_Pool.vmdk -t 1 Trac_Pool_New.vmdk
- 縮完之後果然有差,VMDK 檔案空間總和變小了,大概是 18.6GB 左右。
$ du Trac_Pool_New*.vmdk | awk '{ SUM=SUM+$1 } END { print SUM }' 18623760
- <2> 調整 Aggressiveness of swapping
- 參考 Understanding swap files in Linux
- 首先,將 SWAP 的內容釋放出來
~$ sudo swapoff -a ~$ sudo swapon -a
- 其次,把 /proc/sys/vm/swappiness 設為 0 (盡可能不做 SWAP)
~$ sudo sysctl -w vm.swappiness=0
- 最後,設定 /proc/sys/vm/vfs_cache_pressure 設高,使 kernel 更勤於回收 cache。
~$ sudo sysctl -w vm.vfs_cache_pressure=200
- <3> 最後,應該說是這一連串記憶體不足事件的元兇:VMWare Server 2.0.0-122956 的 WebAccess? 介面!!
- 根據 top 的結果,若按下大寫「O」,選「o:VIRT」排序,會發現大致上排行榜前三名是 vmware-vmx 跟 webAccess
- 本來實體記憶體就不夠了,居然浪費在很少用的網頁介面上,實在是不智之舉。所以要把它關掉。
- 改法是參考 VMware Server 2 for Linux: HOW-TO Disable VMware Virtual Infrastructure Web Access 這篇文章,為了不關閉 vmware-hostd 而關閉 webAccess 要往返註解兩處。
- 第一次先改 /etc/init.d/vmware 的第 1202 行
-
/etc/init.d/vmware
old new 1199 1199 vmware_stop_webAccess 1200 1200 #clean up output from webAccess 1201 1201 echo 1202 vmware_stop_hostd1202 #vmware_stop_hostd 1203 1203 fi 1204 1204 ;; 1205 1205 restart)
-
- 然後下 vmware-mgmt stop
~$ sudo /etc/init.d/vmware-mgmt stop
- 接著把上一個修正改回來,然後註解掉啟動 webAccess 的第 1191 行
-
vmware.
old new 1188 1188 if [ "`vmware_product`" = "wgs" ]; then 1189 1189 echo 'Starting VMware management services:' 1190 1190 vmware_start_hostd 1191 vmware_start_webAccess1191 #vmware_start_webAccess 1192 1192 #clean up output from webAccess 1193 1193 echo 1194 1194 fi … … 1199 1199 vmware_stop_webAccess 1200 1200 #clean up output from webAccess 1201 1201 echo 1202 #vmware_stop_hostd1202 vmware_stop_hostd 1203 1203 fi 1204 1204 ;; 1205 1205 restart)
-
- 最後下 vmware-mgmt start 把服務啟動。
~$ sudo /etc/init.d/vmware-mgmt start
- 這樣,排行榜前三大,就剩下 vmware-vmx 跟 vmware-hostd
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 23442 root 20 0 1033m 892m 879m S 5 44.8 15:43.05 vmware-vmx 3440 root 20 0 401m 181m 169m S 3 9.1 268:32.23 vmware-vmx 2841 root 20 0 142m 56m 15m S 0 2.8 8:54.46 vmware-hostd
- 平常用不到 vmware-hostd 的時候可以透過 vmware-mgmt stop 把服務關閉。
~$ sudo /etc/init.d/vmware-mgmt stop
Last modified 14 years ago
Last modified on Apr 12, 2011, 10:27:20 AM
Attachments (1)
- 11-04-11_cpu-week.png (26.6 KB) - added by jazz 14 years ago.
Download all attachments as: .zip