服務器併發處理能力之《構建高性能WEB站點》讀書筆記

本篇主要總結一些與服務器併發處理能力相關的指標名詞及一些相應的linux指令含義。

說之前粘一下百度來的信息(捂臉)

3種WEB服務器的比較:

 在相對比較大的網站,節約下來的服務器成本無疑是客觀的。而有些小型網站往往服務器不多,如果採用 Apache 這類傳統 Web 服務器,似乎也還能撐過去。但有其很明顯的弊端: Apache 在處理流量爆發的時候(比如爬蟲或者是 Digg 效應) 很容易過載,這樣的情況下采用 Nginx 最爲合適。
建議方案:

Apache 後臺服務器(主要處理php及一些功能請求 如:中文url)
Nginx  前端服務器(利用它佔用系統資源少得優勢來處理靜態頁面大量請求)
Lighttpd 圖片服務器
總體來說,隨着nginx功能得完善將使他成爲今後web server得主流。好,收!

  • 吞吐率

單位時間內服務器處理的請求數,用來描述Web服務器併發處理能力,單位:reqs/s。實際中,我們更關心服務器併發處理能力的上限,也就是單位時間內服務器能夠處理的最大請求數,即最大吞吐率。通常我們會使用“壓力測試”的方法,模擬足夠數目的併發用戶數,分別持續發送一定的HTTP請求,並統計測試持續的總時間。壓測前提包括以下幾個條件:1)併發用戶數 2)總請求數 3)請求資源描述。

  • 進程和輕量級進程

從本質上講,多進程的好處並不僅僅在於CPU時間的輪流使用,還在於CPU計算和I/O操作進行了很好的重疊使用,這裏的I/O主要指磁盤I/O和網絡I/O,它們的速速要比CPU就像是老牛漫步相較於超音速飛機。現代計算機的DMA技術讓CPU不參與I/O操作的全過程,比如進程通過系統調用,使得CPU向網卡或磁盤等I/O設備發出指令,然後進程被掛起,釋放出CPU資源,等待I/O設備完成工作後通過中斷來通知進程重新就緒。進程的調度由內核來進行,每個進程都有自己獨立的內存地址空間和生命週期。當子進程被父進程創建後,便將父進程地址空間的所有數據都複製到自己的地址空間,完全繼承父進程的所有上下文信息,他們之間可以通信,但是不相互依賴,也無權干涉彼此的地址空間。進程的創建使用fork()系統調用。

輕量級進程:由於進程之間相對獨立,各自維護龐大的地址空間和上下文信息,無法很好地低成本共享數據,比如Apache的prefork模型,在處理大量併發請求時,內存的大量消耗有時也會成爲性能提升的制約因素。但是,進程的優越性有時也恰恰體現在其相互獨立所帶來的穩定性和健壯性方面。爲此,Linux 2.0之後,提供了對輕量級進程的支持,它由一個新的系統調用clone()來創建,並由內核直接管理,像普通線程一樣獨立,各自擁有進程描述符,但是這些進程允許共享一些資源,比如地址空間、打開的文件等。輕量級進程減少了內存的開銷,併爲多進程應用程序的數據共享提供了直接支持,但是其上下文切換的開銷還是在所難免。

  • 進程調度器

內核中的進程調度器(Scheduler)維護着各種狀態的進程隊列。在Linux中,進程調度器維護着一個包括所有可運行進程的隊列,成爲“運行隊列”(Run Quere),以及一個包括所有休眠進程和殭屍進程的列表。

進程調度器的一項重要工作就是決定下一個運行的進程,如果運行隊列中有不止一個進程,這就需要進程告訴進程調度器各自的緊急程度, 這就是進程優先級。進程優先級除了可以由進程自己決定,進程調度器在進程運行時也可以動態調整他們的優先級。

  • 一些指標

top命令下,PR表示進程的優先級屬性Priority,而優先級動態調整值用NI表示。PR所代表的的值其實就是進程調度器分配給進程的時間長度,單位是時鐘數,Linux上一般爲10ms,PR值爲15則表示這個進程的時間片爲150ms;RES指進程佔用的物理內存空間大小;Swap值表示使用的虛擬內存空間大小;VIRT值等於物理內存和虛擬內存空間的總和。load average表示系統負載,數據來源於/proc/loadavg,這三個值分別表示系統最近1分鐘、5分鐘和15分鐘計算得出的系統負載;IOWait指CPU空閒並且等待I/O操作完成的時間比例。比如一個任務需要花費10ms I/O操作時間和10ms的CPU時間,那麼IOWait爲50%;

在操作系統中,時間片的長度是權衡利弊後的一個博弈結果,如果個進程時間片太短,CPU浪費在進程切換上的時間就會比較大,整體效率降低;如果時間片太長,則多任務實時性以及交互性就無法保證。

Linux爲每個處理器分配一個運行隊列,互不影響,進程調度負責將進程分配到適合的CPU,解決了多處理器的服務器SMP的支持問題。

  • 系統負載

系統負載越高,代表CPU越繁忙,越無法很好的滿足所有進程的需要。系統負載定義:單位時間內運行隊列中就緒等待的進程數平均值。所以當運行對壘中就緒進程不需要等待就可以馬上獲得CPU時,系統負載便非常低。當系統負載爲0.00時,說明任何進程只要就緒,就可以馬上獲得CPU,不需要等待,此時系統響應速度最快。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章