Changes between Initial Version and Version 1 of jazz/11-04-11


Ignore:
Timestamp:
Apr 11, 2011, 11:35:41 PM (13 years ago)
Author:
jazz
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • jazz/11-04-11

    v1 v1  
     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{{{
     11jazz@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"
     15jazz@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{{{
     21jazz@trac-pool:~$ sudo /etc/init.d/apache2 stop
     22jazz@trac-pool:~$ sudo /etc/init.d/varnish stop
     23jazz@trac-pool:~$ sudo /etc/init.d/munin-node stop
     24}}}
     25   * 接著,把 /home 塞滿 /dev/zero 再清掉:
     26{{{
     27jazz@trac-pool:~$ cat /dev/zero > zero.fill;sync;sleep 1;sync;rm -f zero.fill
     28}}}
     29   * 其次,清除不必要的快取,再把 / 塞滿 /dev/zero 再清掉:
     30{{{
     31jazz@trac-pool:~$ sudo apt-get clean
     32jazz@trac-pool:~$ sudo su -
     33root@trac-pool:~# cd /
     34root@trac-pool:/# cat /dev/zero > zero.fill;sync;sleep 1;sync;rm -f zero.fill
     35}}}
     36   * 關閉虛擬機器。然後進到 VM 主機,把原本高達 26GB 的單檔 VMDK 進行 Shrink 的動作
     37{{{
     38jazz@vm:~$ cd /var/lib/vmware/Virtual\ Machines/Trac_Pool
     39jazz@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 }'
     4418623760
     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}}}