标签存档: 测试

Apache 压力测试工具 ab test

ab的全称是ApacheBench,是 Apache 附带的一个小工具,专门用于 HTTP Server 的benchmark testing,可以同时模拟多个并发请求。

$ /usr/local/apache2/bin/ab --help  #查看下ab帮助文档相关参数

#-n:请求次数
#-c:同一时间发出多少个请求(并行连接)
$ /usr/local/apache2/bin/ab -n 10 -c 10 http://www.google.com/ # 表示同时处理10个请求并运行10次http://www.google.com/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking www.google.com (be patient).....done

Server Software:        gws
Server Hostname:        www.google.com
Server Port:            80

Document Path:          /
Document Length:        376 bytes

Concurrency Level:      10
Time taken for tests:   0.256 seconds  # 整个测试持续的时间
Complete requests:      10  # 完成的请求总数量
Failed requests:        0  # 失败的请求总数量
Write errors:           0
Non-2xx responses:      10
Total transferred:      9240 bytes  # 整个测试过程的网络传输量
HTML transferred:       3760 bytes  # 整个测试过程的HTML内容传输量
Requests per second:    39.12 [#/sec] (mean)  # 每秒请求数 ( 平均 )
Time per request:       255.616 [ms] (mean)  # 每次并发请求时间 ( 所有并发 )
Time per request:       25.562 [ms] (mean, across all concurrent requests) # 每一请求时间 ( 并发平均 )
Transfer rate:          35.30 [Kbytes/sec] received  # 平均每秒网络上的流量,可以帮助排除是否存在网络流量过大导致响应时间延长的问题

 # 网络上消耗的时间的分解
Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       30   32   1.2     31      33
Processing:    32   33   0.8     33      35
Waiting:       32   33   0.8     33      35
Total:         63   64   0.9     64      65

# 下面的内容为整个场景中所有请求的响应情况。
# 在场景中每个请求都有一个响应时间,其中 50% 的用户响应时间小于 64 毫秒,
# 66 % 的用户响应时间小于 65 毫秒,最大的响应时间小于 65 毫秒
Percentage of the requests served within a certain time (ms)
  50%     64
  66%     65
  75%     65
  80%     65
  90%     65
  95%     65
  98%     65
  99%     65
 100%     65 (longest request)

遇到问题:
1.$ /usr/local/apache2/bin/ab -n2000 -c2000 http://www.google.com/
socket too many open files

$ ulimit -n  #查询当前终端的文件句柄数:一般的系统默认的1024
$ ulimit -n 65535  #修改文件句柄数为65535
$ echo ulimit -n 65535 >>/etc/profile  #为了每次系统重新启动时,都可以获取更大的ulimit值,将ulimit加入到/etc/profile文件底部
$ source /etc/profile  #加载修改后的profile
$ ulimit -n  #显示65535,修改完毕!

2.$ /usr/local/apache2/bin/ab -n2000 -c2000 http://www.google.com/
apr_socket_recv: Connection reset by peer (104)

$ cd /home/super/httpd-2.4.2/support/
$ vim ab.c
return;
} else {
# 注释原来报错代码
//apr_err("apr_socket_recv", status);
# 新增内容
bad++;
close_connection(c);
return;
}
# 最后重新编译apache

Xdebug 安装与应用

之前,一直在用Xdebug,但是自己还没有尝试过安装,也没尝试过对Xdebug的应用提升,今天正好有空尝试了下。

Xdebug:是一个开放源代码的PHP程序调试器(即一个Debug工具),可以用来跟踪,调试和分析PHP程序的运行状况。

安装:

$ wget http://xdebug.org/files/xdebug-2.1.3.tgz
$ tar -zxvf xdebug-2.1.3.tgz
$ cd xdebug-2.1.3/
$ /usr/local/php/bin/phpize
$ ./configure --enable-xdebug --with-php-config=/usr/local/php/bin/php-config
$ make
$ make install
$ cd /usr/local/php/lib
$ vim php.ini
[Xdebug]
extension="xdebug.so"
xdebug.auto_trace=0
xdebug.collect_params=4
xdebug.collect_return=on
xdebug.show_mem_delta=1  #查看内存使用量
xdebug.profiler_enable=0  #只对指定的页面调试,和‍xdebug.profiler_enable_trigger连用
xdebug.profiler_output_dir="/tmp/"
xdebug.profiler_enable_trigger=1  #通过XDEBUG_PROFILE的get/post请求触发页面调试
$ /usr/local/apache2/bin/apachectl restart

安装成功后,显示如下截图:

应用

随便写了个php,测试下报错信息是否已经是应用Xdebug,截图如下:

应用提升:

register_shutdown_function('xdebug_stop_trace');

xdebug_start_trace("/tmp/xLog_test");

/*此处省略过程代码*/

xdebug_stop_trace();

生成的Xdebug日志文件/tmp/xLog_test.xt,部分内容截图如下:

通过Xdebug的日志,我们可以了解到时间和内存的使用情况,也可以了解陌生产品架构的方式,还可以通过执行时间快速的定位问题。

运用WinCacheGrind.exe:
1.WinCacheGrind.exe,下载地址:http://sourceforge.net/projects/wincachegrind/
2.如果xdebug.profiler_enable_trigger = 1开启状态,可以用游览器+调试参数XDEBUG_PROFILE来生成cachegrind.out.xxxx的文件,比如用游览器访问:http://www.superzc.com/index.php?id=1&XDEBUG_PROFILE。然后在xdebug.profiler_output_dir=”/tmp/”设置的目录下就生成了一个cachegrind.out.xxxx的文件;
3.最后用WinCacheGrind来解读这个文件,点击菜单栏的”File” –> “Open…”,选择cachegrind.out.xxxx文件,然后打开,如下图:

第 1 页,共 1 页1