{"id":16366357,"url":"https://github.com/centminmod/h2load-benchmarks","last_synced_at":"2026-03-09T17:15:36.931Z","repository":{"id":165028512,"uuid":"640426717","full_name":"centminmod/h2load-benchmarks","owner":"centminmod","description":null,"archived":false,"fork":false,"pushed_at":"2024-09-09T11:42:22.000Z","size":2750,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-12-31T01:28:54.944Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/centminmod.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-05-14T03:39:41.000Z","updated_at":"2024-09-19T09:36:23.000Z","dependencies_parsed_at":null,"dependency_job_id":"219d846b-c182-4cd5-bf3a-59f6094251d5","html_url":"https://github.com/centminmod/h2load-benchmarks","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/centminmod%2Fh2load-benchmarks","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/centminmod%2Fh2load-benchmarks/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/centminmod%2Fh2load-benchmarks/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/centminmod%2Fh2load-benchmarks/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/centminmod","download_url":"https://codeload.github.com/centminmod/h2load-benchmarks/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239827774,"owners_count":19703748,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-11T02:46:09.116Z","updated_at":"2025-12-05T05:04:50.023Z","avatar_url":"https://github.com/centminmod.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"![GitHub last commit](https://img.shields.io/github/last-commit/centminmod/h2load-benchmarks) ![GitHub contributors](https://img.shields.io/github/contributors/centminmod/h2load-benchmarks) ![GitHub Repo stars](https://img.shields.io/github/stars/centminmod/h2load-benchmarks) ![GitHub watchers](https://img.shields.io/github/watchers/centminmod/h2load-benchmarks) ![GitHub Sponsors](https://img.shields.io/github/sponsors/centminmod) ![GitHub top language](https://img.shields.io/github/languages/top/centminmod/h2load-benchmarks) ![GitHub language count](https://img.shields.io/github/languages/count/centminmod/h2load-benchmarks)\n\n# Requirements\n\n```\nyum -y install nghttp2 gnuplot jq\n```\n\npsrecord and matplotlib for logging and chart plotting for local Nginx resource usage\n\n```\npip install psrecord\npip install matplotlib\n```\n\nor\n\n```\npip3 install psrecord\npip3 install matplotlib\n```\n\n# Usage\n\nIncludes a [Batch Mode](#batch-mode) with charting support. Example charting for:\n\n* [VPS benchmarks](#batch-mode-vps) \n* [Dedicated server benchmarks](#batch-mode-dedicated-server).\n* [Comparison Charts](#comparison-charts)\n* [psrecord](#psrecord)\n\n```\n./h2load-bench.sh \nUsage: ./h2load-bench.sh [-t threads] [-c connections] [-n requests] [-D duration] [-w warm-up] [-u uri1,uri2,...] [-b batch] [-C compress] [-f format]\n\nOptions:\n  -t, --threads       Number of threads\n  -c, --connections   Number of connections\n  -n, --requests      Number of requests\n  -D, --duration      Duration of the benchmark\n  -w, --warm-up       Warm-up time before the benchmark\n  -u, --uri           Comma-separated list of URIs to request\n  -b, --batch         Enable batch mode\n  -C, --compress      Compression option (gzip, br, zstd, none)\n  -f, --format        Output format (json or markdown)\n  -h, --help          Display this help message\n```\n\n## Multiple Domain/URL Tests\n\nUpdated 9/9/24 - allow for script to test multiple domain/urls/servers via comma separated list of `-u` URI i.e. `https://domain.com:443,https://domain.com:8443` which will test:\n\n* `https://domain.com:443` web server on port `443`\n* `https://domain.com:8443` web server on port `8443`\n\nOutput default in JSON format\n\n```\nt=4; c=100; n=1000;\n\nbash h2load-bench.sh -t${t} -c${c} -n${n} -u https://domain.com:443,https://domain.com:8443\nRunning benchmark for https://domain.com:443\nRunning benchmark for https://domain.com:8443\n[{\n  \"time\": \"44.1955\",\n  \"time_min\": \"40.3000\",\n  \"time_max\": \"52.4800\",\n  \"time_95pc\": \"46.0400\",\n  \"req_per_sec\": \"22725.1627\",\n  \"req_per_sec_min\": \"19055.2400\",\n  \"req_per_sec_max\": \"24814.5100\",\n  \"req_per_sec_95pc\": \"24330.9000\",\n  \"mbs\": \"49.1936MB/s\",\n  \"mbs_min\": \"41.2500MB/s\",\n  \"mbs_max\": \"53.7200MB/s\",\n  \"mbs_95pc\": \"52.6700MB/s\",\n  \"req_min\": \"0.0027s\",\n  \"req_min_min\": \"0.0005s\",\n  \"req_min_max\": \"0.0040s\",\n  \"req_min_95pc\": \"0.0040s\",\n  \"req_max\": \"0.0261s\",\n  \"req_max_min\": \"0.0204s\",\n  \"req_max_max\": \"0.0342s\",\n  \"req_max_95pc\": \"0.0316s\",\n  \"req_mean\": \"0.0125s\",\n  \"req_mean_min\": \"0.0114s\",\n  \"req_mean_max\": \"0.0140s\",\n  \"req_mean_95pc\": \"0.0140s\",\n  \"req_sd\": \"0.0053s\",\n  \"req_sd_min\": \"0.0039s\",\n  \"req_sd_max\": \"0.0074s\",\n  \"req_sd_95pc\": \"0.0061s\",\n  \"req_sd_pct\": \"66.1000s\",\n  \"req_sd_pct_min\": \"59.9000s\",\n  \"req_sd_pct_max\": \"71.8000s\",\n  \"req_sd_pct_95pc\": \"71.6000s\",\n  \"conn_min\": \"0.0039s\",\n  \"conn_min_min\": \"0.0032s\",\n  \"conn_min_max\": \"0.0051s\",\n  \"conn_min_95pc\": \"0.0049s\",\n  \"conn_max\": \"0.0201s\",\n  \"conn_max_min\": \"0.0170s\",\n  \"conn_max_max\": \"0.0247s\",\n  \"conn_max_95pc\": \"0.0233s\",\n  \"conn_mean\": \"0.0113s\",\n  \"conn_mean_min\": \"0.0099s\",\n  \"conn_mean_max\": \"0.0142s\",\n  \"conn_mean_95pc\": \"0.0125s\",\n  \"conn_sd\": \"0.0045s\",\n  \"conn_sd_min\": \"0.0037s\",\n  \"conn_sd_max\": \"0.0058s\",\n  \"conn_sd_95pc\": \"0.0051s\",\n  \"conn_sd_pct\": \"59.8182s\",\n  \"conn_sd_pct_min\": \"56.0000s\",\n  \"conn_sd_pct_max\": \"64.0000s\",\n  \"conn_sd_pct_95pc\": \"63.0000s\",\n  \"first_byte_min\": \"0.0143s\",\n  \"first_byte_min_min\": \"0.0121s\",\n  \"first_byte_min_max\": \"0.0160s\",\n  \"first_byte_min_95pc\": \"0.0158s\",\n  \"first_byte_max\": \"0.0420s\",\n  \"first_byte_max_min\": \"0.0379s\",\n  \"first_byte_max_max\": \"0.0506s\",\n  \"first_byte_max_95pc\": \"0.0434s\",\n  \"first_byte_mean\": \"0.0233s\",\n  \"first_byte_mean_min\": \"0.0215s\",\n  \"first_byte_mean_max\": \"0.0253s\",\n  \"first_byte_mean_95pc\": \"0.0241s\",\n  \"first_byte_sd\": \"0.0070s\",\n  \"first_byte_sd_min\": \"0.0060s\",\n  \"first_byte_sd_max\": \"0.0089s\",\n  \"first_byte_sd_95pc\": \"0.0078s\",\n  \"first_byte_sd_pct\": \"69.1818s\",\n  \"first_byte_sd_pct_min\": \"60.0000s\",\n  \"first_byte_sd_pct_max\": \"80.0000s\",\n  \"first_byte_sd_pct_95pc\": \"73.0000s\",\n  \"req_s_min\": \"230.0200\",\n  \"req_s_min_min\": \"191.7700\",\n  \"req_s_min_max\": \"254.2100\",\n  \"req_s_min_95pc\": \"246.7300\",\n  \"req_s_max\": \"697.4691\",\n  \"req_s_max_min\": \"620.6500\",\n  \"req_s_max_max\": \"818.3000\",\n  \"req_s_max_95pc\": \"758.2800\",\n  \"req_s_mean\": \"448.8827\",\n  \"req_s_mean_min\": \"404.8800\",\n  \"req_s_mean_max\": \"489.1200\",\n  \"req_s_mean_95pc\": \"481.1800\",\n  \"req_s_sd\": \"127.6164\",\n  \"req_s_sd_min\": \"101.3500\",\n  \"req_s_sd_max\": \"150.5400\",\n  \"req_s_sd_95pc\": \"147.7600\",\n  \"req_s_sd_pct\": \"59.2727\",\n  \"req_s_sd_pct_min\": \"54.0000\",\n  \"req_s_sd_pct_max\": \"68.0000\",\n  \"req_s_sd_pct_95pc\": \"62.0000\",\n  \"total_req\": \"1000.0000\",\n  \"started_req\": \"1000.0000\",\n  \"done_req\": \"1000.0000\",\n  \"succeeded_req\": \"1000.0000\",\n  \"failed_req\": \"0.0000\",\n  \"errored_req\": \"0.0000\",\n  \"timeout_req\": \"0.0000\",\n  \"status_2xx\": \"1000.0000\",\n  \"status_3xx\": \"0.0000\",\n  \"status_4xx\": \"0.0000\",\n  \"status_5xx\": \"0.0000\",\n  \"total_traffic\": \"2.1600KB\",\n  \"header_traffic\": \"202.1500KB\",\n  \"data_traffic\": \"1.9500KB\",\n  \"threads\": \"4.0000\",\n  \"connections\": \"100.0000\",\n  \"requests\": \"1000.0000\",\n  \"cipher\": \"TLS_AES_256_GCM_SHA384\",\n  \"tempkey\": \"X25519\",\n  \"protocol\": \"h2\",\n  \"duration\": \"null\",\n  \"warm_up_time\": \"null\",\n  \"uri\": \"https://domain.com:443\"\n},{\n  \"time\": \"38.9082\",\n  \"time_min\": \"26.3800\",\n  \"time_max\": \"63.8100\",\n  \"time_95pc\": \"47.0100\",\n  \"req_per_sec\": \"27476.1236\",\n  \"req_per_sec_min\": \"15672.7500\",\n  \"req_per_sec_max\": \"37914.6900\",\n  \"req_per_sec_95pc\": \"35728.3200\",\n  \"mbs\": \"56.2055MB/s\",\n  \"mbs_min\": \"32.0600MB/s\",\n  \"mbs_max\": \"77.5600MB/s\",\n  \"mbs_95pc\": \"73.0900MB/s\",\n  \"req_min\": \"0.0027s\",\n  \"req_min_min\": \"0.0009s\",\n  \"req_min_max\": \"0.0070s\",\n  \"req_min_95pc\": \"0.0031s\",\n  \"req_max\": \"0.0265s\",\n  \"req_max_min\": \"0.0145s\",\n  \"req_max_max\": \"0.0487s\",\n  \"req_max_95pc\": \"0.0387s\",\n  \"req_mean\": \"0.0130s\",\n  \"req_mean_min\": \"0.0082s\",\n  \"req_mean_max\": \"0.0218s\",\n  \"req_mean_95pc\": \"0.0172s\",\n  \"req_sd\": \"0.0056s\",\n  \"req_sd_min\": \"0.0026s\",\n  \"req_sd_max\": \"0.0105s\",\n  \"req_sd_95pc\": \"0.0082s\",\n  \"req_sd_pct\": \"64.0545s\",\n  \"req_sd_pct_min\": \"58.6000s\",\n  \"req_sd_pct_max\": \"70.3000s\",\n  \"req_sd_pct_95pc\": \"70.0000s\",\n  \"conn_min\": \"0.0055s\",\n  \"conn_min_min\": \"0.0017s\",\n  \"conn_min_max\": \"0.0068s\",\n  \"conn_min_95pc\": \"0.0064s\",\n  \"conn_max\": \"0.0255s\",\n  \"conn_max_min\": \"0.0225s\",\n  \"conn_max_max\": \"0.0305s\",\n  \"conn_max_95pc\": \"0.0301s\",\n  \"conn_mean\": \"0.0146s\",\n  \"conn_mean_min\": \"0.0123s\",\n  \"conn_mean_max\": \"0.0162s\",\n  \"conn_mean_95pc\": \"0.0162s\",\n  \"conn_sd\": \"0.0056s\",\n  \"conn_sd_min\": \"0.0040s\",\n  \"conn_sd_max\": \"0.0077s\",\n  \"conn_sd_95pc\": \"0.0074s\",\n  \"conn_sd_pct\": \"60.2727s\",\n  \"conn_sd_pct_min\": \"56.0000s\",\n  \"conn_sd_pct_max\": \"65.0000s\",\n  \"conn_sd_pct_95pc\": \"63.0000s\",\n  \"first_byte_min\": \"0.0188s\",\n  \"first_byte_min_min\": \"0.0091s\",\n  \"first_byte_min_max\": \"0.0251s\",\n  \"first_byte_min_95pc\": \"0.0228s\",\n  \"first_byte_max\": \"0.0380s\",\n  \"first_byte_max_min\": \"0.0260s\",\n  \"first_byte_max_max\": \"0.0630s\",\n  \"first_byte_max_95pc\": \"0.0460s\",\n  \"first_byte_mean\": \"0.0266s\",\n  \"first_byte_mean_min\": \"0.0201s\",\n  \"first_byte_mean_max\": \"0.0349s\",\n  \"first_byte_mean_95pc\": \"0.0296s\",\n  \"first_byte_sd\": \"0.0049s\",\n  \"first_byte_sd_min\": \"0.0016s\",\n  \"first_byte_sd_max\": \"0.0127s\",\n  \"first_byte_sd_95pc\": \"0.0076s\",\n  \"first_byte_sd_pct\": \"68.3636s\",\n  \"first_byte_sd_pct_min\": \"57.0000s\",\n  \"first_byte_sd_pct_max\": \"83.0000s\",\n  \"first_byte_sd_pct_95pc\": \"82.0000s\",\n  \"req_s_min\": \"277.1827\",\n  \"req_s_min_min\": \"158.0700\",\n  \"req_s_min_max\": \"383.3700\",\n  \"req_s_min_95pc\": \"360.3000\",\n  \"req_s_max\": \"563.6845\",\n  \"req_s_max_min\": \"397.2900\",\n  \"req_s_max_max\": \"976.2400\",\n  \"req_s_max_95pc\": \"799.4300\",\n  \"req_s_mean\": \"365.4445\",\n  \"req_s_mean_min\": \"280.5500\",\n  \"req_s_mean_max\": \"477.5800\",\n  \"req_s_mean_95pc\": \"418.3000\",\n  \"req_s_sd\": \"68.3255\",\n  \"req_s_sd_min\": \"29.1500\",\n  \"req_s_sd_max\": \"118.6600\",\n  \"req_s_sd_95pc\": \"108.8900\",\n  \"req_s_sd_pct\": \"67.5455\",\n  \"req_s_sd_pct_min\": \"51.0000\",\n  \"req_s_sd_pct_max\": \"94.0000\",\n  \"req_s_sd_pct_95pc\": \"87.0000\",\n  \"total_req\": \"1000.0000\",\n  \"started_req\": \"1000.0000\",\n  \"done_req\": \"1000.0000\",\n  \"succeeded_req\": \"1000.0000\",\n  \"failed_req\": \"0.0000\",\n  \"errored_req\": \"0.0000\",\n  \"timeout_req\": \"0.0000\",\n  \"status_2xx\": \"1000.0000\",\n  \"status_3xx\": \"0.0000\",\n  \"status_4xx\": \"0.0000\",\n  \"status_5xx\": \"0.0000\",\n  \"total_traffic\": \"2.0500KB\",\n  \"header_traffic\": \"34.0800KB\",\n  \"data_traffic\": \"1.9900KB\",\n  \"threads\": \"4.0000\",\n  \"connections\": \"100.0000\",\n  \"requests\": \"1000.0000\",\n  \"cipher\": \"TLS_AES_128_GCM_SHA256\",\n  \"tempkey\": \"X25519\",\n  \"protocol\": \"h2\",\n  \"duration\": \"null\",\n  \"warm_up_time\": \"null\",\n  \"uri\": \"https://domain.com:8443\"\n}]\n```\n\nIn Markdown format `-f markdown`\n\n```\nt=4; c=100; n=1000;\n\nbash h2load-bench.sh -t${t} -c${c} -n${n} -u https://domain.com:443,https://domain.com:8443 -f markdown\nRunning benchmark for https://domain.com:443\nRunning benchmark for https://domain.com:8443\n| Field | https://domain.com:443 | https://domain.com:8443 |\n|-------|-------|-------|\n| cipher | TLS_AES_256_GCM_SHA384 | TLS_AES_128_GCM_SHA256 |\n| conn_max | 0.0212s | 0.0260s |\n| conn_max_95pc | 0.0259s | 0.0315s |\n| conn_max_max | 0.0261s | 0.0333s |\n| conn_max_min | 0.0166s | 0.0200s |\n| conn_mean | 0.0117s | 0.0148s |\n| conn_mean_95pc | 0.0142s | 0.0183s |\n| conn_mean_max | 0.0145s | 0.0188s |\n| conn_mean_min | 0.0096s | 0.0125s |\n| conn_min | 0.0042s | 0.0053s |\n| conn_min_95pc | 0.0051s | 0.0064s |\n| conn_min_max | 0.0052s | 0.0070s |\n| conn_min_min | 0.0034s | 0.0031s |\n| conn_sd | 0.0047s | 0.0058s |\n| conn_sd_95pc | 0.0059s | 0.0082s |\n| conn_sd_max | 0.0064s | 0.0088s |\n| conn_sd_min | 0.0036s | 0.0039s |\n| conn_sd_pct | 60.8182s | 59.6364s |\n| conn_sd_pct_95pc | 65.0000s | 66.0000s |\n| conn_sd_pct_max | 68.0000s | 67.0000s |\n| conn_sd_pct_min | 56.0000s | 52.0000s |\n| connections | 100.0000 | 100.0000 |\n| data_traffic | 1.9500KB | 1.9900KB |\n| done_req | 1000.0000 | 1000.0000 |\n| duration | null | null |\n| errored_req | 0.0000 | 0.0000 |\n| failed_req | 0.0000 | 0.0000 |\n| first_byte_max | 0.0452s | 0.0372s |\n| first_byte_max_95pc | 0.0506s | 0.0461s |\n| first_byte_max_max | 0.0519s | 0.0562s |\n| first_byte_max_min | 0.0387s | 0.0271s |\n| first_byte_mean | 0.0243s | 0.0265s |\n| first_byte_mean_95pc | 0.0257s | 0.0309s |\n| first_byte_mean_max | 0.0271s | 0.0310s |\n| first_byte_mean_min | 0.0217s | 0.0211s |\n| first_byte_min | 0.0143s | 0.0181s |\n| first_byte_min_95pc | 0.0157s | 0.0235s |\n| first_byte_min_max | 0.0163s | 0.0249s |\n| first_byte_min_min | 0.0130s | 0.0121s |\n| first_byte_sd | 0.0078s | 0.0051s |\n| first_byte_sd_95pc | 0.0090s | 0.0080s |\n| first_byte_sd_max | 0.0099s | 0.0116s |\n| first_byte_sd_min | 0.0053s | 0.0026s |\n| first_byte_sd_pct | 68.1818s | 64.0909s |\n| first_byte_sd_pct_95pc | 75.0000s | 75.0000s |\n| first_byte_sd_pct_max | 80.0000s | 86.0000s |\n| first_byte_sd_pct_min | 59.0000s | 52.0000s |\n| header_traffic | 202.1500KB | 34.0900KB |\n| mbs | 46.0727MB/s | 56.0745MB/s |\n| mbs_95pc | 52.5400MB/s | 72.6400MB/s |\n| mbs_max | 53.3300MB/s | 73.1100MB/s |\n| mbs_min | 40.1800MB/s | 35.8800MB/s |\n| protocol | h2 | h2 |\n| req_max | 0.0292s | 0.0263s |\n| req_max_95pc | 0.0333s | 0.0366s |\n| req_max_max | 0.0363s | 0.0504s |\n| req_max_min | 0.0230s | 0.0161s |\n| req_mean | 0.0131s | 0.0129s |\n| req_mean_95pc | 0.0142s | 0.0173s |\n| req_mean_max | 0.0149s | 0.0214s |\n| req_mean_min | 0.0117s | 0.0082s |\n| req_min | 0.0022s | 0.0029s |\n| req_min_95pc | 0.0031s | 0.0040s |\n| req_min_max | 0.0033s | 0.0052s |\n| req_min_min | 0.0013s | 0.0009s |\n| req_per_sec | 21283.2600 | 27411.7936 |\n| req_per_sec_95pc | 24270.6700 | 35508.8400 |\n| req_per_sec_max | 24634.1800 | 35738.5400 |\n| req_per_sec_min | 18561.8300 | 17539.5500 |\n| req_s_max | 696.5327 | 569.6536 |\n| req_s_max_95pc | 759.2400 | 654.1400 |\n| req_s_max_max | 761.1200 | 803.8400 |\n| req_s_max_min | 611.1100 | 399.9000 |\n| req_s_mean | 434.3200 | 372.2473 |\n| req_s_mean_95pc | 472.0000 | 451.8500 |\n| req_s_mean_max | 480.5500 | 478.6400 |\n| req_s_mean_min | 393.3100 | 298.1500 |\n| req_s_min | 215.3427 | 277.4845 |\n| req_s_min_95pc | 248.6100 | 357.6800 |\n| req_s_min_max | 248.8700 | 361.4400 |\n| req_s_min_min | 186.9100 | 176.4300 |\n| req_s_sd | 132.4491 | 79.5473 |\n| req_s_sd_95pc | 152.7500 | 118.7000 |\n| req_s_sd_max | 154.8300 | 155.4600 |\n| req_s_sd_min | 92.4900 | 28.7600 |\n| req_s_sd_pct | 60.4545 | 72.9091 |\n| req_s_sd_pct_95pc | 69.0000 | 84.0000 |\n| req_s_sd_pct_max | 70.0000 | 86.0000 |\n| req_s_sd_pct_min | 55.0000 | 59.0000 |\n| req_sd | 0.0064s | 0.0058s |\n| req_sd_95pc | 0.0073s | 0.0079s |\n| req_sd_max | 0.0079s | 0.0127s |\n| req_sd_min | 0.0046s | 0.0026s |\n| req_sd_pct | 64.9818s | 62.6818s |\n| req_sd_pct_95pc | 68.0000s | 69.6000s |\n| req_sd_pct_max | 68.9000s | 71.6000s |\n| req_sd_pct_min | 58.3000s | 54.0000s |\n| requests | 1000.0000 | 1000.0000 |\n| started_req | 1000.0000 | 1000.0000 |\n| status_2xx | 1000.0000 | 1000.0000 |\n| status_3xx | 0.0000 | 0.0000 |\n| status_4xx | 0.0000 | 0.0000 |\n| status_5xx | 0.0000 | 0.0000 |\n| succeeded_req | 1000.0000 | 1000.0000 |\n| tempkey | X25519 | X25519 |\n| threads | 4.0000 | 4.0000 |\n| time | 47.3327 | 38.1836 |\n| time_95pc | 53.1600 | 47.8300 |\n| time_max | 53.8700 | 57.0100 |\n| time_min | 40.5900 | 27.9800 |\n| timeout_req | 0.0000 | 0.0000 |\n| total_req | 1000.0000 | 1000.0000 |\n| total_traffic | 2.1600KB | 2.0500KB |\n| uri | https://domain.com:443 | https://domain.com:8443 |\n| warm_up_time | null | null |\n```\n\n| Field | https://domain.com:443 | https://domain.com:8443 |\n|-------|-------|-------|\n| cipher | TLS_AES_256_GCM_SHA384 | TLS_AES_128_GCM_SHA256 |\n| conn_max | 0.0212s | 0.0260s |\n| conn_max_95pc | 0.0259s | 0.0315s |\n| conn_max_max | 0.0261s | 0.0333s |\n| conn_max_min | 0.0166s | 0.0200s |\n| conn_mean | 0.0117s | 0.0148s |\n| conn_mean_95pc | 0.0142s | 0.0183s |\n| conn_mean_max | 0.0145s | 0.0188s |\n| conn_mean_min | 0.0096s | 0.0125s |\n| conn_min | 0.0042s | 0.0053s |\n| conn_min_95pc | 0.0051s | 0.0064s |\n| conn_min_max | 0.0052s | 0.0070s |\n| conn_min_min | 0.0034s | 0.0031s |\n| conn_sd | 0.0047s | 0.0058s |\n| conn_sd_95pc | 0.0059s | 0.0082s |\n| conn_sd_max | 0.0064s | 0.0088s |\n| conn_sd_min | 0.0036s | 0.0039s |\n| conn_sd_pct | 60.8182s | 59.6364s |\n| conn_sd_pct_95pc | 65.0000s | 66.0000s |\n| conn_sd_pct_max | 68.0000s | 67.0000s |\n| conn_sd_pct_min | 56.0000s | 52.0000s |\n| connections | 100.0000 | 100.0000 |\n| data_traffic | 1.9500KB | 1.9900KB |\n| done_req | 1000.0000 | 1000.0000 |\n| duration | null | null |\n| errored_req | 0.0000 | 0.0000 |\n| failed_req | 0.0000 | 0.0000 |\n| first_byte_max | 0.0452s | 0.0372s |\n| first_byte_max_95pc | 0.0506s | 0.0461s |\n| first_byte_max_max | 0.0519s | 0.0562s |\n| first_byte_max_min | 0.0387s | 0.0271s |\n| first_byte_mean | 0.0243s | 0.0265s |\n| first_byte_mean_95pc | 0.0257s | 0.0309s |\n| first_byte_mean_max | 0.0271s | 0.0310s |\n| first_byte_mean_min | 0.0217s | 0.0211s |\n| first_byte_min | 0.0143s | 0.0181s |\n| first_byte_min_95pc | 0.0157s | 0.0235s |\n| first_byte_min_max | 0.0163s | 0.0249s |\n| first_byte_min_min | 0.0130s | 0.0121s |\n| first_byte_sd | 0.0078s | 0.0051s |\n| first_byte_sd_95pc | 0.0090s | 0.0080s |\n| first_byte_sd_max | 0.0099s | 0.0116s |\n| first_byte_sd_min | 0.0053s | 0.0026s |\n| first_byte_sd_pct | 68.1818s | 64.0909s |\n| first_byte_sd_pct_95pc | 75.0000s | 75.0000s |\n| first_byte_sd_pct_max | 80.0000s | 86.0000s |\n| first_byte_sd_pct_min | 59.0000s | 52.0000s |\n| header_traffic | 202.1500KB | 34.0900KB |\n| mbs | 46.0727MB/s | 56.0745MB/s |\n| mbs_95pc | 52.5400MB/s | 72.6400MB/s |\n| mbs_max | 53.3300MB/s | 73.1100MB/s |\n| mbs_min | 40.1800MB/s | 35.8800MB/s |\n| protocol | h2 | h2 |\n| req_max | 0.0292s | 0.0263s |\n| req_max_95pc | 0.0333s | 0.0366s |\n| req_max_max | 0.0363s | 0.0504s |\n| req_max_min | 0.0230s | 0.0161s |\n| req_mean | 0.0131s | 0.0129s |\n| req_mean_95pc | 0.0142s | 0.0173s |\n| req_mean_max | 0.0149s | 0.0214s |\n| req_mean_min | 0.0117s | 0.0082s |\n| req_min | 0.0022s | 0.0029s |\n| req_min_95pc | 0.0031s | 0.0040s |\n| req_min_max | 0.0033s | 0.0052s |\n| req_min_min | 0.0013s | 0.0009s |\n| req_per_sec | 21283.2600 | 27411.7936 |\n| req_per_sec_95pc | 24270.6700 | 35508.8400 |\n| req_per_sec_max | 24634.1800 | 35738.5400 |\n| req_per_sec_min | 18561.8300 | 17539.5500 |\n| req_s_max | 696.5327 | 569.6536 |\n| req_s_max_95pc | 759.2400 | 654.1400 |\n| req_s_max_max | 761.1200 | 803.8400 |\n| req_s_max_min | 611.1100 | 399.9000 |\n| req_s_mean | 434.3200 | 372.2473 |\n| req_s_mean_95pc | 472.0000 | 451.8500 |\n| req_s_mean_max | 480.5500 | 478.6400 |\n| req_s_mean_min | 393.3100 | 298.1500 |\n| req_s_min | 215.3427 | 277.4845 |\n| req_s_min_95pc | 248.6100 | 357.6800 |\n| req_s_min_max | 248.8700 | 361.4400 |\n| req_s_min_min | 186.9100 | 176.4300 |\n| req_s_sd | 132.4491 | 79.5473 |\n| req_s_sd_95pc | 152.7500 | 118.7000 |\n| req_s_sd_max | 154.8300 | 155.4600 |\n| req_s_sd_min | 92.4900 | 28.7600 |\n| req_s_sd_pct | 60.4545 | 72.9091 |\n| req_s_sd_pct_95pc | 69.0000 | 84.0000 |\n| req_s_sd_pct_max | 70.0000 | 86.0000 |\n| req_s_sd_pct_min | 55.0000 | 59.0000 |\n| req_sd | 0.0064s | 0.0058s |\n| req_sd_95pc | 0.0073s | 0.0079s |\n| req_sd_max | 0.0079s | 0.0127s |\n| req_sd_min | 0.0046s | 0.0026s |\n| req_sd_pct | 64.9818s | 62.6818s |\n| req_sd_pct_95pc | 68.0000s | 69.6000s |\n| req_sd_pct_max | 68.9000s | 71.6000s |\n| req_sd_pct_min | 58.3000s | 54.0000s |\n| requests | 1000.0000 | 1000.0000 |\n| started_req | 1000.0000 | 1000.0000 |\n| status_2xx | 1000.0000 | 1000.0000 |\n| status_3xx | 0.0000 | 0.0000 |\n| status_4xx | 0.0000 | 0.0000 |\n| status_5xx | 0.0000 | 0.0000 |\n| succeeded_req | 1000.0000 | 1000.0000 |\n| tempkey | X25519 | X25519 |\n| threads | 4.0000 | 4.0000 |\n| time | 47.3327 | 38.1836 |\n| time_95pc | 53.1600 | 47.8300 |\n| time_max | 53.8700 | 57.0100 |\n| time_min | 40.5900 | 27.9800 |\n| timeout_req | 0.0000 | 0.0000 |\n| total_req | 1000.0000 | 1000.0000 |\n| total_traffic | 2.1600KB | 2.0500KB |\n| uri | https://domain.com:443 | https://domain.com:8443 |\n| warm_up_time | null | null |\n\n## JSON parsed HTTP/3 Test\n\nWhen h2load binary is built with HTTP/3 QUIC support, UDP sent/received size metrics are provided too and `protocol` reports `h3` tested.\n\n\n```\n./h2load-bench.sh -t1 -c10 -n100 -u https://domain.com\n```\n\nor pretty JSON format only:\n\n```\n./h2load-bench.sh -t1 -c10 -n100 -u https://domain.com | grep -oP '{.*}' | jq -r\n{\n  \"time\": \"10.12ms\",\n  \"req_per_sec\": \"9877.52\",\n  \"mbs\": \"21.17MB/s\",\n  \"total_req\": \"100\",\n  \"started_req\": \"100\",\n  \"done_req\": \"100\",\n  \"succeeded_req\": \"100\",\n  \"failed_req\": \"0\",\n  \"errored_req\": \"0\",\n  \"timeout_req\": \"0\",\n  \"status_2xx\": \"100\",\n  \"status_3xx\": \"0\",\n  \"status_4xx\": \"0\",\n  \"status_5xx\": \"0\",\n  \"total_traffic\": \"219.42KB\",\n  \"header_traffic\": \"18.26KB\",\n  \"data_traffic\": \"200.49KB\",\n  \"req_min\": \"2.35\",\n  \"req_max\": \"4.78\",\n  \"req_mean\": \"3.91\",\n  \"req_sd\": \"807us\",\n  \"req_sd_pct\": \"60.00%\",\n  \"conn_min\": \"2.65\",\n  \"conn_max\": \"5.50\",\n  \"conn_mean\": \"4.04\",\n  \"conn_sd\": \"955us\",\n  \"conn_sd_pct\": \"60.00%\",\n  \"first_byte_min\": \"6.62\",\n  \"first_byte_max\": \"9.14\",\n  \"first_byte_mean\": \"7.75\",\n  \"first_byte_sd\": \"930us\",\n  \"first_byte_sd_pct\": \"70.00%\",\n  \"req_s_min\": \"1050.69\",\n  \"req_s_max\": \"1374.58\",\n  \"req_s_mean\": \"1216.51\",\n  \"req_s_sd\": \"113.10\",\n  \"req_s_sd_pct\": \"113.10\",\n  \"cipher\": \"TLS_AES_256_GCM_SHA384\",\n  \"tempkey\": \"X25519\",\n  \"protocol\": \"h3\",\n  \"threads\": \"1\",\n  \"connections\": \"10\",\n  \"duration\": \"null\",\n  \"warm_up_time\": \"null\",\n  \"requests\": \"100\",\n  \"udp_sent\": \"52\",\n  \"udp_received\": \"251\"\n}\n```\n\n## JSON parsed HTTP/2 Test\n\n```\n./h2load-bench.sh -t 1 -c 10 -n 100 -u https://domain.com\n```\n\nor pretty JSON format only:\n\n```\n./h2load-bench.sh -t 1 -c 10 -n 100 -u https://domain.com | grep -oP '{.*}' | jq\n{\n  \"time\": \"38.44ms\",\n  \"req_per_sec\": \"2601.59\",\n  \"mbs\": \"5.05MB/s\",\n  \"total_req\": \"100\",\n  \"started_req\": \"100\",\n  \"done_req\": \"100\",\n  \"succeeded_req\": \"100\",\n  \"failed_req\": \"0\",\n  \"errored_req\": \"0\",\n  \"timeout_req\": \"0\",\n  \"status_2xx\": \"100\",\n  \"status_3xx\": \"0\",\n  \"status_4xx\": \"0\",\n  \"status_5xx\": \"0\",\n  \"total_traffic\": \"198.92KB\",\n  \"header_traffic\": \"20.21KB\",\n  \"data_traffic\": \"176.46KB\",\n  \"req_min\": \"1.70ms\",\n  \"req_max\": \"13.72ms\",\n  \"req_mean\": \"8.74ms\",\n  \"req_sd\": \"2.81ms\",\n  \"req_sd_pct\": \"69.00%\",\n  \"conn_min\": \"1.55ms\",\n  \"conn_max\": \"12.47ms\",\n  \"conn_mean\": \"7.50ms\",\n  \"conn_sd\": \"3.50ms\",\n  \"conn_sd_pct\": \"60.00%\",\n  \"first_byte_min\": \"25.43ms\",\n  \"first_byte_max\": \"35.52ms\",\n  \"first_byte_mean\": \"30.03ms\",\n  \"first_byte_sd\": \"4.73ms\",\n  \"first_byte_sd_pct\": \"60.00%\",\n  \"req_s_min\": \"280.64\",\n  \"req_s_max\": \"390.65\",\n  \"req_s_mean\": \"329.72\",\n  \"req_s_sd\": \"51.35\",\n  \"req_s_sd_pct\": \"51.35\",\n  \"cipher\": \"TLS_AES_256_GCM_SHA384\",\n  \"tempkey\": \"X25519\",\n  \"protocol\": \"h2\",\n  \"threads\": \"1\",\n  \"connections\": \"10\",\n  \"duration\": \"null\",\n  \"warm_up_time\": \"null\",\n  \"requests\": \"100\"\n}\n```\n\nJSON parsed reduced array fields\n\n```\ncat h2load-logs/h2load-stats-20230514034938.json | jq -r '{\n  \"req_per_sec\": .req_per_sec,\n  \"success_percentage\": (100 * (.succeeded_req | tonumber) / (.total_req | tonumber)),\n  \"req_min\": .req_min,\n  \"req_mean\": .req_mean,\n  \"req_max\": .req_max,\n  \"conn_min\": .conn_min,\n  \"conn_mean\": .conn_mean,\n  \"conn_max\": .conn_max,\n  \"first_byte_min\": .first_byte_min,\n  \"first_byte_mean\": .first_byte_mean,\n  \"first_byte_max\": .first_byte_max,\n  \"req_s_min\": .req_s_min,\n  \"req_s_mean\": .req_s_mean,\n  \"req_s_max\": .req_s_max,\n  \"threads\": .threads,\n  \"connections\": .connections,\n  \"duration\": .duration,\n  \"warm_up_time\": .warm_up_time,\n  \"requests\": .requests\n}'\n\n{\n  \"req_per_sec\": \"2601.59\",\n  \"success_percentage\": 100,\n  \"req_min\": \"1.70ms\",\n  \"req_mean\": \"8.74ms\",\n  \"req_max\": \"13.72ms\",\n  \"conn_min\": \"1.55ms\",\n  \"conn_mean\": \"7.50ms\",\n  \"conn_max\": \"12.47ms\",\n  \"first_byte_min\": \"25.43ms\",\n  \"first_byte_mean\": \"30.03ms\",\n  \"first_byte_max\": \"35.52ms\",\n  \"req_s_min\": \"280.64\",\n  \"req_s_mean\": \"329.72\",\n  \"req_s_max\": \"390.65\",\n  \"threads\": \"1\",\n  \"connections\": \"10\",\n  \"duration\": \"null\",\n  \"warm_up_time\": \"null\",\n  \"requests\": \"100\"\n}\n```\n\nRaw log\n\n```\ncat h2load-logs/h2load-raw-20230514034938.log\n\nstarting benchmark...\nspawning thread #0: 10 total client(s). 100 total requests\nTLS Protocol: TLSv1.3\nCipher: TLS_AES_256_GCM_SHA384\nServer Temp Key: X25519 253 bits\nApplication protocol: h2\nprogress: 10% done\nprogress: 20% done\nprogress: 30% done\nprogress: 40% done\nprogress: 50% done\nprogress: 60% done\nprogress: 70% done\nprogress: 80% done\nprogress: 90% done\nprogress: 100% done\n\nfinished in 38.44ms, 2601.59 req/s, 5.05MB/s\nrequests: 100 total, 100 started, 100 done, 100 succeeded, 0 failed, 0 errored, 0 timeout\nstatus codes: 100 2xx, 0 3xx, 0 4xx, 0 5xx\ntraffic: 198.92KB (203690) total, 20.21KB (20700) headers (space savings 26.33%), 176.46KB (180700) data\n                     min         max         mean         sd        +/- sd\ntime for request:     1.70ms     13.72ms      8.74ms      2.81ms    69.00%\ntime for connect:     1.55ms     12.47ms      7.50ms      3.50ms    60.00%\ntime to 1st byte:    25.43ms     35.52ms     30.03ms      4.73ms    60.00%\nreq/s           :     280.64      390.65      329.72       51.35    70.00%\n```\n\n# Batch Mode\n\n`-b` batch mode will take the connections value `-c 400` and divide it into 4 quarters for 4 `h2load` runs incrementing the by each quarter so `-c 100`, `-c 200`, `-c 300`, `-c 400`.\n\n## Batch Mode VPS Markdown Format\n\nBatch `-b` mode with `-f markdown` Markdown formatting:\n\n```\n\nt=4; c=100; n=1000;\n\nbash h2load-bench.sh -t${t} -c${c} -n${n} -u https://domain.com:443 -b -f markdown\nRunning benchmark for https://domain.com:443\n| Field | 25% | 50% | 75% | 100% |\n|-------|-----|-----|-----|------|\n| cipher | TLS_AES_256_GCM_SHA384 | TLS_AES_256_GCM_SHA384 | TLS_AES_256_GCM_SHA384 | TLS_AES_256_GCM_SHA384 |\n| conn_max | 0.0215s | 0.0220s | 0.0218s | 0.0208s |\n| conn_max_95pc | 0.0256s | 0.0263s | 0.0271s | 0.0226s |\n| conn_max_max | 0.0263s | 0.0271s | 0.0281s | 0.0263s |\n| conn_max_min | 0.0188s | 0.0147s | 0.0178s | 0.0163s |\n| conn_mean | 0.0123s | 0.0129s | 0.0121s | 0.0119s |\n| conn_mean_95pc | 0.0152s | 0.0145s | 0.0155s | 0.0138s |\n| conn_mean_max | 0.0163s | 0.0147s | 0.0172s | 0.0141s |\n| conn_mean_min | 0.0100s | 0.0093s | 0.0102s | 0.0100s |\n| conn_min | 0.0040s | 0.0044s | 0.0039s | 0.0042s |\n| conn_min_95pc | 0.0044s | 0.0051s | 0.0048s | 0.0047s |\n| conn_min_max | 0.0052s | 0.0059s | 0.0048s | 0.0053s |\n| conn_min_min | 0.0033s | 0.0030s | 0.0020s | 0.0027s |\n| conn_sd | 0.0048s | 0.0049s | 0.0047s | 0.0046s |\n| conn_sd_95pc | 0.0058s | 0.0060s | 0.0061s | 0.0054s |\n| conn_sd_max | 0.0062s | 0.0060s | 0.0063s | 0.0059s |\n| conn_sd_min | 0.0041s | 0.0035s | 0.0035s | 0.0035s |\n| conn_sd_pct | 60.2727s | 58.8182s | 61.4545s | 60.9091s |\n| conn_sd_pct_95pc | 63.0000s | 63.0000s | 66.0000s | 64.0000s |\n| conn_sd_pct_max | 65.0000s | 66.0000s | 66.0000s | 64.0000s |\n| conn_sd_pct_min | 56.0000s | 53.0000s | 59.0000s | 58.0000s |\n| connections | 25.0000 | 50.0000 | 75.0000 | 100.0000 |\n| data_traffic | 1.9500KB | 1.9500KB | 1.9500KB | 1.9500KB |\n| done_req | 1000.0000 | 1000.0000 | 1000.0000 | 1000.0000 |\n| duration | null | null | null | null |\n| errored_req | 0.0000 | 0.0000 | 0.0000 | 0.0000 |\n| failed_req | 0.0000 | 0.0000 | 0.0000 | 0.0000 |\n| first_byte_max | 0.0460s | 0.0466s | 0.0451s | 0.0431s |\n| first_byte_max_95pc | 0.0512s | 0.0537s | 0.0478s | 0.0473s |\n| first_byte_max_max | 0.0528s | 0.0567s | 0.0531s | 0.0476s |\n| first_byte_max_min | 0.0393s | 0.0357s | 0.0388s | 0.0374s |\n| first_byte_mean | 0.0247s | 0.0256s | 0.0244s | 0.0246s |\n| first_byte_mean_95pc | 0.0276s | 0.0274s | 0.0284s | 0.0267s |\n| first_byte_mean_max | 0.0283s | 0.0294s | 0.0287s | 0.0277s |\n| first_byte_mean_min | 0.0218s | 0.0206s | 0.0223s | 0.0223s |\n| first_byte_min | 0.0153s | 0.0164s | 0.0150s | 0.0150s |\n| first_byte_min_95pc | 0.0189s | 0.0187s | 0.0202s | 0.0168s |\n| first_byte_min_max | 0.0209s | 0.0203s | 0.0202s | 0.0186s |\n| first_byte_min_min | 0.0131s | 0.0114s | 0.0126s | 0.0131s |\n| first_byte_sd | 0.0076s | 0.0076s | 0.0073s | 0.0075s |\n| first_byte_sd_95pc | 0.0092s | 0.0089s | 0.0081s | 0.0089s |\n| first_byte_sd_max | 0.0093s | 0.0099s | 0.0085s | 0.0091s |\n| first_byte_sd_min | 0.0060s | 0.0063s | 0.0062s | 0.0062s |\n| first_byte_sd_pct | 71.8182s | 70.7273s | 70.2727s | 68.0000s |\n| first_byte_sd_pct_95pc | 78.0000s | 78.0000s | 75.0000s | 72.0000s |\n| first_byte_sd_pct_max | 79.0000s | 80.0000s | 79.0000s | 73.0000s |\n| first_byte_sd_pct_min | 63.0000s | 62.0000s | 63.0000s | 60.0000s |\n| header_traffic | 202.1500KB | 202.1500KB | 202.1500KB | 202.1500KB |\n| mbs | 45.2209MB/s | 45.2655MB/s | 46.0936MB/s | 48.0945MB/s |\n| mbs_95pc | 48.7600MB/s | 51.4800MB/s | 50.9900MB/s | 54.5900MB/s |\n| mbs_max | 52.6600MB/s | 57.3400MB/s | 52.9300MB/s | 54.6800MB/s |\n| mbs_min | 39.4400MB/s | 36.9200MB/s | 38.8300MB/s | 43.8600MB/s |\n| protocol | h2 | h2 | h2 | h2 |\n| req_max | 0.0295s | 0.0289s | 0.0289s | 0.0290s |\n| req_max_95pc | 0.0335s | 0.0349s | 0.0316s | 0.0334s |\n| req_max_max | 0.0364s | 0.0386s | 0.0356s | 0.0354s |\n| req_max_min | 0.0237s | 0.0201s | 0.0227s | 0.0190s |\n| req_mean | 0.0129s | 0.0133s | 0.0128s | 0.0132s |\n| req_mean_95pc | 0.0145s | 0.0150s | 0.0141s | 0.0147s |\n| req_mean_max | 0.0146s | 0.0156s | 0.0142s | 0.0150s |\n| req_mean_min | 0.0112s | 0.0106s | 0.0111s | 0.0095s |\n| req_min | 0.0023s | 0.0021s | 0.0023s | 0.0025s |\n| req_min_95pc | 0.0027s | 0.0033s | 0.0033s | 0.0034s |\n| req_min_max | 0.0035s | 0.0046s | 0.0037s | 0.0041s |\n| req_min_min | 0.0013s | 0.0009s | 0.0012s | 0.0010s |\n| req_per_sec | 20890.0564 | 20909.9236 | 21292.7100 | 22217.5136 |\n| req_per_sec_95pc | 22522.5200 | 23779.5200 | 23555.4600 | 25216.8700 |\n| req_per_sec_max | 24324.3900 | 26488.6600 | 24449.8800 | 25259.5400 |\n| req_per_sec_min | 18220.2500 | 17057.2800 | 17936.5800 | 20263.0100 |\n| req_s_max | 660.3391 | 619.7400 | 676.9718 | 668.8436 |\n| req_s_max_95pc | 746.0800 | 719.9000 | 769.9000 | 739.4400 |\n| req_s_max_max | 757.2300 | 870.2800 | 786.6800 | 759.5500 |\n| req_s_max_min | 477.2000 | 489.5700 | 492.2300 | 534.6000 |\n| req_s_mean | 428.4645 | 410.6391 | 431.3155 | 427.2082 |\n| req_s_mean_95pc | 469.8900 | 478.3900 | 469.5700 | 467.9100 |\n| req_s_mean_max | 472.8800 | 503.9800 | 475.3000 | 472.0100 |\n| req_s_mean_min | 361.1500 | 351.1200 | 356.9800 | 371.7700 |\n| req_s_min | 211.0136 | 211.3745 | 215.5173 | 224.7973 |\n| req_s_min_95pc | 227.1900 | 241.4600 | 239.7100 | 254.8900 |\n| req_s_min_max | 245.2800 | 268.4600 | 248.4600 | 256.5800 |\n| req_s_min_min | 183.6900 | 171.7200 | 181.3000 | 204.0800 |\n| req_s_sd | 123.5464 | 114.7282 | 123.3373 | 125.6255 |\n| req_s_sd_95pc | 148.5700 | 143.9200 | 147.2000 | 145.7700 |\n| req_s_sd_max | 154.5600 | 175.9400 | 151.4400 | 151.2900 |\n| req_s_sd_min | 75.7700 | 86.0200 | 75.3500 | 92.1700 |\n| req_s_sd_pct | 60.0000 | 60.0000 | 59.7273 | 58.1818 |\n| req_s_sd_pct_95pc | 62.0000 | 63.0000 | 62.0000 | 62.0000 |\n| req_s_sd_pct_max | 66.0000 | 64.0000 | 67.0000 | 64.0000 |\n| req_s_sd_pct_min | 55.0000 | 53.0000 | 54.0000 | 54.0000 |\n| req_sd | 0.0059s | 0.0059s | 0.0058s | 0.0060s |\n| req_sd_95pc | 0.0072s | 0.0069s | 0.0069s | 0.0074s |\n| req_sd_max | 0.0076s | 0.0083s | 0.0070s | 0.0077s |\n| req_sd_min | 0.0042s | 0.0046s | 0.0044s | 0.0040s |\n| req_sd_pct | 68.1909s | 66.7545s | 69.2091s | 66.6091s |\n| req_sd_pct_95pc | 72.3000s | 73.5000s | 71.7000s | 69.2000s |\n| req_sd_pct_max | 75.1000s | 75.0000s | 75.1000s | 70.1000s |\n| req_sd_pct_min | 59.6000s | 60.6000s | 65.2000s | 62.6000s |\n| requests | 1000.0000 | 1000.0000 | 1000.0000 | 1000.0000 |\n| started_req | 1000.0000 | 1000.0000 | 1000.0000 | 1000.0000 |\n| status_2xx | 1000.0000 | 1000.0000 | 1000.0000 | 1000.0000 |\n| status_3xx | 0.0000 | 0.0000 | 0.0000 | 0.0000 |\n| status_4xx | 0.0000 | 0.0000 | 0.0000 | 0.0000 |\n| status_5xx | 0.0000 | 0.0000 | 0.0000 | 0.0000 |\n| succeeded_req | 1000.0000 | 1000.0000 | 1000.0000 | 1000.0000 |\n| tempkey | X25519 | X25519 | X25519 | X25519 |\n| threads | 4.0000 | 4.0000 | 4.0000 | 4.0000 |\n| time | 48.1445 | 48.6009 | 47.3018 | 45.2345 |\n| time_95pc | 52.9100 | 55.5000 | 49.8200 | 49.3200 |\n| time_max | 54.8800 | 58.6300 | 55.7500 | 49.3500 |\n| time_min | 41.1100 | 37.7500 | 40.9000 | 39.5900 |\n| timeout_req | 0.0000 | 0.0000 | 0.0000 | 0.0000 |\n| total_req | 1000.0000 | 1000.0000 | 1000.0000 | 1000.0000 |\n| total_traffic | 2.1600KB | 2.1600KB | 2.1600KB | 2.1600KB |\n| uri | https://domain.com:443 | https://domain.com:443 | https://domain.com:443 | https://domain.com:443 |\n| warm_up_time | null | null | null | null |\n```\n\n| Field | 25% | 50% | 75% | 100% |\n|-------|-----|-----|-----|------|\n| cipher | TLS_AES_256_GCM_SHA384 | TLS_AES_256_GCM_SHA384 | TLS_AES_256_GCM_SHA384 | TLS_AES_256_GCM_SHA384 |\n| conn_max | 0.0215s | 0.0220s | 0.0218s | 0.0208s |\n| conn_max_95pc | 0.0256s | 0.0263s | 0.0271s | 0.0226s |\n| conn_max_max | 0.0263s | 0.0271s | 0.0281s | 0.0263s |\n| conn_max_min | 0.0188s | 0.0147s | 0.0178s | 0.0163s |\n| conn_mean | 0.0123s | 0.0129s | 0.0121s | 0.0119s |\n| conn_mean_95pc | 0.0152s | 0.0145s | 0.0155s | 0.0138s |\n| conn_mean_max | 0.0163s | 0.0147s | 0.0172s | 0.0141s |\n| conn_mean_min | 0.0100s | 0.0093s | 0.0102s | 0.0100s |\n| conn_min | 0.0040s | 0.0044s | 0.0039s | 0.0042s |\n| conn_min_95pc | 0.0044s | 0.0051s | 0.0048s | 0.0047s |\n| conn_min_max | 0.0052s | 0.0059s | 0.0048s | 0.0053s |\n| conn_min_min | 0.0033s | 0.0030s | 0.0020s | 0.0027s |\n| conn_sd | 0.0048s | 0.0049s | 0.0047s | 0.0046s |\n| conn_sd_95pc | 0.0058s | 0.0060s | 0.0061s | 0.0054s |\n| conn_sd_max | 0.0062s | 0.0060s | 0.0063s | 0.0059s |\n| conn_sd_min | 0.0041s | 0.0035s | 0.0035s | 0.0035s |\n| conn_sd_pct | 60.2727s | 58.8182s | 61.4545s | 60.9091s |\n| conn_sd_pct_95pc | 63.0000s | 63.0000s | 66.0000s | 64.0000s |\n| conn_sd_pct_max | 65.0000s | 66.0000s | 66.0000s | 64.0000s |\n| conn_sd_pct_min | 56.0000s | 53.0000s | 59.0000s | 58.0000s |\n| connections | 25.0000 | 50.0000 | 75.0000 | 100.0000 |\n| data_traffic | 1.9500KB | 1.9500KB | 1.9500KB | 1.9500KB |\n| done_req | 1000.0000 | 1000.0000 | 1000.0000 | 1000.0000 |\n| duration | null | null | null | null |\n| errored_req | 0.0000 | 0.0000 | 0.0000 | 0.0000 |\n| failed_req | 0.0000 | 0.0000 | 0.0000 | 0.0000 |\n| first_byte_max | 0.0460s | 0.0466s | 0.0451s | 0.0431s |\n| first_byte_max_95pc | 0.0512s | 0.0537s | 0.0478s | 0.0473s |\n| first_byte_max_max | 0.0528s | 0.0567s | 0.0531s | 0.0476s |\n| first_byte_max_min | 0.0393s | 0.0357s | 0.0388s | 0.0374s |\n| first_byte_mean | 0.0247s | 0.0256s | 0.0244s | 0.0246s |\n| first_byte_mean_95pc | 0.0276s | 0.0274s | 0.0284s | 0.0267s |\n| first_byte_mean_max | 0.0283s | 0.0294s | 0.0287s | 0.0277s |\n| first_byte_mean_min | 0.0218s | 0.0206s | 0.0223s | 0.0223s |\n| first_byte_min | 0.0153s | 0.0164s | 0.0150s | 0.0150s |\n| first_byte_min_95pc | 0.0189s | 0.0187s | 0.0202s | 0.0168s |\n| first_byte_min_max | 0.0209s | 0.0203s | 0.0202s | 0.0186s |\n| first_byte_min_min | 0.0131s | 0.0114s | 0.0126s | 0.0131s |\n| first_byte_sd | 0.0076s | 0.0076s | 0.0073s | 0.0075s |\n| first_byte_sd_95pc | 0.0092s | 0.0089s | 0.0081s | 0.0089s |\n| first_byte_sd_max | 0.0093s | 0.0099s | 0.0085s | 0.0091s |\n| first_byte_sd_min | 0.0060s | 0.0063s | 0.0062s | 0.0062s |\n| first_byte_sd_pct | 71.8182s | 70.7273s | 70.2727s | 68.0000s |\n| first_byte_sd_pct_95pc | 78.0000s | 78.0000s | 75.0000s | 72.0000s |\n| first_byte_sd_pct_max | 79.0000s | 80.0000s | 79.0000s | 73.0000s |\n| first_byte_sd_pct_min | 63.0000s | 62.0000s | 63.0000s | 60.0000s |\n| header_traffic | 202.1500KB | 202.1500KB | 202.1500KB | 202.1500KB |\n| mbs | 45.2209MB/s | 45.2655MB/s | 46.0936MB/s | 48.0945MB/s |\n| mbs_95pc | 48.7600MB/s | 51.4800MB/s | 50.9900MB/s | 54.5900MB/s |\n| mbs_max | 52.6600MB/s | 57.3400MB/s | 52.9300MB/s | 54.6800MB/s |\n| mbs_min | 39.4400MB/s | 36.9200MB/s | 38.8300MB/s | 43.8600MB/s |\n| protocol | h2 | h2 | h2 | h2 |\n| req_max | 0.0295s | 0.0289s | 0.0289s | 0.0290s |\n| req_max_95pc | 0.0335s | 0.0349s | 0.0316s | 0.0334s |\n| req_max_max | 0.0364s | 0.0386s | 0.0356s | 0.0354s |\n| req_max_min | 0.0237s | 0.0201s | 0.0227s | 0.0190s |\n| req_mean | 0.0129s | 0.0133s | 0.0128s | 0.0132s |\n| req_mean_95pc | 0.0145s | 0.0150s | 0.0141s | 0.0147s |\n| req_mean_max | 0.0146s | 0.0156s | 0.0142s | 0.0150s |\n| req_mean_min | 0.0112s | 0.0106s | 0.0111s | 0.0095s |\n| req_min | 0.0023s | 0.0021s | 0.0023s | 0.0025s |\n| req_min_95pc | 0.0027s | 0.0033s | 0.0033s | 0.0034s |\n| req_min_max | 0.0035s | 0.0046s | 0.0037s | 0.0041s |\n| req_min_min | 0.0013s | 0.0009s | 0.0012s | 0.0010s |\n| req_per_sec | 20890.0564 | 20909.9236 | 21292.7100 | 22217.5136 |\n| req_per_sec_95pc | 22522.5200 | 23779.5200 | 23555.4600 | 25216.8700 |\n| req_per_sec_max | 24324.3900 | 26488.6600 | 24449.8800 | 25259.5400 |\n| req_per_sec_min | 18220.2500 | 17057.2800 | 17936.5800 | 20263.0100 |\n| req_s_max | 660.3391 | 619.7400 | 676.9718 | 668.8436 |\n| req_s_max_95pc | 746.0800 | 719.9000 | 769.9000 | 739.4400 |\n| req_s_max_max | 757.2300 | 870.2800 | 786.6800 | 759.5500 |\n| req_s_max_min | 477.2000 | 489.5700 | 492.2300 | 534.6000 |\n| req_s_mean | 428.4645 | 410.6391 | 431.3155 | 427.2082 |\n| req_s_mean_95pc | 469.8900 | 478.3900 | 469.5700 | 467.9100 |\n| req_s_mean_max | 472.8800 | 503.9800 | 475.3000 | 472.0100 |\n| req_s_mean_min | 361.1500 | 351.1200 | 356.9800 | 371.7700 |\n| req_s_min | 211.0136 | 211.3745 | 215.5173 | 224.7973 |\n| req_s_min_95pc | 227.1900 | 241.4600 | 239.7100 | 254.8900 |\n| req_s_min_max | 245.2800 | 268.4600 | 248.4600 | 256.5800 |\n| req_s_min_min | 183.6900 | 171.7200 | 181.3000 | 204.0800 |\n| req_s_sd | 123.5464 | 114.7282 | 123.3373 | 125.6255 |\n| req_s_sd_95pc | 148.5700 | 143.9200 | 147.2000 | 145.7700 |\n| req_s_sd_max | 154.5600 | 175.9400 | 151.4400 | 151.2900 |\n| req_s_sd_min | 75.7700 | 86.0200 | 75.3500 | 92.1700 |\n| req_s_sd_pct | 60.0000 | 60.0000 | 59.7273 | 58.1818 |\n| req_s_sd_pct_95pc | 62.0000 | 63.0000 | 62.0000 | 62.0000 |\n| req_s_sd_pct_max | 66.0000 | 64.0000 | 67.0000 | 64.0000 |\n| req_s_sd_pct_min | 55.0000 | 53.0000 | 54.0000 | 54.0000 |\n| req_sd | 0.0059s | 0.0059s | 0.0058s | 0.0060s |\n| req_sd_95pc | 0.0072s | 0.0069s | 0.0069s | 0.0074s |\n| req_sd_max | 0.0076s | 0.0083s | 0.0070s | 0.0077s |\n| req_sd_min | 0.0042s | 0.0046s | 0.0044s | 0.0040s |\n| req_sd_pct | 68.1909s | 66.7545s | 69.2091s | 66.6091s |\n| req_sd_pct_95pc | 72.3000s | 73.5000s | 71.7000s | 69.2000s |\n| req_sd_pct_max | 75.1000s | 75.0000s | 75.1000s | 70.1000s |\n| req_sd_pct_min | 59.6000s | 60.6000s | 65.2000s | 62.6000s |\n| requests | 1000.0000 | 1000.0000 | 1000.0000 | 1000.0000 |\n| started_req | 1000.0000 | 1000.0000 | 1000.0000 | 1000.0000 |\n| status_2xx | 1000.0000 | 1000.0000 | 1000.0000 | 1000.0000 |\n| status_3xx | 0.0000 | 0.0000 | 0.0000 | 0.0000 |\n| status_4xx | 0.0000 | 0.0000 | 0.0000 | 0.0000 |\n| status_5xx | 0.0000 | 0.0000 | 0.0000 | 0.0000 |\n| succeeded_req | 1000.0000 | 1000.0000 | 1000.0000 | 1000.0000 |\n| tempkey | X25519 | X25519 | X25519 | X25519 |\n| threads | 4.0000 | 4.0000 | 4.0000 | 4.0000 |\n| time | 48.1445 | 48.6009 | 47.3018 | 45.2345 |\n| time_95pc | 52.9100 | 55.5000 | 49.8200 | 49.3200 |\n| time_max | 54.8800 | 58.6300 | 55.7500 | 49.3500 |\n| time_min | 41.1100 | 37.7500 | 40.9000 | 39.5900 |\n| timeout_req | 0.0000 | 0.0000 | 0.0000 | 0.0000 |\n| total_req | 1000.0000 | 1000.0000 | 1000.0000 | 1000.0000 |\n| total_traffic | 2.1600KB | 2.1600KB | 2.1600KB | 2.1600KB |\n| uri | https://domain.com:443 | https://domain.com:443 | https://domain.com:443 | https://domain.com:443 |\n| warm_up_time | null | null | null | null |\n\n## Batch Mode VPS\n\nRun on 2 CPU KVM VPS with 2GB memory, 50GB NVMe disk.\n\n```\nlscpu\nArchitecture:        x86_64\nCPU op-mode(s):      32-bit, 64-bit\nByte Order:          Little Endian\nCPU(s):              2\nOn-line CPU(s) list: 0,1\nThread(s) per core:  1\nCore(s) per socket:  1\nSocket(s):           2\nNUMA node(s):        1\nVendor ID:           GenuineIntel\nBIOS Vendor ID:      Red Hat\nCPU family:          6\nModel:               158\nModel name:          Intel(R) Xeon(R) E-2286G CPU @ 4.00GHz\nBIOS Model name:     RHEL 7.6.0 PC (i440FX + PIIX, 1996)\nStepping:            10\nCPU MHz:             4008.000\nBogoMIPS:            8016.00\nHypervisor vendor:   KVM\nVirtualization type: full\nL1d cache:           32K\nL1i cache:           32K\nL2 cache:            4096K\nL3 cache:            16384K\nNUMA node0 CPU(s):   0,1\nFlags:               fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon rep_good nopl xtopology cpuid tsc_known_freq pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single pti ssbd ibrs ibpb stibp fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 arat md_clear\n```\n\nRun `h2load-bench.sh` wrapper script with h2load with 1 thread `-t 1` to load 1/2 the CPU cores of the VPS.\n\n```\n./h2load-bench.sh -t 1 -c 400 -n 10000 -b -u https://domain.com\n```\n\nor JSON pretty format only:\n\n```\n./h2load-bench.sh -t 1 -c 400 -n 10000 -b -u https://domain.com | grep -oP '{.*}' | jq\n{\n  \"time\": \"1.09s\",\n  \"req_per_sec\": \"9165.04\",\n  \"mbs\": \"17.76MB/s\",\n  \"total_req\": \"10000\",\n  \"started_req\": \"10000\",\n  \"done_req\": \"10000\",\n  \"succeeded_req\": \"10000\",\n  \"failed_req\": \"0\",\n  \"errored_req\": \"0\",\n  \"timeout_req\": \"0\",\n  \"status_2xx\": \"10000\",\n  \"status_3xx\": \"0\",\n  \"status_4xx\": \"0\",\n  \"status_5xx\": \"0\",\n  \"total_traffic\": \"19.37MB\",\n  \"header_traffic\": \"1.96MB\",\n  \"data_traffic\": \"17.23MB\",\n  \"req_min\": \"23.13\",\n  \"req_max\": \"450.53\",\n  \"req_mean\": \"263.59\",\n  \"req_sd\": \"89.85ms\",\n  \"req_sd_pct\": \"66.37%\",\n  \"conn_min\": \"2.44\",\n  \"conn_max\": \"350.00\",\n  \"conn_mean\": \"170.02\",\n  \"conn_sd\": \"115.06ms\",\n  \"conn_sd_pct\": \"62.00%\",\n  \"first_byte_min\": \"225.98\",\n  \"first_byte_max\": \"645.23\",\n  \"first_byte_mean\": \"470.97\",\n  \"first_byte_sd\": \"147.48ms\",\n  \"first_byte_sd_pct\": \"52.00%\",\n  \"req_s_min\": \"91.85\",\n  \"req_s_max\": \"95.19\",\n  \"req_s_mean\": \"92.75\",\n  \"req_s_sd\": \"1.06\",\n  \"req_s_sd_pct\": \"1.06\",\n  \"cipher\": \"TLS_AES_256_GCM_SHA384\",\n  \"tempkey\": \"X25519\",\n  \"protocol\": \"h2\",\n  \"threads\": \"1\",\n  \"connections\": \"100\",\n  \"duration\": \"null\",\n  \"warm_up_time\": \"null\",\n  \"requests\": \"10000\"\n}\n{\n  \"time\": \"1.24s\",\n  \"req_per_sec\": \"8057.98\",\n  \"mbs\": \"15.62MB/s\",\n  \"total_req\": \"10000\",\n  \"started_req\": \"10000\",\n  \"done_req\": \"10000\",\n  \"succeeded_req\": \"10000\",\n  \"failed_req\": \"0\",\n  \"errored_req\": \"0\",\n  \"timeout_req\": \"0\",\n  \"status_2xx\": \"10000\",\n  \"status_3xx\": \"0\",\n  \"status_4xx\": \"0\",\n  \"status_5xx\": \"0\",\n  \"total_traffic\": \"19.38MB\",\n  \"header_traffic\": \"1.96MB\",\n  \"data_traffic\": \"17.23MB\",\n  \"req_min\": \"6.50\",\n  \"req_max\": \"636.99\",\n  \"req_mean\": \"438.00\",\n  \"req_sd\": \"172.99ms\",\n  \"req_sd_pct\": \"61.55%\",\n  \"conn_min\": \"5.62\",\n  \"conn_max\": \"1080\",\n  \"conn_mean\": \"293.98\",\n  \"conn_sd\": \"254.28ms\",\n  \"conn_sd_pct\": \"60.00%\",\n  \"first_byte_min\": \"686.81\",\n  \"first_byte_max\": \"1180\",\n  \"first_byte_mean\": \"906.66\",\n  \"first_byte_sd\": \"121.46ms\",\n  \"first_byte_sd_pct\": \"71.50%\",\n  \"req_s_min\": \"40.52\",\n  \"req_s_max\": \"45.34\",\n  \"req_s_mean\": \"43.31\",\n  \"req_s_sd\": \"1.07\",\n  \"req_s_sd_pct\": \"1.07\",\n  \"cipher\": \"TLS_AES_256_GCM_SHA384\",\n  \"tempkey\": \"X25519\",\n  \"protocol\": \"h2\",\n  \"threads\": \"1\",\n  \"connections\": \"200\",\n  \"duration\": \"null\",\n  \"warm_up_time\": \"null\",\n  \"requests\": \"10000\"\n}\n{\n  \"time\": \"1.17s\",\n  \"req_per_sec\": \"8532.37\",\n  \"mbs\": \"16.54MB/s\",\n  \"total_req\": \"10000\",\n  \"started_req\": \"10000\",\n  \"done_req\": \"10000\",\n  \"succeeded_req\": \"10000\",\n  \"failed_req\": \"0\",\n  \"errored_req\": \"0\",\n  \"timeout_req\": \"0\",\n  \"status_2xx\": \"10000\",\n  \"status_3xx\": \"0\",\n  \"status_4xx\": \"0\",\n  \"status_5xx\": \"0\",\n  \"total_traffic\": \"19.38MB\",\n  \"header_traffic\": \"1.96MB\",\n  \"data_traffic\": \"17.23MB\",\n  \"req_min\": \"11.71\",\n  \"req_max\": \"992.65\",\n  \"req_mean\": \"479.59\",\n  \"req_sd\": \"225.89ms\",\n  \"req_sd_pct\": \"67.71%\",\n  \"conn_min\": \"13.03\",\n  \"conn_max\": \"993.82\",\n  \"conn_mean\": \"345.54\",\n  \"conn_sd\": \"352.23ms\",\n  \"conn_sd_pct\": \"78.00%\",\n  \"first_byte_min\": \"342.87\",\n  \"first_byte_max\": \"1140\",\n  \"first_byte_mean\": \"830.06\",\n  \"first_byte_sd\": \"285.88ms\",\n  \"first_byte_sd_pct\": \"74.67%\",\n  \"req_s_min\": \"28.47\",\n  \"req_s_max\": \"32.22\",\n  \"req_s_mean\": \"29.97\",\n  \"req_s_sd\": \"1.21\",\n  \"req_s_sd_pct\": \"1.21\",\n  \"cipher\": \"TLS_AES_256_GCM_SHA384\",\n  \"tempkey\": \"X25519\",\n  \"protocol\": \"h2\",\n  \"threads\": \"1\",\n  \"connections\": \"300\",\n  \"duration\": \"null\",\n  \"warm_up_time\": \"null\",\n  \"requests\": \"10000\"\n}\n{\n  \"time\": \"1.56s\",\n  \"req_per_sec\": \"6397.04\",\n  \"mbs\": \"12.40MB/s\",\n  \"total_req\": \"10000\",\n  \"started_req\": \"10000\",\n  \"done_req\": \"10000\",\n  \"succeeded_req\": \"10000\",\n  \"failed_req\": \"0\",\n  \"errored_req\": \"0\",\n  \"timeout_req\": \"0\",\n  \"status_2xx\": \"10000\",\n  \"status_3xx\": \"0\",\n  \"status_4xx\": \"0\",\n  \"status_5xx\": \"0\",\n  \"total_traffic\": \"19.39MB\",\n  \"header_traffic\": \"1.96MB\",\n  \"data_traffic\": \"17.23MB\",\n  \"req_min\": \"73.40\",\n  \"req_max\": \"1110\",\n  \"req_mean\": \"582.73\",\n  \"req_sd\": \"306.33ms\",\n  \"req_sd_pct\": \"54.50%\",\n  \"conn_min\": \"15.32\",\n  \"conn_max\": \"1400\",\n  \"conn_mean\": \"623.92\",\n  \"conn_sd\": \"405.47ms\",\n  \"conn_sd_pct\": \"58.50%\",\n  \"first_byte_min\": \"266.48\",\n  \"first_byte_max\": \"1560\",\n  \"first_byte_mean\": \"1300\",\n  \"first_byte_sd\": \"413.59ms\",\n  \"first_byte_sd_pct\": \"86.00%\",\n  \"req_s_min\": \"16.04\",\n  \"req_s_max\": \"93.74\",\n  \"req_s_mean\": \"27.32\",\n  \"req_s_sd\": \"25.37\",\n  \"req_s_sd_pct\": \"25.37\",\n  \"cipher\": \"TLS_AES_256_GCM_SHA384\",\n  \"tempkey\": \"X25519\",\n  \"protocol\": \"h2\",\n  \"threads\": \"1\",\n  \"connections\": \"400\",\n  \"duration\": \"null\",\n  \"warm_up_time\": \"null\",\n  \"requests\": \"10000\"\n}\n```\n\nThen run `h2load-plot.gnuplot` to generate chart `output.png`, `output-avg.png` and `output-max.png`\n\n```\n./h2load-plot.gnuplot\n```\n\n`output.png`\n\n![h2load batch benchmark chart](charts/output.png \"h2load batch benchmark chart\")\n\n`output-avg.png`\n\n![h2load batch benchmark chart - avg response time](charts/output-avg.png \"h2load batch benchmark chart - avg response time\")\n\n`output-max.png`\n\n![h2load batch benchmark chart - max response time](charts/output-max.png \"h2load batch benchmark chart - max response time\")\n\n## Batch Mode Dedicated Server\n\nRun on dedicated server Intel Xeon E-2276G 6 cores / 12 threads with 32GB memory, 2x960GB NVMe raid 1.\n\n```\nlscpu\nArchitecture:        x86_64\nCPU op-mode(s):      32-bit, 64-bit\nByte Order:          Little Endian\nCPU(s):              12\nOn-line CPU(s) list: 0-11\nThread(s) per core:  2\nCore(s) per socket:  6\nSocket(s):           1\nNUMA node(s):        1\nVendor ID:           GenuineIntel\nBIOS Vendor ID:      Intel(R) Corporation\nCPU family:          6\nModel:               158\nModel name:          Intel(R) Xeon(R) E-2276G CPU @ 3.80GHz\nBIOS Model name:     Intel(R) Xeon(R) E-2276G CPU @ 3.80GHz\nStepping:            10\nCPU MHz:             3800.000\nCPU max MHz:         4900.0000\nCPU min MHz:         800.0000\nBogoMIPS:            7584.00\nVirtualization:      VT-x\nL1d cache:           32K\nL1i cache:           32K\nL2 cache:            256K\nL3 cache:            12288K\nNUMA node0 CPU(s):   0-11\nFlags:               fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb invpcid_single pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx rdseed adx smap clflushopt intel_pt xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp md_clear flush_l1d arch_capabilities\n```\n\nRun `h2load-bench.sh` wrapper script with h2load with 3 thread `-t 3` to load only 1/2 the physical CPU cores on dedicated.\n\n```\n./h2load-bench.sh -t 3 -c 400 -n 10000 -b -u https://domain.com\n```\n\nOr JSON pretty format only:\n\n```\n./h2load-bench.sh -t 3 -c 400 -n 10000 -b -u https://domain.com | grep -oP '{.*}' | jq\n{\n  \"time\": \"232.01ms\",\n  \"req_per_sec\": \"43100.85\",\n  \"mbs\": \"93.12MB/s\",\n  \"total_req\": \"10000\",\n  \"started_req\": \"10000\",\n  \"done_req\": \"10000\",\n  \"succeeded_req\": \"10000\",\n  \"failed_req\": \"0\",\n  \"errored_req\": \"0\",\n  \"timeout_req\": \"0\",\n  \"status_2xx\": \"10000\",\n  \"status_3xx\": \"0\",\n  \"status_4xx\": \"0\",\n  \"status_5xx\": \"0\",\n  \"total_traffic\": \"21.61MB\",\n  \"header_traffic\": \"1.97MB\",\n  \"data_traffic\": \"19.45MB\",\n  \"req_min\": \"0.26\",\n  \"req_max\": \"101.58\",\n  \"req_mean\": \"49.10\",\n  \"req_sd\": \"21.76ms\",\n  \"req_sd_pct\": \"61.35%\",\n  \"conn_min\": \"3.41\",\n  \"conn_max\": \"57.55\",\n  \"conn_mean\": \"13.98\",\n  \"conn_sd\": \"8.60ms\",\n  \"conn_sd_pct\": \"86.00%\",\n  \"first_byte_min\": \"18.64\",\n  \"first_byte_max\": \"127.35\",\n  \"first_byte_mean\": \"47.10\",\n  \"first_byte_sd\": \"22.96ms\",\n  \"first_byte_sd_pct\": \"63.00%\",\n  \"req_s_min\": \"424.95\",\n  \"req_s_max\": \"1345.96\",\n  \"req_s_mean\": \"563.78\",\n  \"req_s_sd\": \"225.18\",\n  \"req_s_sd_pct\": \"225.18\",\n  \"cipher\": \"TLS_AES_256_GCM_SHA384\",\n  \"tempkey\": \"X25519\",\n  \"protocol\": \"h2\",\n  \"threads\": \"3\",\n  \"connections\": \"100\",\n  \"duration\": \"null\",\n  \"warm_up_time\": \"null\",\n  \"requests\": \"10000\"\n}\n{\n  \"time\": \"221.05ms\",\n  \"req_per_sec\": \"45238.43\",\n  \"mbs\": \"97.76MB/s\",\n  \"total_req\": \"10000\",\n  \"started_req\": \"10000\",\n  \"done_req\": \"10000\",\n  \"succeeded_req\": \"10000\",\n  \"failed_req\": \"0\",\n  \"errored_req\": \"0\",\n  \"timeout_req\": \"0\",\n  \"status_2xx\": \"10000\",\n  \"status_3xx\": \"0\",\n  \"status_4xx\": \"0\",\n  \"status_5xx\": \"0\",\n  \"total_traffic\": \"21.61MB\",\n  \"header_traffic\": \"1.97MB\",\n  \"data_traffic\": \"19.45MB\",\n  \"req_min\": \"0.503\",\n  \"req_max\": \"138.31\",\n  \"req_mean\": \"65.04\",\n  \"req_sd\": \"28.23ms\",\n  \"req_sd_pct\": \"61.28%\",\n  \"conn_min\": \"3.90\",\n  \"conn_max\": \"132.27\",\n  \"conn_mean\": \"26.85\",\n  \"conn_sd\": \"18.40ms\",\n  \"conn_sd_pct\": \"92.50%\",\n  \"first_byte_min\": \"35.87\",\n  \"first_byte_max\": \"197.16\",\n  \"first_byte_mean\": \"82.18\",\n  \"first_byte_sd\": \"37.62ms\",\n  \"first_byte_sd_pct\": \"63.50%\",\n  \"req_s_min\": \"226.51\",\n  \"req_s_max\": \"1043.53\",\n  \"req_s_mean\": \"319.90\",\n  \"req_s_sd\": \"92.43\",\n  \"req_s_sd_pct\": \"92.43\",\n  \"cipher\": \"TLS_AES_256_GCM_SHA384\",\n  \"tempkey\": \"X25519\",\n  \"protocol\": \"h2\",\n  \"threads\": \"3\",\n  \"connections\": \"200\",\n  \"duration\": \"null\",\n  \"warm_up_time\": \"null\",\n  \"requests\": \"10000\"\n}\n{\n  \"time\": \"238.45ms\",\n  \"req_per_sec\": \"41937.86\",\n  \"mbs\": \"90.65MB/s\",\n  \"total_req\": \"10000\",\n  \"started_req\": \"10000\",\n  \"done_req\": \"10000\",\n  \"succeeded_req\": \"10000\",\n  \"failed_req\": \"0\",\n  \"errored_req\": \"0\",\n  \"timeout_req\": \"0\",\n  \"status_2xx\": \"10000\",\n  \"status_3xx\": \"0\",\n  \"status_4xx\": \"0\",\n  \"status_5xx\": \"0\",\n  \"total_traffic\": \"21.61MB\",\n  \"header_traffic\": \"1.97MB\",\n  \"data_traffic\": \"19.45MB\",\n  \"req_min\": \"0.577\",\n  \"req_max\": \"116.77\",\n  \"req_mean\": \"53.87\",\n  \"req_sd\": \"21.94ms\",\n  \"req_sd_pct\": \"63.34%\",\n  \"conn_min\": \"20.56\",\n  \"conn_max\": \"165.39\",\n  \"conn_mean\": \"73.63\",\n  \"conn_sd\": \"43.30ms\",\n  \"conn_sd_pct\": \"61.67%\",\n  \"first_byte_min\": \"58.70\",\n  \"first_byte_max\": \"220.93\",\n  \"first_byte_mean\": \"126.92\",\n  \"first_byte_sd\": \"47.64ms\",\n  \"first_byte_sd_pct\": \"57.67%\",\n  \"req_s_min\": \"140.89\",\n  \"req_s_max\": \"275.23\",\n  \"req_s_mean\": \"193.71\",\n  \"req_s_sd\": \"34.96\",\n  \"req_s_sd_pct\": \"34.96\",\n  \"cipher\": \"TLS_AES_256_GCM_SHA384\",\n  \"tempkey\": \"X25519\",\n  \"protocol\": \"h2\",\n  \"threads\": \"3\",\n  \"connections\": \"300\",\n  \"duration\": \"null\",\n  \"warm_up_time\": \"null\",\n  \"requests\": \"10000\"\n}\n{\n  \"time\": \"253.56ms\",\n  \"req_per_sec\": \"39439.02\",\n  \"mbs\": \"85.26MB/s\",\n  \"total_req\": \"10000\",\n  \"started_req\": \"10000\",\n  \"done_req\": \"10000\",\n  \"succeeded_req\": \"10000\",\n  \"failed_req\": \"0\",\n  \"errored_req\": \"0\",\n  \"timeout_req\": \"0\",\n  \"status_2xx\": \"10000\",\n  \"status_3xx\": \"0\",\n  \"status_4xx\": \"0\",\n  \"status_5xx\": \"0\",\n  \"total_traffic\": \"21.62MB\",\n  \"header_traffic\": \"1.97MB\",\n  \"data_traffic\": \"19.45MB\",\n  \"req_min\": \"12.21\",\n  \"req_max\": \"118.32\",\n  \"req_mean\": \"53.53\",\n  \"req_sd\": \"22.87ms\",\n  \"req_sd_pct\": \"70.19%\",\n  \"conn_min\": \"15.00\",\n  \"conn_max\": \"166.24\",\n  \"conn_mean\": \"76.29\",\n  \"conn_sd\": \"39.52ms\",\n  \"conn_sd_pct\": \"59.25%\",\n  \"first_byte_min\": \"57.12\",\n  \"first_byte_max\": \"250.64\",\n  \"first_byte_mean\": \"129.16\",\n  \"first_byte_sd\": \"52.36ms\",\n  \"first_byte_sd_pct\": \"55.50%\",\n  \"req_s_min\": \"99.58\",\n  \"req_s_max\": \"435.06\",\n  \"req_s_mean\": \"226.64\",\n  \"req_s_sd\": \"97.16\",\n  \"req_s_sd_pct\": \"97.16\",\n  \"cipher\": \"TLS_AES_256_GCM_SHA384\",\n  \"tempkey\": \"X25519\",\n  \"protocol\": \"h2\",\n  \"threads\": \"3\",\n  \"connections\": \"400\",\n  \"duration\": \"null\",\n  \"warm_up_time\": \"null\",\n  \"requests\": \"10000\"\n}\n```\n\nThen run `h2load-plot.gnuplot` to generate chart `output.png`, `output-avg.png` and `output-max.png`\n\n```\n./h2load-plot.gnuplot\n```\n\n`output.png`\n\n![h2load batch benchmark chart](charts/dedicated/1t-output.png \"h2load batch benchmark chart\")\n\n`output-avg.png`\n\n![h2load batch benchmark chart - avg response time](charts/dedicated/1t-output-avg.png \"h2load batch benchmark chart - avg response time\")\n\n`output-max.png`\n\n![h2load batch benchmark chart - max response time](charts/dedicated/1t-output-max.png \"h2load batch benchmark chart - max response time\")\n\n# Comparison Charts\n\nYou can take 2 separate `-b` batch mode runs, renaming the 1st runs' `output.csv` and `output2.csv` files to `1t-output.csv` and `1t-output2.csv` and then edit the labels/legends and run `h2load-plot-vps-vs-dedicated.gnuplot` script to compare 2 runs. Below is comparing above [VPS benchmarks](#batch-mode-vps) and [Dedicated server benchmarks](#batch-mode-dedicated-server) runs with dedicated csv files renamed.\n\n`compared-output.png`\n\n![h2load batch benchmark comparison VPS vs Dedicated chart](charts/compared-output.png \"h2load batch benchmark comparison VPS vs Dedicated chart\")\n\n`compared-output-avg.png`\n\n![h2load batch benchmark comparison VPS vs Dedicated chart - avg response time](charts/compared-output-avg.png \"h2load batch benchmark comparison VPS vs Dedicated chart - avg response time\")\n\n`compared-output-max.png`\n\n![h2load batch benchmark comparison VPS vs Dedicated chart - max response time](charts/compared-output-max.png \"h2load batch benchmark comparison VPS vs Dedicated chart - max response time\")\n\n# psrecord\n\n`h2load-bench.sh` added `psrecord` support for local h2load benchmarks tested on local Nginx server to measure local Nginx server's resource usage.\n\n```\n./h2load-bench.sh -t 1 -c 400 -n 10000 -b -u https://domain.com \nstart psrecord ...\npsrecord 3564252 --include-children --interval 0.1 --log psrecord-logs/psrecord-nginx-20230521114310.log --plot psrecord-logs/psrecord-nginx-20230521114310.png \u0026\n\nAttaching to process 3564252\n{      \"time\": \"170.24ms\", \"req_per_sec\": \"58740.60\", \"mbs\": \"129.38MB/s\",      \"total_req\": \"10000\", \"started_req\": \"10000\", \"done_req\": \"10000\", \"succeeded_req\": \"10000\", \"failed_req\": \"0\", \"errored_req\": \"0\", \"timeout_req\": \"0\",      \"status_2xx\": \"10000\", \"status_3xx\": \"0\", \"status_4xx\": \"0\", \"status_5xx\": \"0\",      \"total_traffic\": \"22.03MB\", \"header_traffic\": \"2.16MB\", \"data_traffic\": \"19.69MB\",      \"req_min\": \"5.22\", \"req_max\": \"51.09\", \"req_mean\": \"35.32\", \"req_sd\": \"8.13ms\", \"req_sd_pct\": \"74.98%\",      \"conn_min\": \"6.81\", \"conn_max\": \"64.34\", \"conn_mean\": \"29.51\", \"conn_sd\": \"17.93ms\", \"conn_sd_pct\": \"62.00%\",      \"first_byte_min\": \"29.40\", \"first_byte_max\": \"105.12\", \"first_byte_mean\": \"63.14\", \"first_byte_sd\": \"25.27ms\", \"first_byte_sd_pct\": \"52.00%\",      \"req_s_min\": \"596.64\", \"req_s_max\": \"677.11\", \"req_s_mean\": \"631.38\", \"req_s_sd\": \"29.86\", \"req_s_sd_pct\": \"29.86\",      \"cipher\": \"TLS_AES_256_GCM_SHA384\", \"tempkey\": \"X25519\", \"protocol\": \"h2\",      \"threads\": \"1\", \"connections\": \"100\", \"duration\": \"null\", \"warm_up_time\": \"null\", \"requests\": \"10000\",      \"udp_sent\": \"\", \"udp_received\": \"\"    }\n{      \"time\": \"211.74ms\", \"req_per_sec\": \"47227.29\", \"mbs\": \"104.04MB/s\",      \"total_req\": \"10000\", \"started_req\": \"10000\", \"done_req\": \"10000\", \"succeeded_req\": \"10000\", \"failed_req\": \"0\", \"errored_req\": \"0\", \"timeout_req\": \"0\",      \"status_2xx\": \"10000\", \"status_3xx\": \"0\", \"status_4xx\": \"0\", \"status_5xx\": \"0\",      \"total_traffic\": \"22.03MB\", \"header_traffic\": \"2.16MB\", \"data_traffic\": \"19.69MB\",      \"req_min\": \"5.11\", \"req_max\": \"78.21\", \"req_mean\": \"66.30\", \"req_sd\": \"13.61ms\", \"req_sd_pct\": \"83.58%\",      \"conn_min\": \"18.68\", \"conn_max\": \"159.25\", \"conn_mean\": \"61.02\", \"conn_sd\": \"29.70ms\", \"conn_sd_pct\": \"63.50%\",      \"first_byte_min\": \"94.24\", \"first_byte_max\": \"199.47\", \"first_byte_mean\": \"134.58\", \"first_byte_sd\": \"25.41ms\", \"first_byte_sd_pct\": \"59.00%\",      \"req_s_min\": \"240.43\", \"req_s_max\": \"301.18\", \"req_s_mean\": \"266.97\", \"req_s_sd\": \"18.27\", \"req_s_sd_pct\": \"18.27\",      \"cipher\": \"TLS_AES_256_GCM_SHA384\", \"tempkey\": \"X25519\", \"protocol\": \"h2\",      \"threads\": \"1\", \"connections\": \"200\", \"duration\": \"null\", \"warm_up_time\": \"null\", \"requests\": \"10000\",      \"udp_sent\": \"\", \"udp_received\": \"\"    }\n{      \"time\": \"300.75ms\", \"req_per_sec\": \"33249.88\", \"mbs\": \"73.26MB/s\",      \"total_req\": \"10000\", \"started_req\": \"10000\", \"done_req\": \"10000\", \"succeeded_req\": \"10000\", \"failed_req\": \"0\", \"errored_req\": \"0\", \"timeout_req\": \"0\",      \"status_2xx\": \"10000\", \"status_3xx\": \"0\", \"status_4xx\": \"0\", \"status_5xx\": \"0\",      \"total_traffic\": \"22.03MB\", \"header_traffic\": \"2.16MB\", \"data_traffic\": \"19.69MB\",      \"req_min\": \"8.57\", \"req_max\": \"122.04\", \"req_mean\": \"72.03\", \"req_sd\": \"11.99ms\", \"req_sd_pct\": \"85.09%\",      \"conn_min\": \"43.41\", \"conn_max\": \"231.16\", \"conn_mean\": \"132.76\", \"conn_sd\": \"58.89ms\", \"conn_sd_pct\": \"53.67%\",      \"first_byte_min\": \"126.02\", \"first_byte_max\": \"286.02\", \"first_byte_mean\": \"205.04\", \"first_byte_sd\": \"54.10ms\", \"first_byte_sd_pct\": \"50.00%\",      \"req_s_min\": \"111.92\", \"req_s_max\": \"139.40\", \"req_s_mean\": \"127.15\", \"req_s_sd\": \"10.68\", \"req_s_sd_pct\": \"10.68\",      \"cipher\": \"TLS_AES_256_GCM_SHA384\", \"tempkey\": \"X25519\", \"protocol\": \"h2\",      \"threads\": \"1\", \"connections\": \"300\", \"duration\": \"null\", \"warm_up_time\": \"null\", \"requests\": \"10000\",      \"udp_sent\": \"\", \"udp_received\": \"\"    }\n{      \"time\": \"315.84ms\", \"req_per_sec\": \"31661.40\", \"mbs\": \"69.78MB/s\",      \"total_req\": \"10000\", \"started_req\": \"10000\", \"done_req\": \"10000\", \"succeeded_req\": \"10000\", \"failed_req\": \"0\", \"errored_req\": \"0\", \"timeout_req\": \"0\",      \"status_2xx\": \"10000\", \"status_3xx\": \"0\", \"status_4xx\": \"0\", \"status_5xx\": \"0\",      \"total_traffic\": \"22.04MB\", \"header_traffic\": \"2.16MB\", \"data_traffic\": \"19.69MB\",      \"req_min\": \"47.70\", \"req_max\": \"112.60\", \"req_mean\": \"85.23\", \"req_sd\": \"16.97ms\", \"req_sd_pct\": \"70.88%\",      \"conn_min\": \"41.94\", \"conn_max\": \"198.02\", \"conn_mean\": \"135.69\", \"conn_sd\": \"42.08ms\", \"conn_sd_pct\": \"73.75%\",      \"first_byte_min\": \"91.62\", \"first_byte_max\": \"307.91\", \"first_byte_mean\": \"220.61\", \"first_byte_sd\": \"55.90ms\", \"first_byte_sd_pct\": \"73.75%\",      \"req_s_min\": \"80.96\", \"req_s_max\": \"271.85\", \"req_s_mean\": \"124.96\", \"req_s_sd\": \"49.27\", \"req_s_sd_pct\": \"49.27\",      \"cipher\": \"TLS_AES_256_GCM_SHA384\", \"tempkey\": \"X25519\", \"protocol\": \"h2\",      \"threads\": \"1\", \"connections\": \"400\", \"duration\": \"null\", \"warm_up_time\": \"null\", \"requests\": \"10000\",      \"udp_sent\": \"\", \"udp_received\": \"\"    }\n\nh2load benchmark JSON results: h2load-logs/h2load-stats-20230521114310.json\n\n\n##################################################################\nparsing \u0026 converting nginx psrecord data...\nwaiting for psrecord to close its log...\ncsv log: psrecord-logs/psrecord-nginx-20230521114310.csv\njson log: psrecord-logs/psrecord-nginx-20230521114310.json\nend psrecord\n```\n\nThe h2load benchmark results in JSON format\n\n```\ncat h2load-logs/h2load-stats-20230521114310.json | jq -r\n{\n  \"time\": \"170.24ms\",\n  \"req_per_sec\": \"58740.60\",\n  \"mbs\": \"129.38MB/s\",\n  \"total_req\": \"10000\",\n  \"started_req\": \"10000\",\n  \"done_req\": \"10000\",\n  \"succeeded_req\": \"10000\",\n  \"failed_req\": \"0\",\n  \"errored_req\": \"0\",\n  \"timeout_req\": \"0\",\n  \"status_2xx\": \"10000\",\n  \"status_3xx\": \"0\",\n  \"status_4xx\": \"0\",\n  \"status_5xx\": \"0\",\n  \"total_traffic\": \"22.03MB\",\n  \"header_traffic\": \"2.16MB\",\n  \"data_traffic\": \"19.69MB\",\n  \"req_min\": \"5.22\",\n  \"req_max\": \"51.09\",\n  \"req_mean\": \"35.32\",\n  \"req_sd\": \"8.13ms\",\n  \"req_sd_pct\": \"74.98%\",\n  \"conn_min\": \"6.81\",\n  \"conn_max\": \"64.34\",\n  \"conn_mean\": \"29.51\",\n  \"conn_sd\": \"17.93ms\",\n  \"conn_sd_pct\": \"62.00%\",\n  \"first_byte_min\": \"29.40\",\n  \"first_byte_max\": \"105.12\",\n  \"first_byte_mean\": \"63.14\",\n  \"first_byte_sd\": \"25.27ms\",\n  \"first_byte_sd_pct\": \"52.00%\",\n  \"req_s_min\": \"596.64\",\n  \"req_s_max\": \"677.11\",\n  \"req_s_mean\": \"631.38\",\n  \"req_s_sd\": \"29.86\",\n  \"req_s_sd_pct\": \"29.86\",\n  \"cipher\": \"TLS_AES_256_GCM_SHA384\",\n  \"tempkey\": \"X25519\",\n  \"protocol\": \"h2\",\n  \"threads\": \"1\",\n  \"connections\": \"100\",\n  \"duration\": \"null\",\n  \"warm_up_time\": \"null\",\n  \"requests\": \"10000\",\n  \"udp_sent\": \"\",\n  \"udp_received\": \"\"\n}\n{\n  \"time\": \"211.74ms\",\n  \"req_per_sec\": \"47227.29\",\n  \"mbs\": \"104.04MB/s\",\n  \"total_req\": \"10000\",\n  \"started_req\": \"10000\",\n  \"done_req\": \"10000\",\n  \"succeeded_req\": \"10000\",\n  \"failed_req\": \"0\",\n  \"errored_req\": \"0\",\n  \"timeout_req\": \"0\",\n  \"status_2xx\": \"10000\",\n  \"status_3xx\": \"0\",\n  \"status_4xx\": \"0\",\n  \"status_5xx\": \"0\",\n  \"total_traffic\": \"22.03MB\",\n  \"header_traffic\": \"2.16MB\",\n  \"data_traffic\": \"19.69MB\",\n  \"req_min\": \"5.11\",\n  \"req_max\": \"78.21\",\n  \"req_mean\": \"66.30\",\n  \"req_sd\": \"13.61ms\",\n  \"req_sd_pct\": \"83.58%\",\n  \"conn_min\": \"18.68\",\n  \"conn_max\": \"159.25\",\n  \"conn_mean\": \"61.02\",\n  \"conn_sd\": \"29.70ms\",\n  \"conn_sd_pct\": \"63.50%\",\n  \"first_byte_min\": \"94.24\",\n  \"first_byte_max\": \"199.47\",\n  \"first_byte_mean\": \"134.58\",\n  \"first_byte_sd\": \"25.41ms\",\n  \"first_byte_sd_pct\": \"59.00%\",\n  \"req_s_min\": \"240.43\",\n  \"req_s_max\": \"301.18\",\n  \"req_s_mean\": \"266.97\",\n  \"req_s_sd\": \"18.27\",\n  \"req_s_sd_pct\": \"18.27\",\n  \"cipher\": \"TLS_AES_256_GCM_SHA384\",\n  \"tempkey\": \"X25519\",\n  \"protocol\": \"h2\",\n  \"threads\": \"1\",\n  \"connections\": \"200\",\n  \"duration\": \"null\",\n  \"warm_up_time\": \"null\",\n  \"requests\": \"10000\",\n  \"udp_sent\": \"\",\n  \"udp_received\": \"\"\n}\n{\n  \"time\": \"300.75ms\",\n  \"req_per_sec\": \"33249.88\",\n  \"mbs\": \"73.26MB/s\",\n  \"total_req\": \"10000\",\n  \"started_req\": \"10000\",\n  \"done_req\": \"10000\",\n  \"succeeded_req\": \"10000\",\n  \"failed_req\": \"0\",\n  \"errored_req\": \"0\",\n  \"timeout_req\": \"0\",\n  \"status_2xx\": \"10000\",\n  \"status_3xx\": \"0\",\n  \"status_4xx\": \"0\",\n  \"status_5xx\": \"0\",\n  \"total_traffic\": \"22.03MB\",\n  \"header_traffic\": \"2.16MB\",\n  \"data_traffic\": \"19.69MB\",\n  \"req_min\": \"8.57\",\n  \"req_max\": \"122.04\",\n  \"req_mean\": \"72.03\",\n  \"req_sd\": \"11.99ms\",\n  \"req_sd_pct\": \"85.09%\",\n  \"conn_min\": \"43.41\",\n  \"conn_max\": \"231.16\",\n  \"conn_mean\": \"132.76\",\n  \"conn_sd\": \"58.89ms\",\n  \"conn_sd_pct\": \"53.67%\",\n  \"first_byte_min\": \"126.02\",\n  \"first_byte_max\": \"286.02\",\n  \"first_byte_mean\": \"205.04\",\n  \"first_byte_sd\": \"54.10ms\",\n  \"first_byte_sd_pct\": \"50.00%\",\n  \"req_s_min\": \"111.92\",\n  \"req_s_max\": \"139.40\",\n  \"req_s_mean\": \"127.15\",\n  \"req_s_sd\": \"10.68\",\n  \"req_s_sd_pct\": \"10.68\",\n  \"cipher\": \"TLS_AES_256_GCM_SHA384\",\n  \"tempkey\": \"X25519\",\n  \"protocol\": \"h2\",\n  \"threads\": \"1\",\n  \"connections\": \"300\",\n  \"duration\": \"null\",\n  \"warm_up_time\": \"null\",\n  \"requests\": \"10000\",\n  \"udp_sent\": \"\",\n  \"udp_received\": \"\"\n}\n{\n  \"time\": \"315.84ms\",\n  \"req_per_sec\": \"31661.40\",\n  \"mbs\": \"69.78MB/s\",\n  \"total_req\": \"10000\",\n  \"started_req\": \"10000\",\n  \"done_req\": \"10000\",\n  \"succeeded_req\": \"10000\",\n  \"failed_req\": \"0\",\n  \"errored_req\": \"0\",\n  \"timeout_req\": \"0\",\n  \"status_2xx\": \"10000\",\n  \"status_3xx\": \"0\",\n  \"status_4xx\": \"0\",\n  \"status_5xx\": \"0\",\n  \"total_traffic\": \"22.04MB\",\n  \"header_traffic\": \"2.16MB\",\n  \"data_traffic\": \"19.69MB\",\n  \"req_min\": \"47.70\",\n  \"req_max\": \"112.60\",\n  \"req_mean\": \"85.23\",\n  \"req_sd\": \"16.97ms\",\n  \"req_sd_pct\": \"70.88%\",\n  \"conn_min\": \"41.94\",\n  \"conn_max\": \"198.02\",\n  \"conn_mean\": \"135.69\",\n  \"conn_sd\": \"42.08ms\",\n  \"conn_sd_pct\": \"73.75%\",\n  \"first_byte_min\": \"91.62\",\n  \"first_byte_max\": \"307.91\",\n  \"first_byte_mean\": \"220.61\",\n  \"first_byte_sd\": \"55.90ms\",\n  \"first_byte_sd_pct\": \"73.75%\",\n  \"req_s_min\": \"80.96\",\n  \"req_s_max\": \"271.85\",\n  \"req_s_mean\": \"124.96\",\n  \"req_s_sd\": \"49.27\",\n  \"req_s_sd_pct\": \"49.27\",\n  \"cipher\": \"TLS_AES_256_GCM_SHA384\",\n  \"tempkey\": \"X25519\",\n  \"protocol\": \"h2\",\n  \"threads\": \"1\",\n  \"connections\": \"400\",\n  \"duration\": \"null\",\n  \"warm_up_time\": \"null\",\n  \"requests\": \"10000\",\n  \"udp_sent\": \"\",\n  \"udp_received\": \"\"\n}\n```\n\n`psrecord` Nginx resource usage during h2load benchmark run\n\nin CSV format with `psrecord-logs/psrecord-nginx-20230521114310.csv` contents\n\n```csv\n\"0.000\",\"0.000\",\"1039.738\",\"2724.336\"\n\"0.107\",\"152.100\",\"1037.492\",\"2724.336\"\n\"0.212\",\"92.600\",\"1039.648\",\"2724.336\"\n\"0.320\",\"196.500\",\"1040.145\",\"2724.336\"\n\"0.427\",\"47.600\",\"1040.172\",\"2724.336\"\n\"0.532\",\"104.900\",\"1042.602\",\"2724.336\"\n\"0.637\",\"156.400\",\"1043.008\",\"2724.336\"\n\"0.745\",\"85.500\",\"1043.266\",\"2724.336\"\n\"0.850\",\"47.100\",\"1045.270\",\"2724.336\"\n\"0.956\",\"162.000\",\"1052.086\",\"2730.336\"\n\"1.061\",\"95.400\",\"1053.367\",\"2730.336\"\n```\n\nin JSON format with `psrecord-logs/psrecord-nginx-20230521114310.json` contents\n\n```json\n[\n  {\n    \"time\": \"0.000\",\n    \"cpuload\": \"0.000\",\n    \"realmem\": \"1039.738\",\n    \"virtualmem\": \"2724.336\"\n  },\n  {\n    \"time\": \"0.107\",\n    \"cpuload\": \"152.100\",\n    \"realmem\": \"1037.492\",\n    \"virtualmem\": \"2724.336\"\n  },\n  {\n    \"time\": \"0.212\",\n    \"cpuload\": \"92.600\",\n    \"realmem\": \"1039.648\",\n    \"virtualmem\": \"2724.336\"\n  },\n  {\n    \"time\": \"0.320\",\n    \"cpuload\": \"196.500\",\n    \"realmem\": \"1040.145\",\n    \"virtualmem\": \"2724.336\"\n  },\n  {\n    \"time\": \"0.427\",\n    \"cpuload\": \"47.600\",\n    \"realmem\": \"1040.172\",\n    \"virtualmem\": \"2724.336\"\n  },\n  {\n    \"time\": \"0.532\",\n    \"cpuload\": \"104.900\",\n    \"realmem\": \"1042.602\",\n    \"virtualmem\": \"2724.336\"\n  },\n  {\n    \"time\": \"0.637\",\n    \"cpuload\": \"156.400\",\n    \"realmem\": \"1043.008\",\n    \"virtualmem\": \"2724.336\"\n  },\n  {\n    \"time\": \"0.745\",\n    \"cpuload\": \"85.500\",\n    \"realmem\": \"1043.266\",\n    \"virtualmem\": \"2724.336\"\n  },\n  {\n    \"time\": \"0.850\",\n    \"cpuload\": \"47.100\",\n    \"realmem\": \"1045.270\",\n    \"virtualmem\": \"2724.336\"\n  },\n  {\n    \"time\": \"0.956\",\n    \"cpuload\": \"162.000\",\n    \"realmem\": \"1052.086\",\n    \"virtualmem\": \"2730.336\"\n  },\n  {\n    \"time\": \"1.061\",\n    \"cpuload\": \"95.400\",\n    \"realmem\": \"1053.367\",\n    \"virtualmem\": \"2730.336\"\n  }\n]\n```\n\npsrecord charted Nginx CPU and Memory usage\n\n![psrecord charted Nginx CPU/Memory usage](charts/psrecord/psrecord-20230521114310.png \"psrecord charted Nginx CPU/Memory usage\")","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcentminmod%2Fh2load-benchmarks","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcentminmod%2Fh2load-benchmarks","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcentminmod%2Fh2load-benchmarks/lists"}