On Ubuntu 18.04 you can get it as part of the nghttp2-client package, which uses version 1.30.0. For that, a simple
sudo apt-get install nghttp2-client will work. If you want to use a more recent release, it isn’t hard to build from source.
Here is a simple script for building nghttp2 with h2load:
sudo apt-get update sudo apt-get install g++ make binutils autoconf automake \ autotools-dev libtool pkg-config zlib1g-dev \ libcunit1-dev libssl-dev libxml2-dev \ libev-dev libevent-dev libjansson-dev libc-ares-dev \ libjemalloc-dev cython python3-dev python-setuptools \ libjemalloc-dev libspdylay-dev git clone https://github.com/nghttp2/nghttp2.git && cd nghttp2 autoreconf -i && automake && autoconf ./configure --enable-app make make install
Running a test based on number of requests, similar to how ab works, is simple:
h2load -n100000 -c100 -m10 https://wordpress.com/ starting benchmark... spawning thread #0: 100 total client(s). 100000 total requests TLS Protocol: TLSv1.2 Cipher: ECDHE-RSA-CHACHA20-POLY1305 Server Temp Key: X25519 253 bits Application protocol: h2 progress: 10% done progress: 20% done progress: 30% done progress: 40% done progress: 50% done progress: 60% done progress: 70% done progress: 80% done progress: 90% done progress: 100% done finished in 23.23s, 4303.95 req/s, 576.06MB/s requests: 100000 total, 100000 started, 100000 done, 100000 succeeded, 0 failed, 0 errored, 0 timeout status codes: 100000 2xx, 0 3xx, 0 4xx, 0 5xx traffic: 13.07GB (14034680653) total, 13.54MB (14202199) headers (space savings 85.79%), 13.04GB (14002549632) data min max mean sd +/- sd time for request: 11.73ms 1.96s 195.00ms 135.61ms 79.09% time for connect: 34.41ms 67.43ms 56.84ms 8.35ms 72.00% time to 1st byte: 57.60ms 578.96ms 167.02ms 107.88ms 82.00% req/s : 43.05 97.70 52.28 9.13 85.00%
Another option is to test for a length of time:
h2load -c100 -m100 --duration=10 --warm-up-time=3 https://wordpress.com/
That runs a 10 second test, with a warm up period of 3 seconds.