关于IT运维技术的
最佳实践博客网站

tcpkali—针对 TCP 和 WebSocket 服务器的高性能负载测试工具

关于:

tcpkali 是一个高性能的负载生成工具,用于 TCP 和 WebSocket 服务器。

特性

  1. 高效的 CPU 利用率,可使用所有 CPU 核
  2. 允许同时打开大量的并发链接 (–connections)
  3. 允许限制单个连接的吞吐量 (–channel-bandwidth or –message-rate)
  4. 允许指定首页消息和消息顺序 (–message, –first-message).
  5. 通过 HdrHistogram 度量响应的延时百分比 (–latency-marker)
  6. 可发送统计数据到 StatsD/DataDog (–statsd)

例子:快速测试Web服务器

tcpkali -em "GET / HTTP/1.1\r\nHost: google.com\r\n\r\n" -r 10 \
        --latency-marker "HTTP/1.1" google.com:80

使用方法:

(py2dev)  ~/ tcpkali --help
Usage: tcpkali [OPTIONS] <host:port> [<host:port>...]
Where OPTIONS are:
  -h, --help                   打印浏览帮助并退出
  --version                    打印版本号并退出
  -v, --verbose <level=1>      增加( -v )或设置详细级别[0..3]
  -w, --workers <N=4>          使用并行线程数
  --nagle {on|off}             控制 Nagle 算法 (set TCP_NODELAY)
  --rcvbuf <SizeBytes>         设置TCP接收缓冲区 (set SO_RCVBUF)
  --sndbuf <SizeBytes>         设置TCP发送缓冲区 (set SO_SNDBUF)
  --source-ip <IP>             使用指定的IP地址连接

  --ws, --websocket            使用 RFC6455 的WebSocket传输
  -c, --connections <N=1>      保持打开目标地址的连接
  --connect-rate <Rate=100>    每秒新建连接数限制
  --connect-timeout <Time=1s>  限制尝试连接所花费的时间
  --channel-lifetime <Time>    关闭每个连接以后的时间,秒
  --channel-bandwidth-upstream <Bandwidth>     限制上行带宽
  --channel-bandwidth-downstream <Bandwidth>   限制下行带宽
  -l, --listen-port <port>     监听指定的端口
  --listen-mode=<mode>         客户端连接后做什么,其中<mode>是:
               "silent"        不要发送数据,忽略接收到的数据(默认)
               "active"        主动发送信息
  -T, --duration <Time=10s>    在指定的时间后退出

  -e, --unescape-message-args  Unescape 消息数据参数
  --first-message <string>     第一次发送此消息
  --first-message-file <name>  从文件中读取的第一条消息
  -m, --message <string>       消息多次发送到远程
  -f, --message-file <name>    从文件中读取消息
  -r, --message-rate <Rate>    每秒发送的消息

  --latency-marker <string>    使用按消息标记测量延迟
  --latency-marker-skip <N>    忽略第一个N标记的事件

  --statsd                     启用StatsD输出(默认禁用)
  --statsd-host <host>         StatsD主机发送数据(缺省值为localhost)
  --statsd-port <port>         StatsD 端口使用(默认为8125)
  --statsd-namespace <string>  度量命名空间(默认是“tcpkali”)

变量单位和公认的乘数:
  <N>, <Rate>:  k (1000, as in "5k" is 5000), m (1000000)
  <SizeBytes>:  k (1024, as in "5k" is 5120), m (1024*1024)
  <Bandwidth>:  kbps, Mbps (每秒比特), kBps, MBps (每秒字节)
  <Time>:       ms, s, m, h, d (毫秒,秒,分钟,小时,天)
  <Rate> and <Time> 可以分值,如 0.25.

TCP 示例

连接到本地Web服务器,什么也不做:

tcpkali 127.0.0.1:80

连接到本地回显服务器,并使用美元符号来反复击打:

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

打开10000连接两个远程服务器:

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

打开100个连接到自己,什么都不做:

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

打开一个连接到它自己并发送大量cookies字符

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

监听传入的连接,扔掉数据3小时:

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

WebSocket 示例

打开连接到本地的WebSocket服务器,发送hello,并等待:

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

打开连接到本地服务器,并发送空的JSON帧:

tcpkali --websocket --message "\{ws.text}" 127.1:80

每秒钟发送一个二进制帧(尖括号是文字):

tcpkali --ws -m "\{ws.binary <image.png>}" -r1 127.1:80
赞(0)
未经允许不得转载:菜鸟HOW站长 » tcpkali—针对 TCP 和 WebSocket 服务器的高性能负载测试工具

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址