wiki:jazz/11-04-11

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  
        11991199            vmware_stop_webAccess
        12001200            #clean up output from webAccess
        12011201            echo
        1202             vmware_stop_hostd
         1202            #vmware_stop_hostd
        12031203         fi
        12041204      ;;
        12051205      restart)
    • 然後下 vmware-mgmt stop
      ~$ sudo /etc/init.d/vmware-mgmt stop
      
    • 接著把上一個修正改回來,然後註解掉啟動 webAccess 的第 1191 行
      • vmware.

        old new  
        11881188         if [ "`vmware_product`" = "wgs" ]; then
        11891189            echo 'Starting VMware management services:'
        11901190            vmware_start_hostd
        1191             vmware_start_webAccess
         1191            #vmware_start_webAccess
        11921192            #clean up output from webAccess
        11931193            echo
        11941194         fi
         
        11991199            vmware_stop_webAccess
        12001200            #clean up output from webAccess
        12011201            echo
        1202             #vmware_stop_hostd
         1202            vmware_stop_hostd
        12031203         fi
        12041204      ;;
        12051205      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)

Download all attachments as: .zip