如何搭建Nginx单机百万QPS性能环境?

2026-06-10 18:5210阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计857个文字,预计阅读时间需要4分钟。

如何搭建Nginx单机百万QPS性能环境?

一、背景最近公司推出了一系列物联网产品,主要用于物联网通信。主要使用的协议是MQTT,内部权限和关系等业务逻辑通过HTTP实现。为了在本地测试中模拟百万用户同时在线的需求,需要进行相应的测试准备。

一、背景

  最近公司在做一些物联网产品,物物通信用的是MQTT协议,内部权限与内部关系等业务逻辑准备用HTTP实现。leader要求在本地测试中要模拟出百万用户同时在线的需求。虽然该产品最后不一定有这么多,但是既然要求到了就要模拟出来。MQTT用的是erlang的emqtt,这个已经有同事测试在本机可以百万用户在线了。不过HTTP服务器就一直很难。

  所以这篇博客准备介绍如何在本地模拟一台支持百万qps的HTTP服务器。简单说一下,MQTT的百万在线是指支持百万TCP连接,连接后,只要保持心跳包就可以了,这个比较简单,一般稍微调整一下Linux一些系统参数就可以了。而HTTP的百万在线不一样。HTTP是发送一个连接请求后获得数据然后就关闭连接,百万并发就比较麻烦,而且这个概念用在这里不是很合适。现在比较通用的一种参考值是每秒处理的并发数。就是QPS。(这一点就很多人不理解。包括我leader,这个要在接下来慢慢解释给他听)

二、准备

  我以前也没有搞过高并发的网络,最近看了一些博客文章,准备用一个最简单的模型来实现这个百万QPS的模拟。后台我是用Java写的,Tomcat服务器。这种带业务的请求,单机绝对不可能到达百万QPS(1m-qps)。网上所说的1m-qps测试环境是一个静态的网页来测试的。既然带业务的github.com/wg/wrk.git 然后 make

四、运行

  启动nginx

  启动wrk 进行并发请求测试

./wrk -t88 -c10000 -d20s "127.0.0.1:888/a.html"

  top结果图

如何搭建Nginx单机百万QPS性能环境?

  wrk 结果图

  基本在120万QPS。nginx设置一些调优参数,加上如果不在本机上运行wrk的话,150万QPS基本是没有问题的。

五、要达到1m-qps需要注意

 Linux 参数一定要进行调整 (坑: 这个坑是比较小的,基本提到高并发Linux,就会有提到要修改这些参数了)

 Nginx 里 access_log off; 日志功能一定要关闭 (坑: 这个影响还是比较大的,由于Nginx日志是写在磁盘的,而我服务器的磁盘是普通的磁盘,所以这里会成为磁盘IO瓶颈,所以一开始用最简单的配置,然后根据硬件的不同修改参数。有些参数在其他机器很快,在我的机器就很慢)

 测试并发工具最好用我上面的wrk进行测试 (坑: 一开始用apache的ab进行测试,后面发现ab测试高性能时不行,最后使用wrk工具)

 最好在本机测试wrk (坑: 从上面的wrk图可以看到,传输的数据在每秒262MB左右,普通的100M网卡是远远达不到的。虽然我的a.html只有一个字节,但是serverfault.com/questions/408546/how-to-achieve-500k-requests-per-second-on-my-webserver​​

  ​​lowlatencyweb.wordpress.com/2012/03/20/500000-requestssec-modern-github.com/wg/wrk​​

作者:无脑仔的小明




本文共计857个文字,预计阅读时间需要4分钟。

如何搭建Nginx单机百万QPS性能环境?

一、背景最近公司推出了一系列物联网产品,主要用于物联网通信。主要使用的协议是MQTT,内部权限和关系等业务逻辑通过HTTP实现。为了在本地测试中模拟百万用户同时在线的需求,需要进行相应的测试准备。

一、背景

  最近公司在做一些物联网产品,物物通信用的是MQTT协议,内部权限与内部关系等业务逻辑准备用HTTP实现。leader要求在本地测试中要模拟出百万用户同时在线的需求。虽然该产品最后不一定有这么多,但是既然要求到了就要模拟出来。MQTT用的是erlang的emqtt,这个已经有同事测试在本机可以百万用户在线了。不过HTTP服务器就一直很难。

  所以这篇博客准备介绍如何在本地模拟一台支持百万qps的HTTP服务器。简单说一下,MQTT的百万在线是指支持百万TCP连接,连接后,只要保持心跳包就可以了,这个比较简单,一般稍微调整一下Linux一些系统参数就可以了。而HTTP的百万在线不一样。HTTP是发送一个连接请求后获得数据然后就关闭连接,百万并发就比较麻烦,而且这个概念用在这里不是很合适。现在比较通用的一种参考值是每秒处理的并发数。就是QPS。(这一点就很多人不理解。包括我leader,这个要在接下来慢慢解释给他听)

二、准备

  我以前也没有搞过高并发的网络,最近看了一些博客文章,准备用一个最简单的模型来实现这个百万QPS的模拟。后台我是用Java写的,Tomcat服务器。这种带业务的请求,单机绝对不可能到达百万QPS(1m-qps)。网上所说的1m-qps测试环境是一个静态的网页来测试的。既然带业务的github.com/wg/wrk.git 然后 make

四、运行

  启动nginx

  启动wrk 进行并发请求测试

./wrk -t88 -c10000 -d20s "127.0.0.1:888/a.html"

  top结果图

如何搭建Nginx单机百万QPS性能环境?

  wrk 结果图

  基本在120万QPS。nginx设置一些调优参数,加上如果不在本机上运行wrk的话,150万QPS基本是没有问题的。

五、要达到1m-qps需要注意

 Linux 参数一定要进行调整 (坑: 这个坑是比较小的,基本提到高并发Linux,就会有提到要修改这些参数了)

 Nginx 里 access_log off; 日志功能一定要关闭 (坑: 这个影响还是比较大的,由于Nginx日志是写在磁盘的,而我服务器的磁盘是普通的磁盘,所以这里会成为磁盘IO瓶颈,所以一开始用最简单的配置,然后根据硬件的不同修改参数。有些参数在其他机器很快,在我的机器就很慢)

 测试并发工具最好用我上面的wrk进行测试 (坑: 一开始用apache的ab进行测试,后面发现ab测试高性能时不行,最后使用wrk工具)

 最好在本机测试wrk (坑: 从上面的wrk图可以看到,传输的数据在每秒262MB左右,普通的100M网卡是远远达不到的。虽然我的a.html只有一个字节,但是serverfault.com/questions/408546/how-to-achieve-500k-requests-per-second-on-my-webserver​​

  ​​lowlatencyweb.wordpress.com/2012/03/20/500000-requestssec-modern-github.com/wg/wrk​​

作者:无脑仔的小明