JMeterに匹敵する.Netストレス測定ツール-クランクの紹介

1はじめに

クランクは、 .NET Conf 2021で導入され、以前はBenchmarksと呼ばれていた新しいプロジェクトであるTechEmpower Web Framework Benchmarkのシナリオを含む(ただしこれらに限定されない)ベンチマークを実行するために.NETチームが使用するベンチマークインフラストラクチャです。

Crankの目標の1つは、開発者がパフォーマンスを処理し、潜在的な改善を非常に簡単に測定できるツールを開発者に提供することです。これらの機能の一部は次のとおりです。

  • .NETまたはDockerコンテナに基づく多層アプリケーションのデプロイとベンチマーク

.Netプロジェクト(ローカルパスまたはgitリモートリポジトリアドレス)を指定することで、直接展開またはベンチマーク用のDockerを介したアプリケーションの展開をサポートします)

  • Yml構成により、JSON、SQL Serverに保存される結果だけでなく、グラフのcsvファイルにもサポートされます

現在、一部の小規模なパートナーは、サポートをesに保存することを提案しています。

  • カスタムアプリケーションのFranework環境の変更と、さまざまな環境でのパフォーマンスのテストをサポートします
  • 診断トレース情報を収集する

2.コア構成

クランクは、エージェントとコントローラーの2つの部分で構成されています

コントローラはタスクのスケジューラであり、ロードタスクをスケジュールして結果を出力できます

エージェントは、タスクの実際の実行者であるベンチマークエージェントであり、コントローラーからタスクを受け取り、それを実行します。

3.インストール

良い仕事をしたいのなら、まず工具を研ぐ必要があります。まず、クランクの取り付け方法と、取り付けが成功したかどうかを確認する方法を学びましょう。

3.1。準備

  1. .NET5.0をインストールします

  2. シェルを開く:クランクコントローラーをインストールする

asciicast

インストールコマンド:

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

コマンドの確認:

crank
  1. シェルを開く:クランクエージェントをインストールする

asciicast

インストールコマンド:

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

コマンドの確認:

crank-agent

3.2.まとめ

読みやすくするために、この記事ではクランクコントローラーをクランクと呼び、クランクエージェントを略してエージェントと呼びます。

エージェントとクランクは、実際の状況に応じてインストールする必要があります。これは、次の状況に分けることができます。

  • クランクを学ぶためだけに、個別のテスト環境なしで、エージェントとコントローラーを別々にインストールする必要があります

  • エージェントは個別のテスト環境を提供するため、エージェントをローカルにインストールする必要はなく、コントローラーのみをインストールできます。

  • エージェントは個別のテスト環境を提供し、圧力テストタスクはciによってトリガーおよび実行されるため、構成をローカルにインストールする必要はなく、圧力計画はciタスクを構築することで完了できます。

シェルを開きます。エージェントとコントローラーのバージョンを確認します

dotnet tool list -g

4.基礎知識

4.1。変数:パラメーター

変数は、ローカルパラメータとグローバルパラメータの2つのタイプに分けられます。ルートノードはグローバルパラメータであり、他のノードはローカルパラメータです。

例:

hello.benchmarks.yml>シナリオ>hello-load>変数ノードの下のserverPortとパスおよび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:
    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。プロファイル:構成

プロファイルは実際には構成ファイル情報です。プロファイルは複数回使用できます。これはドキュメントに記載されています。

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。ジョブ:タスク

仕事としてやりたいことを定義します。後で簡単に再利用できます。ここでの事柄は、特定の事柄ではなく、ある種の事柄を指します。

たとえば、Microsoftのボンバルディアの組み込み定義は仕事です。この仕事は、ボンバルディアを介してベンチマークを行い、結果を記録して出力することですが、どのインターフェイスがベンチマークされるかは実際には関係ありません。

ジョブは、アプリケーションソースに応じてリモートとローカルに分けられます。

ローカルソース:

jobs:
  server: #任务名称,可根据任务作用自行命名
    source: #任务源
      localFolder: ../hello 
      project: hello.csproj #要构建的 .NET 项目的文件名
    readyStateText: Application started. #控制台中通知服务器它已启动的文本

ローカルソースlocalFolderは、現在のcrank --config実行コマンドが配置されている相対パスと比較できます。タスクの開始後、ローカルプロジェクトがエージェントに送信され、タスクが実行されます。

リモートソース

jobs:
  server:
    source:
      repository: https://github.com/dotnet/crank
      branchOrCommit: main #远程源执行任务的分支
      project: samples/hello/hello.csproj #要构建的 .NET 项目的文件名,格式:相对根的相对路径+项目名.csproj
    readyStateText: Application started.

リモートソースはウェアハウス情報をエージェントに送信します。エージェントは最初にウェアハウスをダウンロードし、指定されたブランチに切り替えてから、ビルドタスクを実行してプロジェクトを開始します。

4.4。シナリオ:シナリオ

ジョブは特定の事柄ではなく、あるクラスの事柄に関心があります。誰が特定の事柄に関心がありますか?はい、それはシナリオ、つまりシナリオです。シナリオは複数のジョブを使用して、指定されたシナリオのベンチマークテストを完了します。行われるのは特定のタスクの配置です

4.5。輸入:輸入

インポートにより、ymlの再利用が可能になります。インポートがサポートされているため、パブリックymlを別のymlに抽出し、jsやcssのインポートと同様に、インポートを通じて使用済みymlをインポートできます。

4.6.まとめ

クランクでは、変数とプロファイルは必要ありませんが、それらが存在するため、オブジェクト指向の考え方で開発でき、変数を追加したり構成を指定したりすることでベンチマークテストを完了することができます。これについては、実際の戦闘で後で詳しく説明します。

5.はじめに

前回の調査後、クランクの基本構成についてもある程度理解しているので、次回はまず、オフィシャルが用意してくれたサンプルを学びます。次のチュートリアルでは、各構成の役割についても説明します。詳細は、以下の学習を通じてクランクの基本原理を理解したいと思います。

5.1。エージェントを起動します

asciicast

crank-agent --dotnethome "/home/{your-account}/dotnet"
5.1.0.1.エージェントを起動し、ドットネット環境を指定します
  • 形式:crank-agent –dotnethome「dotnetインストールアドレス」

  • クランクエージェント--dotnethome"C:\ Program Files \ dotnet"(Windows)

  • クランクエージェント--dotnethome"/usr / share / dotnet"(Linux)

  • エージェントを起動するときは、dotnethome構成を増やして、エージェントを実行する環境を指定することを強くお勧めします。これにより、タスクの実行時に環境問題が発生してインストールSDKにとどまらないようにします。

  • デモマシンのローカルドットネットは/home/ gushoudao / dotnetのインストールパスを使用するため、ビデオで実行されるコマンドは異なり、実際のローカル状況に応じてパスを調整する必要があります(ビデオ録画の理由から、After記録すると、エージェントは停止します。実際に使用を開始した後、終了する必要はありません。エージェントを終了すると、タスクを実行できなくなります。)

5.1.0.2。エージェントを起動し、一時ファイルをクリーンアップしないように指定します
  • クランクアジェン--no-cleanup(一時ファイルをクリーンアップしないように指定)

デフォルトでは、現在のタスクの実行中に生成された一時ファイルは、エージェントによるタスクの実行が完了した後に削除されます。

5.1.0.3.エージェントを起動し、ビルドタスクの最大期間を指定します
  • クランクエージェント--build-timeout

デフォルトのビルドタスクの最大期間は10分です

その他の構成については、クリックして表示してください

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。タスクの開始

エージェントを起動します(開いて取っておきます):

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

タスクを開始します(新しいシェルを開始します):

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

その後、しばらく待つと次の結果が出力されます

クランクエージェント:

asciicast

クランク:

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使用率、メモリ使用率、1秒あたりに実行されたリクエスト数などのテスト結果を明確に確認できます。

この瞬間、いきなりこのクランクがとてもパワフルだと感じますか?どうやってやるのかは定かではありませんが、本当にすごいです!現時点でそれに興味があり、それが何ができるのか、そしてなぜそれが上記の結果を出力できるのか知りたいですか?

6.終わり

その後の更新によりドキュメントに基づく操作が利用できなくなることを確実にするために、ソースコードは公式ソースからフォークされ、そのほとんどは公式に提供されたサンプルからのものであり、一部のファイルはある程度調整されます個人的な習慣をよりよく満たすために。

ソースアドレス: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フレームワークに興味がある場合は、コードの提供、使用、発行のいずれであっても、お問い合わせください。

16373211753064.png

{{o.name}}
{{m.name}}

おすすめ

転載: my.oschina.net/u/5447363/blog/5477950