转载

tcpkali - 一个针对 TCP 和 WebSocket 服务器的高性能负载生成工具

tcpkali is a high performance load generator against TCP and WebSocket servers.

tcpkali - 一个针对 TCP 和 WebSocket 服务器的高性能负载生成工具

Features

  • Efficient multi-core operation; utilizes all available cores by default.
  • Allows opening massive number of connections ( --connections )
  • Allows limiting a single connection throughput ( --channel-bandwidth or --message-rate )
  • Allows specifying the first and subsequent messages ( --message , --first-message ).
  • Measures response latency percentiles usingHdrHistogram ( --latency-marker )
  • Sends stats to StatsD/DataDog ( --statsd )

Quick example: testing a web server

tcpkali -em "GET / HTTP/1.1/r/nHost: google.com/r/n/r/n" -r 10 --latency-marker "HTTP/1.1" google.com:80 
autoreconf -iv ./configure make 

tcpkali - 一个针对 TCP 和 WebSocket 服务器的高性能负载生成工具

Install

make install 
Usage: tcpkali [OPTIONS] <host:port> [<host:port>...] Where OPTIONS are:   -h, --help                  Print this help screen, then exit   --version                   Print version number, then exit   --verbose <level=1>         Verbosity level [0..3]    --ws, --websocket           Use RFC6455 WebSocket transport   -c, --connections <N=1>     Connections to keep open to the destinations   --connect-rate <R=100>      Limit number of new connections per second   --connect-timeout <T=1s>    Limit time spent in a connection attempt   --channel-lifetime <T>      Shut down each connection after T seconds   --channel-bandwidth <Bw>    Limit single connection bandwidth   -l, --listen-port <port>    Listen on the specified port   -w, --workers <N=24>        Number of parallel threads to use   -T, --duration <T=10s>      Load test for the specified amount of time    -e, --unescape-message-args Unescape the following {-m|-f|--first-*} arguments   --first-message <string>    Send this message first, once   --first-message-file <name> Read the first message from a file   -m, --message <string>      Message to repeatedly send to the remote   -f, --message-file <name>   Read message to send from a file   -r, --message-rate <R>      Messages per second to send in a connection    --statsd                    Enable StatsD output (default disabled)   --statsd-host <host>        StatsD host to send data (default is localhost)   --statsd-port <port>        StatsD port to use (default is 8125)   --statsd-namespace <string> Metric namespace (default is "tcpkali")    --latency-marker <string>   Measure latency using a per-message marker  And variable multipliers are:   <R>:  k (1000, as in "5k" is 5000)   <Bw>: kbps, Mbps (bits per second), kBps, MBps (bytes per second)   <T>:  ms, s, m, h, d (milliseconds, seconds, minutes, hours, days) 

Examples

Connect to a local web server and do nothing

tcpkali 127.0.0.1:80 

Connect to a local echo server and hammer it with stream of dollars

tcpkali --message '$' localhost:echo tcpkali -m '$' localhost:echo 

Open 10000 connections to two remote servers

tcpkali --connections 10000 yahoo.com:80 google.com:80 tcpkali -c 10000 yahoo.com:80 google.com:80 

Open 100 connections to itself and do nothing

tcpkali --connections 100 --listen-port 12345 127.0.0.1:12345 tcpkali -c100 -l12345 127.0.0.1:12345 

Open a connection to itself and send lots of cookies

tcpkali --listen-port 12345 --message "cookies" 127.0.0.1:12345 tcpkali -l 12345 -m "cookies" 127.0.0.1:12345 

Listen for incoming connections and throw away data for 3 hours

tcpkali --listen-port 12345 --duration 3h tcpkali -l12345 -T3h 

WebSocket connections

Open connection to the local WebSocket server, send hello, and wait

tcpkali --websocket --first-message "hello" 127.0.0.1:80 

Open connection to the local server and send tons of empty JSON frames

tcpkali --websocket --message "{}" 127.0.0.1:80 

Open connection to the local server and send a JSON frame every second

tcpkali --websocket --message "{}" --message-rate=1 127.0.0.1:80 

Sysctls for high load

(for N connections, such as 50k)

kern.maxfiles=10000+2*N         # BSD kern.maxfilesperproc=100+N      # BSD fs.file-max=10000+2*N           # Linux  # For load-generating clients. net.ipv4.ip_local_port_range="10000  65535"  # Linux. net.inet.ip.portrange.hifirst=10000          # BSD/Mac. net.inet.ip.portrange.hilast=65535           # (Enough for N < 55535) net.ipv4.tcp_tw_reuse=1  # If using netfilter on Linux: net.netfilter.nf_conntrack_max=N net.netfilter.nf_conntrack_max=N/4 

Readings

  • On TIME-WAIT state and its reuse: http://vincent.bernat.im/en/blog/2014-tcp-time-wait-state-linux.html
  • On netfliter settings: http://serverfault.com/questions/482480/
正文到此结束
Loading...