使用apache httd的ab工具可以进行压力测试。-n 2000
总的请求数,-c 200
是并发数,最高并发数为20000。
ab -n 2000 -c 200 http://localhost/
如果访问服务器的请求和并发量很大(如请求数量超过20万),系统会认为受到了SYN flood攻击,从而采取保护措施。在高并发测试的时候,会出现一下错误:
apr_socket_recv: Connection reset by peer (104)
可以设置内核参数,关闭保护功能
vim /etc/sysctl.conf
增加一下配置:
net.ipv4.tcp_syncookies = 0
让配置生效
sysctl -p
nginx不愧是性能高手,设置好worker_processes和worker_connections,内核关闭net.ipv4.tcp_syncookies,静态文件可轻松达到20000并发量。
ab -n 200000 -c 20000 http://localhost/
tomcat在开启apr的情况下,静态文件处理能力约为nginx的1/10。还是有很大差距。
很多客户会要求高并发量,但要支撑高并发有很多限制条件,比如带宽。
假如10000并发量,每秒访问一次,每次请求的文件大小为10KB,则数据量100M,大约需要1000Mbps带宽。而一般服务器有10Mbps已经不错了,通常一个机柜(约20台服务器)共享100Mbps带宽。
10000个人使用,并不代表10000个并发,如果前后错开10秒,相当于1000并发。如果10000个人平均每2分钟点击一次,则平均并发数为100。当然一次点击可能不止一个请求,一个页面可能会包含很多图片、js、css等文件。