《構建高性能web站點》閱讀筆記(一)
什么是帶寬?
誤解:“數據在線路中的移動速度”、“數據的傳輸速度”
我們所說的帶寬是指數據的發送速度,比如百兆網卡,指網卡的最大發送速度是100Mbps,也就是說網卡在一秒鐘最多可以發送100Mb的數據;相關的因素:
- 數據發送裝置將二進制信號傳送到線路的能力,也稱信號傳輸頻率,以及另一端數據接收裝置對二進制信號接收的能力,也包括線路對傳輸頻率的支持程度;
- 數據傳輸介質的并行度,等價于計算機系統總線寬度的概念;
習慣與約定
b:比特單位 bit;
B:字節單位 Byte;
1KB = 1024B;
1kb = 1000b;
M與K 的換算同上;
什么是吞吐率?
吞吐率(Throughput),是指web服務器單位時間內處理的請求數,單位:reqs/s;
一般更關心的是服務器并發處理能力的上限 ,即最大吞吐率;
關于壓力測試
基于吞吐率壓力測試的幾個前提:
- 并發用戶數;(某一時刻同時向服務器發送請求的用戶數量)
- 總請求數;
- 請求資源描述;
幾個重要指標:
請求等待時間
- 用戶平均請求等待時間(主要衡量服務器在一定并發用戶數的情況下,對單個用戶的服務質量)
- 服務器平均請求方護理時間(衡量服務器整體服務質量)
壓力測試工具:Apache附帶的ab、LoadRunner、Jmeter
服務器系統負載
$ cat /proc/loadavg
0.58 1.19 0.64 1/92 8306
這里0.58 1.19 0.64 這3個數字表示:系統最近1分鐘、5分鐘、15分鐘分別計算出來的系統負載;
1表示當前運行隊列中的進程個數;92表示此時的進程總數;8306表示到此時為止最后創建的一個進程ID;
Apache ab的使用介紹
在書中多處講到了用apache 自帶的壓力測試工具ab進行Server的性能測試,搜索了一下相關知識,整理如下:
ab的全稱是ApacheBench,是 Apache 附帶的一個小工具,專門用于 HTTP Server 的benchmark testing,可以同時模擬多個并發請求。下面以一個實際例子來介紹ab的使用:
[xiekeli@localhost ~]$ ab -n 1000 -c 50 http://www.abc.com/a.php //產生1000次http請求,每次的并發用戶數:50 This is ApacheBench, Version 2.0.40-dev <;$Revision: 1.146 $> apache-2.0 Copyright 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 requests Completed 200 requests Completed 300 requests Completed 400 requests Completed 500 requests Completed 600 requests Completed 700 requests Completed 800 requests Completed 900 requests Finished 1000 requests Server Software: Apache //被測平臺Apache Server Hostname: www.abc.com //服務器主機名 Server Port: 80 Document Path: /a.php Document Length: 231 bytes //文檔大小 Concurrency Level: 50 //并發數 Time taken for tests: 12.818547 seconds Complete requests: 1000 //完成請求數 Failed requests: 0 //失敗的請求數 Write errors: 0 Non-2xx responses: 1001 Total transferred: 438438 bytes //整個場景中的網絡傳輸量 HTML transferred: 231231 bytes //整個場景中的HTML內容傳輸量 Requests per second: 78.01 [#/sec] (mean) //吞吐率,即每秒處理的請求數(后面括號中的 mean 表示這是一個平均值) Time per request: 640.927 [ms] (mean) //每次請求的響應時間(后面括號中的 mean 表示這是一個平均值) Time per request: 12.819 [ms] (mean, across all concurrent requests)//每次請求的響應時間(后面括號中已經說明,是按所有并發數計算的平均值) Transfer rate: 33.39 [Kbytes/sec] received //平均每秒網絡上的流量,可以幫助排除是否存在網絡流量過大導致響應時間延長的問題 Connection Times (ms) //網絡上消耗的時間的分解,各項數據的具體算法還不是很清楚 min mean[+/-sd] median max Connect: 186 307 598.1 212 9188 Processing: 188 271 289.6 214 1923 Waiting: 188 245 219.9 213 1416 Total: 376 579 660.2 427 9380 //整個場景中所有請求的響應情況。在場景中每個請求都有一個響應時間,其中50%的用戶響應時間小于1093 毫秒,60% 的用戶響應時間小于1247 毫秒,最大的響應時間小于7785 毫秒 由于對于并發請求,cpu實際上并不是同時處理的,而是按照每個請求獲得的時間片逐個輪轉處理的,所以基本上第一個Time per request時間約等于第二個Time per request時間乘以并發請求數 Percentage of the requests served within a certain time (ms) 50% 427 66% 430 75% 431 80% 433 90% 451 95% 1630 98% 3382 99% 3429 100% 9380 (longest request)
-n : 表示的測試的次數,很多地方翻譯成“發送請求的次數”,這樣很容易產生歧義,應該叫:“http請求數”比價合適;這里表示1000次http請求;
-c : 表示每次的請求數,-c 50表示一次同時發起50個http請求,50次請求都收到響應了之后,再次發送50個http請求,直到發滿1000次。

浙公網安備 33010602011771號