<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      1. 堪比JMeter的.Net壓測工具 - Crank 入門篇

      目錄

      1. 堪比JMeter的.Net壓測工具 - Crank 入門篇
      2. 堪比JMeter的.Net壓測工具 - Crank 進階篇 - 認識yml
      3. 堪比JMeter的.Net壓測工具 - Crank 進階篇 - 認識bombardier
      4. 堪比JMeter的.Net壓測工具 - Crank 進階篇 - 認識wrk、wrk2
      5. 堪比JMeter的.Net壓測工具 - Crank 實戰篇 - 接口以及場景壓測
      6. 堪比JMeter的.Net壓測工具 - Crank 實戰篇 - 收集診斷跟蹤信息與如何分析瓶頸
      7. 堪比JMeter的.Net壓測工具 - Crank 總結篇 - crank帶來了什么

      1. 前言

      Crank 是.NET 團隊用來運行基準測試的基準測試基礎架構,包括(但不限于)來自TechEmpower Web 框架基準測試的場景,是2021年.NET Conf 大會上介紹的一項新的項目,其前身是Benchmarks

      Crank目標之一是為開發人員提供一種工具,讓他們能夠非常輕松地處理性能并衡量潛在的改進。其中一些功能是:

      • 部署和基準測試基于 .NET 或 Docker 容器的多層應用程序

      通過指定.Net項目(本地路徑或git遠程倉庫地址),支持直接部署或通過Docker部署應用程序,用于基準測試)

      • 通過Yml配置,不僅僅支持結果存儲在 JSON 、SQL Server 中還支持存儲到csv文件中以用于圖表

      目前有小伙伴已經在提議將支持存儲在es

      • 支持更改自定義應用程序的Franework環境,測試在不同環境下的性能
      • 收集診斷跟蹤信息

      2. 核心組成

      Crank由Agent、Controller兩部分組成

      Controller是任務的調度者,可以調度負載任務以及輸出結果

      Agent是基準代理,任務的實際執行者,接收來自Controller的任務并執行。

      3. 安裝

      欲先工其善 必先利其器,我們先學習下如何安裝crank,以及如何驗證是否安裝成功

      3.1. 準備工作

      1. 安裝 .NET 5.0.

      2. 打開shell:安裝Crank Controller

      asciicast

      安裝命令:

      dotnet tool update Microsoft.Crank.Controller --version "0.2.0-alpha.21567.1" --global
      

      驗證命令:

      crank
      
      1. 打開shell: 安裝Crank Agent

      asciicast

      安裝命令:

      dotnet tool update Microsoft.Crank.Agent --version "0.2.0-alpha.21567.1" --global
      

      驗證命令:

      crank-agent
      

      3.2. 小結

      為方便閱讀、文章中Crank Controller簡稱Crank,Crank Agent簡稱Agent

      Agent以及Crank需要根據實際情況安裝,可分以下幾種情況:

      • 只是為了學習Crank,沒有單獨的測試環境,則需要分別安裝Agent、Controller

      • Agent有單獨提供測試環境,則本地不需要安裝Agent,只安裝Controller即可

      • Agent有單獨提供測試環境,且壓測任務由ci來觸發執行,則本地不需要安裝任何配置,通過構建ci任務完成壓力計劃即可

      打開shell:查看Agent、Controller版本

      dotnet tool list -g
      

      4. 基礎知識

      4.1. variables: 參數

      variables分為局部參數與全局參數兩種類型,在根節點的為全局參數,在其他節點下的是局部參數。

      例:

      hello.benchmarks.yml > scenarios > hello-load > variables節點下的serverPort以及path以及profiles>local>variables節點下的serverAddress是局部參數

      scenarios:
        hello:
          application:
            job: server
          load:
            job: bombardier
            variables:
              serverPort: 5000
              path: /
      
      profiles:
        local:
          variables:
            serverAddress: localhost
      

      bombardier.yml > variables > headers為全局參數

      variables:
        headers:
          none: ''
          plaintext: '--header "Accept: text/plain,text/html;q=0.9,application/xhtml+xml;q=0.9,application/xml;q=0.8,*/*;q=0.7" --header "Connection: keep-alive"'
          html: '--header "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" --header "Connection: keep-alive"'
          json: '--header "Accept: application/json,text/html;q=0.9,application/xhtml+xml;q=0.9,application/xml;q=0.8,*/*;q=0.7" --header "Connection: keep-alive"'
          connectionclose: '--header "Connection: close"'
          ---------------------------------------------------------------------
      

      4.2. profiles: 配置

      profiles其實就是配置文件信息,profiles允許被多次使用,這點在可以在文檔中找到對應介紹

      Usage: crank [options]
      
      Options:
        -?|-h|--help                       Show help information
      
        These options are not specific to a Job
      
        ----------------------------------------------------------------------
        --profile <profile>                Profiles to apply. Can be used multiple times.
      

      命名規則: 建議 *.profiles.yml

      4.3. jobs: 任務

      將我們要做的事定義為一個job。方便之后重用。此處的事指的是一類事,而不是指特定的某件事。

      例如:微軟內置定義的bombardier就是一個job,這個job是通過bombardier對其進行基準測試,并將結果記錄并輸出,而具體針對哪個接口進行基準測試其實并不關心。

      job根據應用程序源有分為遠程、本地兩種。

      本地源:

      jobs:
        server: #任務名稱,可根據任務作用自行命名
          source: #任務源
            localFolder: ../hello 
            project: hello.csproj #要構建的 .NET 項目的文件名
          readyStateText: Application started. #控制臺中通知服務器它已啟動的文本
      

      本地源localFolder針對當前運行crank --config執行命令所在的相對路徑即可,任務開始后會將本地的項目發送到agent后再執行任務。

      遠程源

      jobs:
        server:
          source:
            repository: https://github.com/dotnet/crank
            branchOrCommit: main #遠程源執行任務的分支
            project: samples/hello/hello.csproj #要構建的 .NET 項目的文件名,格式:相對根的相對路徑+項目名.csproj
          readyStateText: Application started.
      

      遠程源會將倉庫信息發送到Agent,Agent會先將倉庫下載下來并切換到指定的分支后再執行構建任務啟動項目

      4.4. scenarios: 場景

      job關心的是一類事,而特定的事情并不關心,那具體的事是誰比較關心呢,沒錯那就是場景,也就是scenarios,scenarios通過多個job來完成對指定場景的基準測試,做的是具體任務的編排

      4.5. imports: 導入

      imports為我們提供了yml重用的可能,因為有imports的支持,我們才可以將公共的yml提取到一個單獨的yml中,通過imports將使用到的yml導入即可,與js、css的導入有異曲同工之妙

      4.6. 小結

      在crank中,variables、profiles都不是必須的,但因為它們的存在,才使得我們可以以面向對象的思想開發,可以通過新增變量或指定配置完成基準測試,這塊后面的實戰中會有詳細解釋

      5. 入門

      經過之前的學習,我們對crank的基本配置也有了一定的了解,那接下來的時間,我們先試著學習下官方已經給我們準備好的Sample,下面的教程也會詳細講解一下各個配置的作用,希望能通過下面的學習了解到Crank的工作基本原理

      5.1. 啟動Agent

      asciicast

      crank-agent --dotnethome "/home/{your-account}/dotnet"
      
      5.1.0.1. 啟動Agent并指定dotnet環境
      • 格式:crank-agent –dotnethome "dotnet安裝地址"

      • crank-agent --dotnethome "C:\Program Files\dotnet" (windows)

      • crank-agent --dotnethome "/usr/share/dotnet" (Linux)

      • 在啟動agent時,強烈建議大家增加dotnethome 配置,為agent運行指定環境,以免運行任務時由于環境問題而卡在install sdk這里

      • 因演示機器本地dotnet的使用的是安裝路徑為/home/gushoudao/dotnet,所以視頻中運行的命令有所不同,這塊還需要根據本地的實際情況自行調整路徑即可 (因視頻錄制原因,在錄制結束后會停止agent,我們真實使用中啟動后不需要退出,一旦退出agent,就無法執行任務)

      5.1.0.2. 啟動Agent并指定不清理臨時文件
      • crank-agen --no-cleanup (指定不清理臨時文件)

      默認agent執行任務結束后會刪除當前任務執行過程中產生的臨時文件

      5.1.0.3. 啟動Agent并指定構建任務的最大持續時間
      • crank-agent --build-timeout

      默認構建任務的最大持續時間為10 minutes

      更多配置點擊查看

      5.2. 新建hello.benchmarks.yml配置

      配置文件源碼來自hello.benchmarks.yml

      imports:
        - https://raw.githubusercontent.com/doddgu/crank/sample/src/Microsoft.Crank.Jobs.Bombardier/bombardier.yml
      
      jobs:
        server:
          source:
            repository: https://github.com/doddgu/crank
            branchOrCommit: sample
            project: samples/hello/hello.csproj
          readyStateText: Application started.
      
      scenarios:
        hello:
          application:
            job: server
          load:
            job: bombardier
            variables:
              serverPort: 5000
              path: /
      
      profiles:
        local:
          variables:
            serverAddress: localhost
          jobs: 
            application:
              endpoints: 
                - http://localhost:5010
            load:
              endpoints: 
                - http://localhost:5010
      

      5.3. 啟動任務

      啟動agent(打開放在一邊):

      crank-agent --dotnethome "/usr/share/dotnet"
      

      啟動任務(另起一個新的Shell):

      git clone https://github.com/doddgu/crank.git
      cd crank
      git checkout sample
      crank --config ./samples/hello/hello.original.benchmarks.yml --scenario hello --load.framework net5.0 --application.framework net5.0
      

      然后我們等待片刻會輸出以下結果

      crank-agent:

      asciicast

      crank:

      asciicast

      | load                  |                |
      | --------------------- | -------------- |
      | CPU Usage (%)         | 39             |  CPU使用率
      | Cores usage (%)       | 631            |  多核CPU使用率
      | Working Set (MB)      | 35             |  內存使用率
      | Private Memory (MB)   | 35             |  進程使用的私有內存量
      | Build Time (ms)       | 4,853          |  構建應用程序需要多長時間(毫秒)
      | Start Time (ms)       | 386            |  啟動應用程序需要多長時間(毫秒)
      | Published Size (KB)   | 66,731         |  已發布應用程序的大小 (KB)
      | .NET Core SDK Version | 5.0.403        |  .Net Core SDK 版本
      | ASP.NET Core Version  | 5.0.12+0bc3c37 |  .Net Core版本
      | .NET Runtime Version  | 5.0.12+7211aa0 |  .Net運行時版本
      | First Request (ms)    | 172            |  第一個請求耗時(這里請求是Get)
      | Requests              | 2,086,594      |  總發送請求數
      | Bad responses         | 0              |  糟糕請求數(響應狀態碼不是2**也不是3**)
      | Mean latency (us)     | 1,833          |  平均延遲時間
      | Max latency (us)      | 89,001         |  最大延遲時間
      | Requests/sec          | 138,067        |  每秒支持請求數
      | Requests/sec (max)    | 255,442        |  每秒最大支持請求數
      

      當你能輸出以上信息的時候,證明了你已經成功跑通了整個流程

      在上面我們可以很清楚的看到場景hello下的測試結果,其中包含CPU使用率、多核CPU的使用率、內存使用率以及每秒執行的請求數等等指標

      在這一刻是不是突然覺得這個crank挺強大的,雖然還不清楚具體是咋做到的,但是真的很贊!!在這一刻是不是對它來了興趣,想知道它到底可以做什么,為什么可以輸出以上的結果?

      6. 結尾

      為確保后續不會因更新導致按照文檔操作不可用,源碼從官方源Fork了一份,其中絕大多數來自官方提供的Sample、部分文件為了更好的滿足個人習慣,會在一定程度上進行調整。

      源碼地址:https://github.com/doddgu/crank/tree/sample

      參考鏈接:

      開源地址

      MASA.BuildingBlocks:https://github.com/masastack/MASA.BuildingBlocks

      MASA.Contrib:https://github.com/masastack/MASA.Contrib

      MASA.Utils:https://github.com/masastack/MASA.Utils

      MASA.EShop:https://github.com/masalabs/MASA.EShop

      MASA.Blazor:https://github.com/BlazorComponent/MASA.Blazor

      如果你對我們的 MASA Framework 感興趣,無論是代碼貢獻、使用、提 Issue,歡迎聯系我們

      16373211753064.png

      posted @ 2022-02-25 09:05  尋找和諧  閱讀(3518)  評論(6)    收藏  舉報
      主站蜘蛛池模板: 亚洲精品一区二区天堂| 亚洲熟妇在线视频观看| 精品国产AV无码一区二区三区| 乱人伦人妻精品一区二区| 四虎永久精品在线视频| 波多野结衣一区二区三区高清| 亚洲精品自拍区在线观看| 风韵丰满熟妇啪啪区老熟熟女| 国产午夜福利视频一区二区| 免费看欧美日韩一区二区三区 | 国产精品麻豆欧美日韩ww| 国产亚洲无线码一区二区| 坐盗市亚洲综合一二三区| 亚洲精品日产AⅤ| 昌邑市| av激情亚洲男人的天堂| 国产视频深夜在线观看| 亚洲精品国偷拍自产在线观看蜜臀 | 欧美交a欧美精品喷水| 久久人妻夜夜做天天爽| 青青草无码免费一二三区| 色综合色天天久久婷婷基地 | 中国女人熟毛茸茸A毛片| 永靖县| 日本一区二区精品色超碰| 菠萝菠萝蜜午夜视频在线播放观看| 洪雅县| 午夜成人精品福利网站在线观看 | 亚洲精品韩国一区二区| 国产日韩精品一区二区三区在线| 中文字幕国产日韩精品| 亚洲精品一区二区妖精| 色婷婷综合久久久中文字幕| 久久精品国产亚洲成人av| 忘忧草在线社区www中国中文| 成 人色 网 站 欧美大片在线观看| 在线看片免费人成视频久网| 欧美和黑人xxxx猛交视频| 国产成a人片在线观看视频下载| 亚洲a∨无码无在线观看| 国产精品中文字幕在线|