伺服器併發處理能力——吞吐率

来源:http://www.cnblogs.com/tianxintian22/archive/2017/02/03/6306942.html
-Advertisement-
Play Games

吞吐率:一般使用單位時間內伺服器處理的請求數來描述伺服器併發處理能力,單位是“reqs/s” 通過開啟Apache的mod_status模塊,查看當前伺服器的運行狀況及吞吐率。 開啟Apache的mod_status模塊的方法: httpd.conf文件 LoadModule status_modu ...


  • 吞吐率:一般使用單位時間內伺服器處理的請求數來描述伺服器併發處理能力,單位是“reqs/s”

通過開啟Apache的mod_status模塊,查看當前伺服器的運行狀況及吞吐率。

開啟Apache的mod_status模塊的方法:

httpd.conf文件

LoadModule status_module modules/mod_status.so 去掉前面的#,併在文件底部添加:

<location /server-status>
  SetHandler server-status
  Order Deny,Allow
  Deny from nothing
  Allow from all
</location>
ExtendedStatus On

重啟伺服器。

瀏覽器輸入:http://localhost/server-status

159 requests/sec是此時的吞吐率。5 requests是此時的併發用戶數。

  • 併發用戶數:在某一時刻同時向伺服器發送請求的用戶總數。

在考慮實際用戶規模的時候,我們需要考慮到,用戶訪問Web站點通常使用瀏覽器,而瀏覽器在下載一個網頁以及網頁中的多個組件時,採用多線程的併發下載方式,但是對於同一個功能變數名稱下URL的併發下載數是有最大限制的,具體限制視瀏覽器的不同而不同。以下是在HTTP/1.1下不同瀏覽器的併發數:

所以,伺服器所支持的最大併發數,具體到真實的用戶,可能並不是一對一的關係,一個真實的用戶可能會給伺服器帶來兩個或更多的併發用戶數壓力。

從web伺服器角度來看,web伺服器一般會限制同時服務的最多用戶數,比如Apache的MaxClients參數,所以實際的併發用戶數,有時候大於伺服器的併發連接數,而多出的用戶請求,則在伺服器內核的數據接收緩衝區中等待處理,所以這些請求在用戶看來處於阻塞狀態。

  • 請求等待時間

假設併發用戶數為100,這時伺服器一般會採用多進程或多線程的併發模型,通過多個執行流來同時處理多個併發用戶的請求,而多執行體系的設計原則是輪流交錯使用CPU時間片,所以每個執行流花費的時間都被拉長。對每個用戶而言,每個請求的平均等待時間會增加;對伺服器而言,如果併發策略得當,每個請求的平均處理時間可能減少。、

  • ab壓力測試

ab可以直接在Web伺服器本地發起測試請求。

ab進行一切測試的本質都是基於HTTP的。

[root@iZ23elnq9m3Z bin]# ./ab -n1000 -c400 http://www.abc.com/index.php?c=customer&a=index&area=-1&signtime=36&status=0
[1] 12341
[2] 12342
[3] 12343
[4] 12344
[root@iZ23elnq9m3Z bin]# This is ApacheBench, Version 2.3 <$Revision: 1706008 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking www.myidns.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
Completed 1000 requests
Finished 1000 requests


Server Software:        Apache
Server Hostname:        www.abc.com
Server Port:            80

Document Path:          /index.php?c=customer
Document Length:        0 bytes

Concurrency Level:      400
Time taken for tests:   3.283 seconds
Complete requests:      1000
Failed requests:        0
Non-2xx responses:      1000
Total transferred:      360000 bytes
HTML transferred:       0 bytes
Requests per second:    304.64 [#/sec] (mean)
Time per request:       1313.040 [ms] (mean)
Time per request:       3.283 [ms] (mean, across all concurrent requests)
Transfer rate:          107.10 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0   14  83.8      0    1000
Processing:     8  742 980.4    254    3272
Waiting:        1  741 980.5    252    3272
Total:         43  756 981.4    255    3278

Percentage of the requests served within a certain time (ms)
  50%    255
  66%    264
  75%   1242
  80%   1539
  90%   3099
  95%   3190
  98%   3248
  99%   3269
 100%   3278 (longest request)

[1]   Done                    ./ab -n1000 -c400 http://www.abc.com/index.php?c=customer
[2]   Done                    a=index
[3]-  Done                    area=-1
[4]+  Done                    signtime=36

 啟動ab時,傳入三個命令行參數:

-n1000 表示總請求數1000;

-c400 表示併發用戶數;

http://xxx 標簽請求的目標URL。

Requests per second:    304.64 [#/sec] (mean)  #吞吐率
Time per request: 1313.040 [ms] (mean) #用戶平均請求等待時間
Time per request: 3.283 [ms] (mean, across all concurrent requests) #伺服器平均請求處理時間,也是吞吐率的倒數
Transfer rate: 107.10 [Kbytes/sec] received #這些請求在單位時間內從伺服器獲取的數據長度,可以說明伺服器在處理能力達到極限時,其出口帶寬的需求量

 對不同併發用戶數的吞吐率測試結果:

併發用戶數 吞吐率(reqs/s) 請求等待時間(ms) 請求處理時間(ms)
1 266.36 3.754 3.754
2 506.03 3.952 1.976
5 530.49 9.425 1.885
10 530.94 18.935 1.883
20 539.37 37.081 1.854
50 530.30 94.285 1.886
100 538.51 185.697 1.857
150 322.46 465.169 3.101
200 538.78 373.285 1.866
300 81.02 3702.955 12.343
400 304.64 1313.040 3.283
500 302.55 1652.642 3.305

 影響上面三個指標的因素,除去伺服器的硬體配置,就是併發策略了,並不存在一個對所有性質的請求都高效的併發策略。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 有時候,我們也會有在C++中調用.NET的需求,C++/CLI就是這樣一種技術,它能夠與本地代碼混合編程,從而提供強大的功能,本文將介紹如何使用反射的一些實踐。 ...
  • 代碼入口 上文【Spring源碼分析】Bean載入流程概覽,比較詳細地分析了Spring上下文載入的代碼入口,並且在AbstractApplicationContext的refresh方法中,點出了finishBeanFactoryInitialization方法完成了對於所有非懶載入的Bean的初 ...
  • 最近要從一個http上下載個文件,差點就直接telnet了,突然發現了這個: 但是還得讀取它,用什麼呢? 直接用 但是在類里,不能用Application.StartupPath代表程式所在目錄呀,這怎麼辦呢?遂baidu了一下,發現可以這樣: 然後,就可以讀取了。 完整代碼:(目標文件地址http ...
  • 本文演示環境為python2.7,主要介紹了python模塊之re正則表達式 ...
  • 1. 位運算符,如果運算對象是帶符號的且它的值為負,那麼位運算符如何處理運算對象的“符號位”依賴於機器。此時左移操作可能會改變符號位的值,因此是一種UB。 Best Practices: 關於符號位如何處理沒有明確的規定,所以強烈建議僅將位運算用於處理無符號類型。 Bitwise Operators ...
  • 點我去Python官網下載 往下翻幾頁就能看到各種版本的Python,當前最新的是Python3.6,也沒多大區別,我選擇的是3.5.2 64位的,點擊download 根據自己的電腦配置,我選擇的是64位的 一路預設下去吧! 安裝成功!下麵打開命令提示符,輸入python,回車如下圖一樣就安裝成功 ...
  • hello world 好。就這樣! ...
  • 代碼入口 之前寫文章都會啰啰嗦嗦一大堆再開始,進入【Spring源碼分析】這個板塊就直接切入正題了。 很多朋友可能想看Spring源碼,但是不知道應當如何入手去看,這個可以理解:Java開發者通常從事的都是Java Web的工作,對於程式員來說,一個Web項目用到Spring,只是配置一下配置文件而 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...