ab命令全称为 Apache bench 是Apache自带的压力测试工具。ab命令非常实用,它不仅可以对Apache服务器进行网站访问压力测试,也可以对或其它类型的服务器进行压力测试,ab命令会创建多个并发线程,模拟多个访问者同时对某一个url地址进行访问,实现压力测试
ab命令对发出负载的计算机要求很低,它既不会占用很高CPU,也不会占用很多内存。但却会给目标服务器造成巨大的负载,其原理类似CC攻击,可能会造成目标服务器资源耗尽,严重时可能会导致死机,而且它没有图形化结果不能监控,所以只能用作临时紧急任务和简单的测试
1、安装apache beach工具
#安装
yum istall http-tools
#检查是否安装成功
ab -V
#帮助命令
ab -h
2、数据准备
测试之前需要准备一个简单的html、一个php、一个图片文件,分别对他们进行测试。我们把这个三个文件放到nginx安装目录默认的html目录下,准备好之后就可以测试了。(备注:ps -ef | grep nginx可以查到nginx的文件路径)
3、测试执行
#这个指令会模拟10个用户,总共发起1000次请求。
ab -n 1000 -c 10 http://localhost/ab.html
#这个指令会模拟10个用户,总共发起500次请求。
ab -n 500 -c 10 http://localhost/ab.php
#这个指令会模拟10个用户,总共发起500次请求。
ab -n 500 -c 10 http://localhost/ab.gif
4、测试结果
测试结果.png
5、结果分析
Concurrency Level: 10 //并发级别,也就是并发数,请求中-c参数指定的数量
Time taken for tests: 0.010 seconds //本次测试总共花费的时间
Complete requests: 10 //本次测试总共发起的请求数量
Failed requests: 0 //失败的请求数量。因网络原因或服务器性能原因,发起的请求并不一定全部成功,
//通过该数值和Complete requests相除可以计算请求的失败率,作为测试结果的重要参考。
otal transferred: 2002bytes //总共传输的数据量,指的是ab从被测服务器接收到的总数据量,包括index.html的文本内容和请求头信息。
HTML transferred: 0bytes //从服务器接收到的index.html文件的总大小,等于Document Length*Complete requests=227 bytes*100=22700 bytes
Requests per second: 976.75 [#/sec] (mean) //平均(mean)每秒完成的请求数:QPS,这是一个平均值,等于Complete requests/Time taken for tests=QPS
Time per request: 10.238 [ms] (mean) //从用户角度看,完成一个请求所需要的时间(因用户数量不止一个,服务器完成10个请求,
//平均每个用户才接收到一个完整的返回,所以该值是下一项数值的10倍。)
Time per request: 1.024 [ms] (mean, across all concurrent requests)// 服务器完成一个请求的时间。
Transfer rate: 190.96 [Kbytes/sec] received //网络传输速度。对于大文件的请求测试,这个值很容易成为系统瓶颈所在。要确定该值是不是瓶颈,
//需要了解客户端和被测服务器之间的网络情况,包括网络带宽和网卡速度等信息。
n1.nginx的优化
全局配置优化:修改系统ulimit限制/etc/security/limits.conf
user www www;
worker_processes 2; //与CPU核心数量一致
worker_rlimit_nofile 60000;//最大打开文件数量
error_log /var/log/nginx/error_log info; //定义日志级别
event模块优化
max_clients=worker_processes*worker_connections
events{
worker_connections 10000;
use epoll;
}
http模块优化:如果需要处理大量静态文件,需要保持这些文件句柄为打开状态,避免后续再次打开
http{
open_file_cache max=2000 inactive=20s;
open_file_cache_valid 60s;
open_file_cache_min_uses 5;
open_file_cache_errors off;
}
设置服务器最大缓存2000个文件句柄,关闭20秒内无请求的文件句柄
文件句柄的有效时间是60s,60s后过期
只有访问次数超过5次会被缓存
客户端浏览器缓存数据
http{
location ~* .(jpg|jpeg|gif|png|css|js|ico|xml)${
access_log off;
expires 30d;
}
}
n2.常用压力测试工具
ab
ab -c 并发数 -n 总请求数 url
http_load
http_load -p 并发数 -s 测试时间 url
webbench
webbench -c 并发数 -t 测试时间 url
siege
siege -c 并发数 -r 重复次数 url
n3.防盗链
Referer:http referer是header的一部分,当浏览器向web服务器发送请求时,一般都会带上referer,告诉服务器我是从哪个页面连接过来的,服务器可以获得一些信息用于处理











网友评论