# 压力测试
# 目的
瓶颈
找到系统的瓶颈,一定是要确定系统某个方面达到瓶颈了,压力测试才算是基本完成。当我们说系统可以支撑某某压力时,一定要同时能够清楚的说出系统的瓶颈是在哪里;也就是说,当瓶颈得到改善的时候,系统的性能可以得到提高。对于 web 应用,系统的瓶颈往往会是数据库;系统满负荷运作的时候,数据库的 CPU 或者是磁盘 IO 是否跑满了。如果没有,那么很可能是说明瓶颈是在别的地方;如果是在应用,那么应用服务器的 CPU、内存、IO 等等也应该有所体现。找到系统的瓶颈,是需要反复做不同测试、优化,然后分析出来的。
延迟与吞吐
# 指标
外在指标
吞吐量 响应时间 错误率
内在指标
CPU 内存 DB 带宽流量 QPS RPS TPS - 每秒钟事务数
# 基本知识
Linux 是有文件句柄限制的,而且 Linux 默认不是很高,一般都是 1024,生产服务器用其实很容易就达到这个数量
ulimit -a 显示当前所有的资源限制
ulimit -n 设置内核可以同时打开的文件描述符的最大值
65535
cat /proc/sys/fs/file-max 系统总限制
cat /proc/sys/fs/file-nr 可以看到整个系统目前使用的文件句柄数量
cat /etc/sysctl.conf 系统配置文件
查看内核参数:执行 sysctl -a
命令,查看当前系统中生效的所有参数
sysctl -a
配置文件见
cat /etc/sysctl.conf
# see details in https://help.aliyun.com/knowledge_detail/39428.html
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_announce=2
net.ipv4.conf.all.arp_announce=2
# see details in https://help.aliyun.com/knowledge_detail/41334.html
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_syncookies = 0
net.ipv4.tcp_max_syn_backlog = 1024
net.ipv4.tcp_synack_retries = 2
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
kernel.sysrq = 1
参考:Linux 实例常用内核网络参数介绍与常见问题处理 (opens new window)
# 工具
# jmeter
下载地址:APACHE jmeter (opens new window)
# ab
ab 是单线程程序,只能利用单一 CPU,在给性能好的服务器端应用做压测时,往往跑 ab 的测试机负荷满了。ab 仅能是对单一 url 进行压测,而当我们仅仅只是反复测试单一 URL 时,出来的测试结果往往不能提现真实的压力场景
使用请参考:Apache ab
# siege
Github siege (opens new window)
-f FILE, --file=FILE参数指定一个输入文件,在文件中指定多个不同的url,然后对这多个url进行压测。
-i, --internet则是指定随机发送输入文件中的url