热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

AB压力测试

2019独角兽企业重金招聘Python工程师标准Ubuntu安装ABapapt-getinstallapache2-utils使用AB压力测试-c并发数-n请求总数ab-c3

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

Ubuntu 安装AB

apapt-get install apache2-utils

使用AB 压力测试

-c 并发数 -n请求总数 ab -c 3000 -n 10000 http://localhost/test/index.php AB只能测试localhost

返回结果

This is ApacheBench, Version 2.3 <$Revision: 1528965 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/Benchmarking localhost (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requestsServer Software: nginx
Server Hostname: localhost
Server Port: 80Document Path: /test/index.php
Document Length: 25 bytesConcurrency Level: 2900 当前并发数
Time taken for tests: 1.772 seconds 测试使用是回见
Complete requests: 10000 完成请求个数
Failed requests: 0 失败请求个数
Non-2xx responses: 10000
Total transferred: 1850000 bytes 数据总大小
HTML transferred: 250000 bytes html大小
Requests per second: 5643.61 [#/sec] (mean) 吞吐率&#xff0c;计算公式&#xff1a;Complete requests/Time taken for tests
Time per request: 513.856 [ms] (mean)用户平均请求等待时间&#xff0c;计算公式&#xff1a;Time token for tests/&#xff08;Complete requests/Concurrency Level&#xff09;。
Time per request: 0.177 [ms] (mean, across all concurrent requests) 服务器平均请求等待时间&#xff0c;计算公式&#xff1a;Time taken for tests/Complete requests&#xff0c;正好是吞吐率的倒数。也可以这么统计&#xff1a;Time per request/Concurrency Level。
Transfer rate: 1019.60 [Kbytes/sec] received 表示这些请求在单位时间内从服务器获取的数据长度&#xff0c;计算公式&#xff1a;Total trnasferred/ Time taken for tests&#xff0c;这个统计很好的说明服务器的处理能力达到极限时&#xff0c;其出口宽带的需求量。Connection Times (ms)min mean[&#43;/-sd] median max
Connect: 0 23 36.8 0 98
Processing: 58 433 121.4 477 598
Waiting: 55 433 121.5 477 598
Total: 154 456 103.6 494 661Percentage of the requests served within a certain time (ms)50% 49466% 53275% 53980% 55090% 55595% 57398% 60899% 628100% 661 (longest request)

使用AB 遇到问题

执行操作一定条数,或连续执行该命令会出现如下问题&#xff1a;

apr_socket_recv: Connection timed out (110)

查看系统日志&#xff1a;

dmesg

显示大量下面错误

nf_conntrack: table full, dropping packet.

原因: 服务器访问量大&#xff0c;内核netfilter模块conntrack相关参数配置不合理&#xff0c;导致新连接被drop掉。

详细 nf_conntrack模块在kernel 2.6.15&#xff08;2006-01-03发布&#xff09; 被引入&#xff0c;支持ipv4和ipv6&#xff0c;取代只支持ipv4的ip_connktrack&#xff0c;用于跟踪连接的状态&#xff0c;供其他模块使用。 最常见的使用场景是 iptables 的 nat 和 state 模块&#xff1a; 1.nat 根据转发规则修改IP包的源/目标地址&#xff0c;靠nf_conntrack的记录才能让返回的包能路由到发请求的机器。 2.state 直接用 nf_conntrack 记录的连接状态&#xff08;NEW/ESTABLISHED/RELATED/INVALID&#xff09;来匹配防火墙过滤规则。 3.nf_conntrack用1个哈希表记录已建立的连接&#xff0c;包括其他机器到本机、本机到其他机器、本机到本机&#xff08;例如 ping 127.0.0.1 也会被跟踪&#xff09;。 4.如果连接进来比释放的快&#xff0c;把哈希表塞满了&#xff0c;新连接的数据包会被丢掉&#xff0c;此时netfilter变成了一个黑洞&#xff0c;导致拒绝服务。 这发生在3层&#xff08;网络层&#xff09;&#xff0c;应用程序毫无办法。

解决与调优

A. 调整内核参数 如果不能关掉防火墙&#xff0c;基本思路就是上面说的&#xff0c;调大nf_conntrack_buckets和nf_conntrack_max&#xff0c;调小超时时间。

# net.netfilter.nf_conntrack_buckets 不能直接改&#xff08;报错&#xff09;
# 需要修改模块的设置&#xff1a;
echo 262144 > /sys/module/nf_conntrack/parameters/hashsize
# 如果不是root&#xff1a;
echo 262144 | sudo tee /sys/module/nf_conntrack/parameters/hashsize# 再查看&#xff0c;bucket已经变成设置的大小
sudo sysctl net.netfilter.nf_conntrack_buckets# max设为桶的4倍
sudo sysctl -w net.netfilter.nf_conntrack_max&#61;1048576
suod sysctl -w net.nf_conntrack_max&#61;1048576
sudo sysctl -w net.netfilter.nf_conntrack_tcp_timeout_fin_wait&#61;30
sudo sysctl -w net.netfilter.nf_conntrack_tcp_timeout_time_wait&#61;30
sudo sysctl -w net.netfilter.nf_conntrack_tcp_timeout_close_wait&#61;15sudo sysctl -w net.netfilter.nf_conntrack_tcp_timeout_established&#61;300

如果测试过没问题&#xff0c;可以编辑/etc/sysctl.d/下的配置文件&#xff08;旧系统是/etc/sysctl.conf&#xff09;&#xff0c;系统启动时会加载里面的设置。

sudo vim /etc/sysctl.d/90-conntrack.conf# 格式&#xff1a;<参数>&#61;<值>&#xff0c;等号两边可以空格&#xff0c;支持 # 注释
net.netfilter.nf_conntrack_max&#61;1048576
net.nf_conntrack_max&#61;1048576
net.netfilter.nf_conntrack_tcp_timeout_fin_wait&#61;30
net.netfilter.nf_conntrack_tcp_timeout_time_wait&#61;30
net.netfilter.nf_conntrack_tcp_timeout_close_wait&#61;15
net.netfilter.nf_conntrack_tcp_timeout_established&#61;300
# 如果要马上应用配置文件里的设置&#xff1a;
sudo sysctl -p /etc/sysctl.d/90-conntrack.conf
# 不传配置文件路径默认加载 /etc/sysctl.conf

B. 关闭防火墙 C. 设置不跟踪连接的规则&#xff08;不推荐&#xff09; D. 禁用相关模块&#xff08;不推荐&#xff09;

外链nf_conntrack说明


转:https://my.oschina.net/u/3501089/blog/1861125



推荐阅读
author-avatar
勇胆识_156
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有