什么是帶寬?
誤解:“數(shù)據(jù)在線路中的移動速度”、“數(shù)據(jù)的傳輸速度”
我們所說的帶寬是指數(shù)據(jù)的發(fā)送速度,比如百兆網(wǎng)卡,指網(wǎng)卡的最大發(fā)送速度是100Mbps,也就是說網(wǎng)卡在一秒鐘最多可以發(fā)送100Mb的數(shù)據(jù);相關(guān)的因素:
數(shù)據(jù)發(fā)送裝置將二進制信號傳送到線路的能力,也稱信號傳輸頻率,以及另一端數(shù)據(jù)接收裝置對二進制信號接收的能力,也包括線路對傳輸頻率的支持程度;
數(shù)據(jù)傳輸介質(zhì)的并行度,等價于計算機系統(tǒng)總線寬度的概念;
習慣與約定
b:比特單位 bit;
B:字節(jié)單位 Byte;
1KB = 1024B;
1kb = 1000b;
M與K 的換算同上;
什么是吞吐率?
吞吐率(Throughput),是指web服務器單位時間內(nèi)處理的請求數(shù),單位:reqs/s;
一般更關(guān)心的是服務器并發(fā)處理能力的上限 ,即最大吞吐率;
關(guān)于壓力測試
基于吞吐率壓力測試的幾個前提:
并發(fā)用戶數(shù);(某一時刻同時向服務器發(fā)送請求的用戶數(shù)量)
總請求數(shù);
請求資源描述;
幾個重要指標:
請求等待時間
用戶平均請求等待時間(主要衡量服務器在一定并發(fā)用戶數(shù)的情況下,對單個用戶的服務質(zhì)量)
服務器平均請求方護理時間(衡量服務器整體服務質(zhì)量)
壓力測試工具:Apache附帶的ab、LoadRunner、Jmeter
服務器系統(tǒng)負載
$ cat /proc/loadavg
0.58 1.19 0.64 1/92 8306
這里0.58 1.19 0.64 這3個數(shù)字表示:系統(tǒng)最近1分鐘、5分鐘、15分鐘分別計算出來的系統(tǒng)負載;
1表示當前運行隊列中的進程個數(shù);92表示此時的進程總數(shù);8306表示到此時為止最后創(chuàng)建的一個進程ID;
Apache ab的使用介紹
在《構(gòu)建高性能web站點》中多處講到了用apache 自帶的壓力測試工具ab進行Server的性能測試,搜索了一下相關(guān)知識,整理如下:
ab的全稱是ApacheBench,是 Apache 附帶的一個小工具,專門用于 HTTP Server 的benchmark testing,可以同時模擬多個并發(fā)請求。下面以一個實際例子來介紹ab的使用:
[xiekeli@localhost ~]$ ab -n 1000 -c 50 http://www.abc.com/a.php //產(chǎn)生1000次http請求,每次的并發(fā)用戶數(shù):50
This is ApacheBench, Version 2.0.40-dev <;$Revision: 1.146 $> apache-2.0Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/Copyright 2006 The Apache Software Foundation, http://www.apache.org/ Benchmarking www.abc.com (be patient)Completed 100 requestsCompleted 200 requestsCompleted 300 requestsCompleted 400 requestsCompleted 500 requestsCompleted 600 requestsCompleted 700 requestsCompleted 800 requestsCompleted 900 requestsFinished 1000 requests Server Software: Apache //被測平臺Apache Server Hostname: www.abc.com //服務器主機名Server Port: 80 Document Path: /a.phpDocument Length: 231 bytes //文檔大小 Concurrency Level: 50 //并發(fā)數(shù)Time taken for tests: 12.818547 secondsComplete requests: 1000 //完成請求數(shù)Failed requests: 0 //失敗的請求數(shù)Write errors: 0Non-2xx responses: 1001Total transferred: 438438 bytes //整個場景中的網(wǎng)絡傳輸量HTML transferred: 231231 bytes //整個場景中的HTML內(nèi)容傳輸量Requests per second: 78.01 [#/sec] (mean) //吞吐率,即每秒處理的請求數(shù)(后面括號中的 mean 表示這是一個平均值)Time per request: 640.927 [ms] (mean) //每次請求的響應時間(后面括號中的 mean 表示這是一個平均值Time per request: 12.819 [ms] (mean, across all concurrent requests) //每次請求的響應時間(后面括號中已經(jīng)說明,是按所有并發(fā)數(shù)計算的平均值)Transfer rate: 33.39 [Kbytes/sec] received //平均每秒網(wǎng)絡上的流量,可以幫助排除是否存在網(wǎng)絡流量過大導致響應時間延長的問題 Connection Times (ms) //網(wǎng)絡上消耗的時間的分解,各項數(shù)據(jù)的具體算法還不是很清楚 min mean[+/-sd] median maxConnect: 186 307 598.1 212 9188Processing: 188 271 289.6 214 1923Waiting: 188 245 219.9 213 1416Total: 376 579 660.2 427 9380 //整個場景中所有請求的響應情況。在場景中每個請求都有一個響應時間,其中50%的用戶響應時間小于1093 毫秒,60% 的用戶響應時間小于1247 毫秒,最大的響應時間小于7785 毫秒,由于對于并發(fā)請求,cpu實際上并不是同時處理的,而是按照每個請求獲得的時間片逐個輪轉(zhuǎn)處理的,所以基本上第一個Time per request時間約等于第二個Time per request時間乘以并發(fā)請求數(shù)Percentage of the requests served within a certain time (ms) 50% 42766% 43075% 43180% 43390% 45195% 163098% 338299% 3429100% 9380 (longest request)
-n : 表示的測試的次數(shù),很多地方翻譯成“發(fā)送請求的次數(shù)”,這樣很容易產(chǎn)生歧義,應該叫:“http請求數(shù)”比價合適;這里表示1000次http請求;
-c : 表示每次的請求數(shù),-c 50表示一次同時發(fā)起50個http請求,50次請求都收到響應了之后,再次發(fā)送50個http請求,直到發(fā)滿1000次。
web優(yōu)化的其他一些相關(guān)知識點:
緩存(cache)和緩沖(buffer)的區(qū)別:
緩存 (cache):緩存的目的是把需要花費昂貴開銷的計算結(jié)果保存起來,在以后需要的時候直接取出,避免重復的計算。
緩沖 (buffer):目的在于改善各部件之間因為速度不同而引發(fā)的問題。起到將快速設(shè)備與慢速設(shè)備平滑銜接的作用。
頁面緩存(Page Cache)
頁面緩存就是將動態(tài)計算的結(jié)果進行緩存,避免動態(tài)內(nèi)容不必要的重復計算,主要是針對動態(tài)生成的html頁面和動態(tài)圖片或動態(tài)XML數(shù)據(jù)等;
緩存持久化和搜索
如果緩存文件非常多,cache目錄下會擁擠大量的文件,如果緩存的文件的讀寫頻度比較高,對CPU的影響是非常大的;
解決的方案:
1、使用支持目錄hash加速目錄遍歷的文件系統(tǒng)來緩解這種情況,如:XFS和reiserfs;
2、緩存目錄分級
過期檢查
- 緩存過期時間
- 緩存有效期長度
把緩存放到內(nèi)存中
如果將緩存數(shù)據(jù)放到磁盤文件中,每次緩存加載和過期檢查都在磁盤I/O的開銷,如果磁盤同時還運行著如數(shù)據(jù)庫這樣的I/O密集型應用,那么緩存文件的I/O操作便會存在一定的延遲。
作者在這里提到了兩個PHP的緩存框架:APC和XCache。
緩存服務器
將HTML緩存在一臺獨立的緩存服務器中,利用memcached,可以很容易的通過TCP將緩存存儲在其他的服務器中,memcached同樣也是用內(nèi)存空間保存緩存數(shù)據(jù)的,可以減少不必要的I/O。memcached對每一個key都維護一個過期時間,一旦過期,會自動刪除這個key。
局部無緩存
局部無緩存允許在頁面中指定一塊包含動態(tài)數(shù)據(jù)的HTML代碼段,每次這些動態(tài)數(shù)據(jù)都需要實時計算,然后和其余的緩存合成為最終的網(wǎng)頁。
靜態(tài)化內(nèi)容
動態(tài)內(nèi)容緩存中,每次用戶的請求都要送到動態(tài)程序,動態(tài)程序根據(jù)緩存的有效期決定是否輸出緩存。因此這種控制權(quán)的代價也是比較昂貴的。
將動態(tài)頁面×××.php的緩存從cache目錄拿出來,放到同一個目錄中:×××.html,直接通過瀏覽器訪問對應靜態(tài)頁面。
當然靜態(tài)化頁面也是需要動態(tài)程序來實現(xiàn)的,一般靜態(tài)化頁面的管理都是通過CMS(內(nèi)容管理系統(tǒng))來進行管理的。
靜態(tài)化頁面的更新策略:
1、在數(shù)據(jù)更新時,重新生成靜態(tài)化內(nèi)容;
2、定時重新生成靜態(tài)化內(nèi)容;
局部靜態(tài)化
靜態(tài)化頁面可以通過SSI(服務器端包含)技術(shù)實現(xiàn)各個局部頁面的獨立更新。
SSI技術(shù)可以在任何一個主流web服務器中找到相應的模塊,如Apache的mod_include和Lighttpd的mod_ssi。
名詞解釋:PV
PV (page view) 即頁面瀏覽量,或點擊量,通常是衡量一個 網(wǎng)絡新聞 頻道或網(wǎng)站甚至一條網(wǎng)絡新聞的主要指標。
定義:一個訪問者在24小時(0點到24點)內(nèi)到底看了你網(wǎng)站幾個頁面。需要注意的是:同一個人瀏覽你網(wǎng)站同一個頁面,不重復計算pv量。pv就是一個訪問者打開了你網(wǎng)站的幾個頁面。
pv的計算:當一個訪問者訪問的時候,記錄他所訪問的頁面和對應的IP,然后確定這個IP今天訪問了這個頁面沒有。如果你的網(wǎng)站到了23點,單純IP有60萬條的話,每個訪問者平均訪問了3個頁面,那么pv表的記錄就要有180萬條。