python教程—列表删除元素
Python现今十分火热,对于其列表应用来说也是十分重要的一环,列表中我们怎么删除元素?怎么检索重复元素并删除这些你都会吗?
WEB 服务中,对于不同的请求,响应速度(性能)是不一样的。对于静态文件的响应一般会很快,尤其是使用了前端缓存技术的(例如 nginx 缓存、varnish缓存、CDN 缓存等)。
下面将以静态页面的测试为例,详细讲解 WEB 服务性能测试方案。
在只有一台裸机的情况下,响应速度会受限于服务器的 CPU、内存、磁盘IO、数据库QPS、文件系统 等,所以需要在测试的时候,实时监控系统的情况。
一、准备测试环境
请根据实际情况组建测试环境,如果要测试线上 WEB 服务,不怕影响服务质量的话,也可直接使用线上环境。
下表是我使用过的一个测试环境。
网络 |
公司内网 VLAN |
WEB Client 机器配置 |
CPU:Intel(R) Xeon(R) X3430 2.40GHz 4核 |
WEB Server 机器配置 |
CPU:Intel(R) Xeon(R) X5650 2.67GHz 24核 |
WEB Server |
Nginx 1.4.7 |
测试工具 |
Apache Bentch 2.3,简称 ab |
测试静态页面(大小4K) |
http://nginx.test.com/ |
请求总数 |
根据需要自定义,请求太少测试没意义,太多很耗时间。 一般在监控性能的时候,请求多一点,例如 1M,延长测试过程,方便查看; 在测试并发数的时候,请求少一点,例如 10W,可以快速得出并发响应数。 |
测并发数 |
1, 50,100,150,200,300,500,1000 … ,根据需要自定义 |
性能记录工具 |
dstat |
服务器性能参数 |
CPU负载、磁盘读写速度、网络流量、内存读写速度、系统负载 |
二、测试步骤
1、搭建 WEB Server过程略过
2、安装模拟访问工具 ab
如果机器已经安装了 Apache httpd ,则一般都自带 ab 工具,使用命令 which ab 可以找到 ab 的安装路径。如果找不到 ab 命令,请安装 httpd 即可(Redhat):yum install httpd。
3、安装性能查看工具
Redhat:yum install -y dstat
4、测试命令以及参数
4.1、ab 命令参数
直接运行 ab 可以得到使用帮助,这里说一下 ab 命令的常用参数:
-n |
客户端发起的总请求数 |
-c |
客户端并发请求数,即有多少个用户同时发起请求 |
-k |
HTTP 长连接,默认没有 -k 参数,使用的是短连接 |
url |
[http[s]://]hostname[:port]/path |
例子:ab -n100000 -c 200 http://nginx.test.com/
NOTE:一些低配置的机器,在运行 ab 命令的时候可能会出现问题,主要是打开文件数太小导致的。并发数越高,越容易出现这样的问题。
4.2、测试结果解说
测试进度
测试结果
注: 1、mean是平均数的意思
2、第一个Time per request代表每个链接上单个请求的平均响应时间
第二个Time per request所有链接合计后单个请求的平均响应时间
它们之间的关系是:Tpr1=Tpr2*n,这里的Tpr1=23.054,Tpr2=0.115,n=200。
3、下面将 Requests per second 简称为 RPS,第一个 Time per request 简称为 TPR
相应时间统计
从 ConnectionTimes 可以看出,请求在建立到响应的过程中,哪个环节下消耗的时间比较多。
测试 WEBServerd的最大(佳)并发数
打开网页的速度(取决于请求响应时间)是一个很重要的用户体验。
然而请求响应时间存在小部分的极大值和极小值,那么平均响应时间不能真实反映请求响应速度,所以取95% 在某时间阀值内(例如25ms)完成比较合理。
所以假设业务的需求是:95% 请求的响应时间 < 25ms 。
假定请求总数不变,每次测试时改变并发数连接数,倘若测试结果中,有95%的请求能在25ms内处理完成,则认为当前的并发响应数是最大(佳)并发数。
同时记录服务器 CPU、内存、系统、IO、网络流量 的情况。
对于ab -n 100000 -c 200 http://nginx.test.com/,取 3 次的平均值作为测试结果。
5、系统性能分析命令
dstat -h可以获取帮助信息
命令解释:dstat -t -c -dD sda1 -nN eth0-gyl
-t |
显示时间戳 |
-c |
统计所有CPU 状态 |
-dD sda1 |
统计磁盘分区 /dev/sda1 的读写速度,请根据实际情况指定分区,这里为 /usr/local/nginx/html/index.html 这个文件所在的分区 |
-nN eth0 |
统计网卡 eth0 的流量,请根据实际情况指定网卡 |
-g |
统计内存页换入换出速度,一般希望的值是 0 0 |
-y |
统计 CPU 中断 int 和 上下文切换 csw 信息 |
–tcp |
tcp 连接状态 |
-l |
统计系统负载信息 |
系统性能分析命令
在客户端运行 ab 测试命令之前,预先运行 dsetat 命令,查看测试前机器的状态;等到测试的时候,再对比一下测试前后系统的状态。
6、测试例子结果分析
这里想要测试 WEB Server 的大体性能,只需要测试 Requests per second 的值即可。
6.1、短链接并发测试
每个命令运行 3 次,然后取平均值
ab -n 100000 -c 1 http://nginx.test.com/
ab -n 100000 -c 50 http://nginx.test.com/
ab -n 100000 -c 100 http://nginx.test.com/
……
6.2、长链接并发测试
ab -n 100000 -c 1 -k http://nginx.test.com/
ab -n 100000 -c 50 -k http://nginx.test.com/
ab -n 100000 -c 100 -k http://nginx.test.com/
……
6.3、测试结果
Complete requests |
Concurrency Level |
短链接 |
长链接 |
||
Time taken for tests |
Requests per second |
Time taken for tests |
Requests per second |
||
100000 |
1 |
85 |
1183 |
54 |
1839 |
100000 |
50 |
9.8 |
9756 |
7.7 |
12041 |
100000 |
100 |
6249 |
|||
100000 |
150 |
7432 |
|||
100000 |
200 |
7996 |
|||
100000 |
250 |
8584 |
|||
100000 |
300 |
7313 |
|||
100000 |
350 |
7189 |
|||
100000 |
400 |
8335 |
|||
100000 |
450 |
9545 |
|||
100000 |
500 |
9866 |
|||
100000 |
550 |
9965 |
|||
100000 |
600 |
9685 |
|||
100000 |
650 |
10124 |
|||
100000 |
700 |
10053 |
55 |
12297 |
|
100000 |
750 |
10204 |
|||
100000 |
800 |
9731 |
|||
100000 |
850 |
9921 |
|||
100000 |
900 |
9909 |
|||
100000 |
950 |
9908 |
|||
100000 |
1000 |
9067 |
|||
100000 |
1050 |
9871 |
|||
100000 |
1100 |
7669 |
|||
100000 |
1150 |
8849 |
使用excle做成表格,使测试结果更加形象
并发数
从图中可知:WEBServer 对于请求 http://nginx.test.com/每秒的最大响应数为 1W 左右。
Nginx 官网说能达到 5W RPS,可见当前的 WEB Server 离那个目标还差很远。
下图是测试过程中,WEBServer 的性能监控记录:dstat -t -c -dD sda1 -nN eth0 -gyl
测试前
测试前
短链接测试时(并发 700 )
短链接测试
长连接测试时(并发 700 )
长链接测试
测试前后,变化较大的有:
l 网卡流量
l CPU 中断数量以及上下文切换数
l 1分钟之内的系统负载
从性能监控记录看,进行测试时,系统性能还处于一个比较空闲的状态,负载较低。
结合测试的 RPS 和 系统性能,发现 WEB Server 还有很大的进步空间,需要进行更加深入的专业优化。
当然,这是一个很简单的测试,如果涉及到比较负载的业务等,系统各方面的负载也会相应的增加的。
测试结果详细记录表
Document Path |
/ |
|||||||||||||||
Document Length |
555 bytes |
|||||||||||||||
Concurrency Level |
1 |
50 |
||||||||||||||
Time taken for tests |
84.498 seconds |
|||||||||||||||
Complete requests |
100000 |
100000 |
||||||||||||||
Failed requests |
0 |
|||||||||||||||
Write errors |
0 |
|||||||||||||||
Keep-Alive requests |
– |
|||||||||||||||
Total transferred |
75.3MB |
|||||||||||||||
HTML transferred |
52.9MB |
|||||||||||||||
Requests per second |
1183.47 |
|||||||||||||||
Time per request 1 |
0.845 [ms] |
|||||||||||||||
Time per request 2 |
0.845 [ms] |
|||||||||||||||
Transfer rate(received) |
911.87 KBps |
|||||||||||||||
Connection Times (ms) |
Connect |
0+/-0.4 |
||||||||||||||
Processing |
0 |
|||||||||||||||
Waiting |
0 |
|||||||||||||||
Total |
1 |
|||||||||||||||
Percentage of the requests served within a certain time (ms) |
50% |
1 |
||||||||||||||
66% |
1 |
|||||||||||||||
75% |
1 |
|||||||||||||||
80% |
1 |
|||||||||||||||
90% |
1 |
|||||||||||||||
95% |
1 |
|||||||||||||||
98% |
1 |
|||||||||||||||
99% |
2 |
|||||||||||||||
100% |
205 |
转载请注明:小猪云服务器租用推荐 » 服务器测试全网最详细的教程!