http_load - 压力测试

Wu Jun 2019-12-25 15:59:03
Categories: > Tags:

1.http_load简介

http_load官网

http_load是一款基于Linux平台的web服务器性能测试工具,以并行复用的方式运行,用于测试web服务器的吞吐量与负载,web页面的性能。

优点:

  1. 基于命令行,简单、易于上手。
  2. 小巧轻便,解压缩后不到100k。
  3. 开源,免费。

缺点:

  1. 仅适用于web页面的性能测试,不适用于访问数据库。
  2. 测试结果分析有限
  3. 平台依赖linux。

2.http_load安装

  1. 下载地址
wget http://www.acme.com/software/http_load/http_load-09Mar2016.tar.gz
  1. 安装
tar zxf http_load-09Mar2016.tar.gz
cd http_load-09Mar2016
make && make install

如果遇到错误,可以执行安装:yum -y install gcc gcc-c++

3.http_load使用

  1. 创建文件

文件格式是每行一个URL,写入要测的服务器域名或IP地址

vi urls
  1. 使用示例

命令格式:http_load -p 并发访问进程数 -s 访问时间 需要访问的URL文件

-parallel 简写-p :含义是并发的用户进程数
-fetches 简写-f :含义是总计的访问次数
-rate 简写-p :含义是每秒的访问频率
-seconds简写-s :含义是总计的访问时间

示例

./http_load -rate 5 -seconds 10 urls
  1. 执行结果:

说明执行了一个持续时间10秒的测试,每秒的频率为5。

49 fetches, 2 max parallel, 289884 bytes, in 10.0148 seconds
# 说明在上面的测试中运行了49个请求,最大的并发进程数是2,总计传输的数据是289884bytes,运行的时间是10.0148秒
5916 mean bytes/connection
# 说明每一连接平均传输的数据量289884/49=5916
4.89274 fetches/sec, 28945.5 bytes/sec
# 说明每秒的响应请求为4.89274,每秒传递的数据为28945.5 bytes/sec
msecs/connect: 28.8932 mean, 44.243 max, 24.488 min
msecs/first-response: 63.5362 mean, 81.624 max, 57.803 min
# 说明每连接的平均响应时间是28.8932 msecs,最大的响应时间44.243 msecs,最小的响应时间24.488 msecs
HTTP response codes:
code 200 -- 49
# 说明打开响应页面的类型,如果403的类型过多,那可能要注意是否系统遇到了瓶颈。

测试结果中,主要参考fetches/sec、msecs/connect数值,即服务器每秒能够响应的查询次数的数值来衡量性能,当然,单纯数值判断并不准确,还要参考CPU、内存的等消耗综合考虑。

4.常见错误

  1. byte count wrong

http_load在处理时会去关注每次访问同一个URL返回结果(即字节数)是否一致,若不一致就会抛出byte count wrong

  1. too many open files

系统限制的open files太小,ulimit -n 修改open files值即可

  1. 无法发送大请求

默认接受请求的buf大小 http_load.c

  1. Cannot assign requested address

客户端频繁的连服务器,由于每次连接都在很短的时间内结束,导致很多的TIME_WAIT,以至于用光了可用的端口号,所以新的连接没办法绑定端口,所以要改客户端机器的配置, 在sysctl.conf里加:

net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_timestamps=1 开启对于TCP时间戳的支持,若该项设置为0,则下面一项设置不起作用
net.ipv4.tcp_tw_recycle=1 表示开启TCP连接中TIME-WAIT sockets的快速回收
  1. ./http_load: unknown protocol -

两种原因: 不支持https,或, 说明txt文档中有多余的空行,要将其删除。