注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

网易杭州 QA Team

务实 专注 分享 做有态度的QA

 
 
 
 
 

日志

 
 

命令行的性能测试小工具  

来自stonesheep   2011-08-01 10:25:15|  分类: 性能测试 |举报 |字号 订阅

  下载LOFTER 我的照片书  |

1测试工具

2调试工具  


1.1 http_load

官方网站http://www.acme.com/software/http_load/

一、安装

$ wget http://acme.com/software/http_load/http_load-12mar2006.tar.gz

$ tar zxvf http_load-12mar2006.tar.gz

$ cd http_load-12mar2006/

$ make

$ sudo make install

安装到/usr/local/bin

可以通过man http_load查看使用说明(前提将http_load.1文件拷贝到man的查找路径中)

二、常见错误信息

1错误信息:byte count wrong

http_load在处理时会去关注每次访问同一个URL返回结果(即字节数)是否一致,若不一致就会抛出byte count wrong所以动态页面可以忽略这个错误信息。或者可以对代码做修改http_load.c

【原来】

“stderr, "%s: byte count wrong\n", urls[url_num].url_str );”

【修改为】

“stderr, "%s: byte count wrong: first=%ld,cur=%ld\n",urls[url_num].url_str,urls[url_num].bytes,connections[cnum].bytes );”

2报错:too many open files

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

3无法发送大请求 (请求长度>600个字符)

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

912 static void

913 handle_connect( int cnum, struct timeval* nowP, int double_check )

914 {

915 int url_num;

916 char buf[600]; //根据需要修改,如:char buf[4096]

917 int bytes, r;

 

4Cannot 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的快速回收

三、使用方式

http_load -parallel 100 -fetches 10000

#100个并发执行10000次

http_load -parallel 100 -seconds 3600

#100个并发执行1小时

http_load -rate 100 -fetches 10000

#每秒100个请求频率,请求10000次

http_load -rate 100 -seconds 3600

#每秒100个请求频率执行1小时

四、测试报告

209 fetches, 10 max parallel, 6.9004e+06 bytes, in 30 seconds 

33016.3 mean bytes/connection 

6.96667 fetches/sec, 230013 bytes/sec 

msecs/connect: 31.8767 mean, 34.121 max, 31.304 min 

msecs/first-response: 274.644 mean, 3228.69 max, 127.399 min 

208 bad byte counts 

HTTP response codes: 

code 200 -- 209 


1.2 siege

官方网站http://www.joedog.org/

一、安装

$ wget http://www.joedog.org/pub/siege/siege-2.70.tar.gz

$ tar zxvf siege-2.70.tar.gz

$ ./configure

$ make

$ sudo make install

Ubuntu上可以

$ sudo apt-get install siege

$ siege -c 30 -r 100 -b -f /home/yingfm/PerformanceTools/yfm_exam/yfmtest03

-c 并发数

-r 每个用户的请求次数

-b benchmark  no delays between requests

测试报告

Transactions:          3000 hits

Availability:        100.00 %

Elapsed time:         22.18 secs

Data transferred:        23.50 MB

Response time:     0.21 secs 

Transaction rate:       135.26 trans/sec

Throughput:          1.06 MB/sec

Concurrency:         27.99    (average number of simultaneous connections)

Successful transactions:        3000

Failed transactions:            0

Longest transaction:         2.63

Shortest transaction:         0.00

备注:不加b选项,Concurrency常常会是小数。

默认配置文件/etc/siege/siegerc

更多学习请参考官方网站手册


1.3 webbench

官方网站http://home.tiscali.cz/~cz210552/webbench.html

一、安装

$ wget http://home.tiscali.cz/~cz210552/distfiles/webbench-1.5.tar.gz

$ tar zxvf webbench-1.5.tar.gz

$ cd webbench-1.5

$ make

$ sudo make install

二、使用

yingfm@ubuntu:~$ webbench -c 20 -t 30 http://localhost/index.php

Webbench - Simple Web Benchmark 1.5

Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.

Benchmarking: GET http://localhost/index.php

20 clients, running 30 sec.

Speed=31182 pages/min, 23777118 bytes/sec.

Requests: 15591 susceed, 0 failed.

三、附加

与其他性能测试工具不同,webbench是以多进程的方式运行的。


1.4 curl-loader

官方网站:http://curl-loader.sourceforge.net/

一、安装

$ wget http://nchc.dl.sourceforge.net/project/curl-loader/curl-loader/curl-loader-0.53/curl-loader-0.53.tar.bz2

$ bzip2 -d curl-loader-0.53.tar.bz2 

$ tar xvf curl-loader-0.53.tar 

$ cd curl-loader-0.53

$ make

报错:fatal error: openssl/crypto.h 文件找不到

但是已经安装openssl

解决:在ubuntu下还需要安装libssl-dev

$ sudo apt-get install libssl-dev

$ sudo make install

$ sudo curl-loader -h

报错:curl-loader: error while loading shared libraries: libcares.so.2: cannot open shared object file: No such file or directory

在/usr/local/lib下没找到libcares.so.2

将curl-loader编译目录下的

$ sudo cp /home/yingfm/PerformanceTools/curl-loader-0.53/build/c-ares/c-ares-1.7.4/lib/libcares.so.2.0.0 /usr/local/lib/

$ cd /usr/local/lib

$ sudo ln -ns libcares.so.2.0.0 libcares.so.2

此时还是报同样的错误,因为没有生效

$ sudo ldconfig

这样就可以了

具体使用可以查看conf-examples/下的例子和README文档,或者man curl-loader


2.1 ctags(查看源码工具)

对于linux下的c/c++程序员,使用vim+ctags的组合来写程序很方便。

常用命令如下

1、$ ctags -R *

2、$ vi -t tag (请把tag替换为您想查找的变量或函数名)

3、:set tags=/usr/include/tags

4、ctrl+]

5、ctrl+t

解释如下:

$ ctags -R *  “-R”表示递归创建,“*”表示所有文件。这条命令会在当前目录下产生一个tags文件,当用户在当前目录下运行vi时,会自动载入此tags文件。如果在其他目录下运行vi,可以使用:set tags=/urs/include/tags(tags所在目录,如果有多个,可以逗号隔开)

在vi中,把光标移到变量或函数名上,ctrl+]会定位到变量或函数的定义处;ctrl+t会退回到原来的文档处


2.2 gdb(调试工具)

在编译时要加上-g选项,生成的可执行文件才能用gdb进行源码级调试。

-g选项的作用是在可执行文件中加入源代码信息。并不是把源代码嵌入到可执行文件,在调试时也需要源文件。

(gdb)help可以看到命令类别

(gdb)help files查看files类别下有那些命令

(gdb)list列出源代码,一次只列10行

(gdb)l fun_name列出函数的源码

(gdb)quit退出

(gdb)start开始执行程序

(gdb)n控制语句一条一条的执行

(gdb)step或者s

(gdb)bt backtrace查看函数调用的栈帧

(gdb)i locals查看函数局部变量的值

(gdb)f frame命令

(gdb)p print

(gdb)finish

(gdb)set var sum=0

(gdb)display

(gdb)undisplay

(gdb)break

(gdb)c

(gdb)delete breakpoints 2

(gdb)disable breakpoints 3

(gdb)enbale 3

(gdb)i breakpoints

(gdb)run

yingfm@ubuntu:~/yingfm$ gcc main3.c

/tmp/ccBoBXRg.o: In function `main':

main3.c:(.text+0x3b): undefined reference to `sqrt'

main3.c:(.text+0x58): undefined reference to `sqrt'

collect2: ld returned 1 exit status

在用到数学函数时需要添加编译选项-lm

gcc main3.c -o main3 -lm


  评论这张
 
阅读(1279)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017