最近一个项目着急上线,要求大并发,目标是支持一万并发,于是用压力测试软件jmeter测试了一番,结果总是让人不可思议,全是jmeter连接目标服务器超时请求,特此记录一下。如果哪位知道原因请留言告知,谢谢!
测试文件均采用phpinfo测试页面,页面大小大概70-80k。采用千兆交换机内网直连,jmeter压测服务器8核心96G内存,nginx服务器12核心96G内存。
网站架构比较简单,用的nginx+php-fpm,nginx(单个)和php-fpm(单个)在同一台服务器上,通过tcp转发请求到后端,所有参数(内核参数、nginx配置文件、php-fpm配置文件)均优化过。理论上服务器的硬件和网络也没有任何瓶颈。
第一次使用3500并发,42000用户数测试
9239个请求 超时,也就是说请求还没到nginx服务器,那么可能是nginx的问题导致的
第二次在架构上加一层前端lvs,也就是单台lvs转发到单台nginx,然后nginx转发到单台php-fpm上,并发和用户数保持不变
8336个请求超时,比前端直接用nginx好点,但是这结果太坑
第三次在lvs后面再加一台nginx和php-fpm,也就是单台lvs转发两台nginx,然后nginx转发各自的php-fpm上,并发和用户数保持不变
6816个请求超时, 虽然比上面结果好了一点,但是这个明显不是我要的,这里也说明跟后端的php-fpm没关系了,如果是后端瓶颈应该是502或者504之类的错误,要不就是jmeter软件本身的问题导致
第四次去掉了lvs这一层,在nginx服务器上绑定一个IP别名,还是使用一个nginx, 同一个域名 使用两个虚拟主机配置,只是监听的IP地址不一样而已,用DNS轮询方式,注意如果绑定hosts只会请求第一个绑定的IP上,那就没效果了。继续3500并发,42000用户测试
0个请求超时,这才是我需要的效果啊!说明和单台nginx的配置、jmeter软件本身也没啥关系了。以后的测试都去掉了lvs这一层。而且全部都变成了单台nginx
第五次还原到单条A记录方式,减少一半的并发数,使用1750并发,42000用户数测试
800个请求超时,郁闷中~~
第六次还原到单条 A记录方式,减少一半的并发数和用户数, 使用1750并发,21000用户数测试
537个请求超时,继续郁闷中~~
第七次闲的无聊直接压测单台nginx的静态页面index.html,并发和用户数还原到最开始的
0个请求超时,结果不出所料
第八次使用单台nginx的fastcgi_cache缓存index.php页面,使用1750并发,42000用户数测试
1280个请求超时,这里我觉得再怎么说应该也会比第五次的结果好吧!没想到超时请求更多,尼玛,请原谅我三观尽毁~~
第九次是基于上面用户数减一半的测试结果,不出意外应该会减少一半吧
354个请求超时,数量比上面少了很多,是nginx那台服务器扛不住吗?
第十次使用单台nginx的proxy_store缓存index.php页面,配置肯定都正确,看看 1750并发,42000用户数测试结果吧
2171个请求超时,此时心中一万只草泥马掠过~
有知道答案的哥们欢迎留言啊~
测试文件均采用phpinfo测试页面,页面大小大概70-80k。采用千兆交换机内网直连,jmeter压测服务器8核心96G内存,nginx服务器12核心96G内存。
网站架构比较简单,用的nginx+php-fpm,nginx(单个)和php-fpm(单个)在同一台服务器上,通过tcp转发请求到后端,所有参数(内核参数、nginx配置文件、php-fpm配置文件)均优化过。理论上服务器的硬件和网络也没有任何瓶颈。
第一次使用3500并发,42000用户数测试
9239个请求 超时,也就是说请求还没到nginx服务器,那么可能是nginx的问题导致的
第二次在架构上加一层前端lvs,也就是单台lvs转发到单台nginx,然后nginx转发到单台php-fpm上,并发和用户数保持不变
8336个请求超时,比前端直接用nginx好点,但是这结果太坑
第三次在lvs后面再加一台nginx和php-fpm,也就是单台lvs转发两台nginx,然后nginx转发各自的php-fpm上,并发和用户数保持不变
6816个请求超时, 虽然比上面结果好了一点,但是这个明显不是我要的,这里也说明跟后端的php-fpm没关系了,如果是后端瓶颈应该是502或者504之类的错误,要不就是jmeter软件本身的问题导致
第四次去掉了lvs这一层,在nginx服务器上绑定一个IP别名,还是使用一个nginx, 同一个域名 使用两个虚拟主机配置,只是监听的IP地址不一样而已,用DNS轮询方式,注意如果绑定hosts只会请求第一个绑定的IP上,那就没效果了。继续3500并发,42000用户测试
0个请求超时,这才是我需要的效果啊!说明和单台nginx的配置、jmeter软件本身也没啥关系了。以后的测试都去掉了lvs这一层。而且全部都变成了单台nginx
第五次还原到单条A记录方式,减少一半的并发数,使用1750并发,42000用户数测试
800个请求超时,郁闷中~~
第六次还原到单条 A记录方式,减少一半的并发数和用户数, 使用1750并发,21000用户数测试
537个请求超时,继续郁闷中~~
第七次闲的无聊直接压测单台nginx的静态页面index.html,并发和用户数还原到最开始的
0个请求超时,结果不出所料
第八次使用单台nginx的fastcgi_cache缓存index.php页面,使用1750并发,42000用户数测试
1280个请求超时,这里我觉得再怎么说应该也会比第五次的结果好吧!没想到超时请求更多,尼玛,请原谅我三观尽毁~~
第九次是基于上面用户数减一半的测试结果,不出意外应该会减少一半吧
354个请求超时,数量比上面少了很多,是nginx那台服务器扛不住吗?
第十次使用单台nginx的proxy_store缓存index.php页面,配置肯定都正确,看看 1750并发,42000用户数测试结果吧
2171个请求超时,此时心中一万只草泥马掠过~
有知道答案的哥们欢迎留言啊~