2013年10月29日 星期二

如何調整系統效能?( How to adjust performance loading )


在現在PC式微的時代,或許只剩下某些商業或是特定用途,才會感受到效能的差異,更何況現在連手機、平板都已經開始進入多核的時代,效能似乎已經不在使用者考量的主因,反而更偏重於使用者體驗、設計或系統調校這類的事。

對於某些狀況來說,有時候就勢必得要做點取捨,尤其是在現在多工作業的當下,如何調校出一個適合使用的系統,就成了一件重要的事情,畢竟一般人不會沒事天天在跑測試軟體(逼硬體Loading長時間維持在滿載),如此一來,這台機器除了跑測試數據之外,應該也什麼事都做不了吧?

當然,系統調校絕不僅在有限的環境下使用,不然以Google這種伺服器數量極多的公司來說,不是只要買機器就好了嗎?但是,對於它們來說,如何榨出每一台機器應有的效能,應該更為重要(當然還是有只要用錢就可以解決的狀況),例:現在很多雲端公司不就是提供這類服務,想要有要有多少效能,只要有錢馬上就能彈性擁有,不過,很抱歉,一般公司或使用者,都不歸類於那種情況之下,所以如何調效系統,就成為一件重要的事情了。

其實調校系統有多重要,我們只要觀察一下有關調校系統的軟體有多少就可以窺知一二,不過,對於一般使用者來說,都可以依據使用需求來選擇硬體,基本上也不需太多調校都能擁有不錯的使用體驗。

只是對於伺服器來說,就不是這麼一回事了,因為伺服器對於系統效能的負載來說,往往都是有多少就用多少,更何況它大多是要供應許多人同時使用,因此,系統效能受到單一使用者或服務給霸佔,那就會造成系統資源失衡的狀況,若是在一般個人使用的環境下,你自己有辦法能夠安排Priority,例:在多媒體進行轉檔時,原則上CPU Loading都是貼近滿檔,這時候大可把電腦擺著讓它轉,但是對於多工的伺服器來說,就不見得能夠如此來衡量。

除非,你手上的伺服器夠多,每一台伺服器都是僅負責單一工作(不過這種機會極少......),不然這就需要適當的系統調校來解決資源搶奪的問題,這也是這篇文章所有表達的主要內容,不過有個觀念得要先溝通一下,一般而言,這種類型的系統調校,勢必會造成單一服務的運行時間變長或效率變差,畢竟這也是為了整體效能所進行的考量。

雖然作業系統本身也具備自動調校的機制,但是對於伺服器端來說,有時人為的介入還是必要的措施,但是最終還是依據整體的需求來調配,千萬不要只是為了調校而犧牲了這個服務或伺服器的核心價值,若是僅為了節省資源,反而喪失其存在的目的就是真的得不償失了。

畢竟在真實的應用環境下,在效能、時間、價格與使用體驗上,還是要有所取捨,尤其是在提供網路或線上服務的伺服器來說更是如此,接著我們就切回到正題,如果我們需要珍對某些服務或程式進行系統效能(一般來說大多是指CPU使用率)的控制,應該怎麼做呢?。

這邊就以我較常使用的Linux系統來說,他所顯示的CPU使用率是有可能會超過100%(與CPU核心數量成正比),所以在系統監控的畫面中若是看見超過100%的使用率也不用覺得太奇怪,這一點是與Windows系統較不同的顯示方式,不過,CPU使用率對於系統端的負載來說是相同的,我們應該怎麼控制它的使用率呢?進而避免單一程序完全耗盡系統效能。

在Windows上,我們或許可以透過處理器親和性設定(這中文好難懂)來限定程式僅能使用多核CPU中的其中幾核,進而達成限縮使用率的效果。


至於在Linux的系統上,可以透過CPULIMIT來達到這相同的效果,其實它的安裝方式相當簡單,照Github上的說明即可完成,不過還是需要一些指令上的操作才能夠達到效果,常用的指令如下:

./cpulimit -P /usr/sbin/httpd -l 15
./cpulimit -e foo -l 50


-p : Process PID.
-e : Process name.
-l : percentage of CPU allowed from 0 to 100.
-P: absolute path name of the executable program file.

不過,如果每次都要這樣子用指令來處理,實在很不方便,因此,還有了加強版的使用方式,我就以此為範本,稍微再改了一下,讓它可以輕鬆地安裝在你所需要的Linux系統中,相關文件如下:(使用OS:CentOS 6.4 64bits)

(將下列三個文件的內容copy後置於同一資料夾,執行sh install_cpulimit_service.sh即可)

install_cpulimit_service.sh


cpulimit_daemon.sh (紅字部分:CPU使用率限制、監視那隻程式)


cpulimit  (紅字部份:用於chkconfig之設定)

以上述設定來說,重新開機後,就會針對httpd這程式進行CPU LOADING的監控(依據cpulimit_daemin.sh中的DAEMON_INTERVAL設定值,代表每3秒監測一次)只要超過50%時,就會抑制它的CPU使用率,藉此保留系統效能給其它服務使用,後續就看系統管理者想要如何來進行控管。

其實對於系統調較來說,並沒有唯一解,就如同本文一開始所說,其實對於很多公司來說,伺服器數量不見得是最大的門檻,往往對於個人、測試性質或新創公司來說,才會有此考量,畢竟對於很多服務供應商來說,怎麼找到合理的營運(獲利)模式才是最為重要的一件事。

提供上述的解決方案,希望能夠幫助到有此需求之人,當然也十分歡迎提供你的調校方式。