在阿里云帮朋友配了台新的服务器,采用NodeJS作为后端。正好可以用来做压力测试,试试NodeJS的性能。以下介绍了我使用阿里云的性能测试服务来给网站做压力测试的过程。以及为了增大并发对系统和Nginx做的配置工作。

服务器硬件配置情况

因为只是用作一个小任务,用了个性能比较小的服务器。买的服务器硬件配置如下:

  • CPU:1核
  • 内存:4096MB
  • 操作系统:CentOS 7.0 64位
  • 带宽:1Mbps

服务器系统配置

让操作系统允许打开更多的文件

1
ulimit -n 65535

socket的最大连接数的修改

一个请求从浏览器发送给服务器,会和服务器建立一个socket连接。如果要去并发达到1万,那么操作系统会开1万个socket。而操作系统对socket最大连接数是有限制的。我们这里以CentOS为例子,来修改默认的socket的最大连接数。

1
sudo echo 10000 > /proc/sys/net/core/somaxconn

系统默认值是128,现在改成10000

加快系统的tcp回收

系统默认tcp在断开后还会存活一段时间,我们要让tcp在断开后尽早回收。

1
sudo echo  1 > /proc/sys/net/ipv4/tcp_tw_recycle

此命令是将tcp_tw_recycle文件的内容替换为1,系统默认是0。

允许空的tcp回收利用

1
echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse

让系统不做洪水抵御保护

当系统检测到80端口在大量的请求时,会自动给返回信息中增加cookie,来验证客户端身份,从而避免受到攻击,但这时只是高并发,并不是攻击,所以要把这个抵御机制给关闭。

1
echo 0 > /proc/sys/net/ipv4/tcp_syncookies

系统默认是1。

这个修改强烈建议在做完压力测试后改回来。真实情况中,是需要通过cookie来抵御洪水攻击的。

Nginx配置

增加完socket这边的并发后,还需要修改Nginx的配置。Nginx使用默认配置的话,只能接受1024个并发请求。我们可以通过修改配置来增加并发。

找到nginx.conf,位置一般在/etc/nginx/nginx.conf。

  1. 在Nginx全局的配置中worker_processes 1的下面加上worker_rlimit_nofile 10240
    允许Nginx的子进程可以打开10240个文件。
  2. event中,worker_connections从1024改为10000。

NodeJS服务器情况

我们的nodejs服务器使用了express框架。本次测试中,只返回一个静态的首页,但是为了此次测试的一般性,我们不去做缓存之类的优化。

开始测试

假设你已经有一台阿里云的服务器,进入阿里云后台,点击性能测试服务PTS。

第一步:增加一个监控服务器

点击“监控集”选项。根据用户标识以及此文档来添加监控服务器。

第二步:新增脚本

阿里云做的还是挺方便的,脚本的配置非常简单,其他可以都不管,在输入事务的输入框中输入事务名(随便),然后摁tab键输入请求链接。这里可以直接输入http://你服务器的ip。点击保存。

第三步:开始测试

新增脚本成功后,回到脚本列表页面,在刚才新建的脚本那一行选择【快速启动】。启动的时候会问你想要的并发用户数量多少,因为我穷,所以选择了1000个并发,花了36元软妹币。

测试正在进行的页面如下所示:

01

第四步:查看测试报告

结束后,点击【测试报告】,查看业务指标:

02

大功告成。失败率很低,在1000并发的情况下成功率可以到99.7%。但是TPS好像有点小。接下去就可以根据自己的业务逻辑开始进行各种优化工作了。

并发是指在很短时间内涌入服务器的请求,和PV并不是一件事情。如果服务器每秒都有1000并发的话,那么一天的PV会达到8千6百万。
实际情况中,在这种情况下肯定是采取多台服务器了,不可能一台服务器撑着。


参考文章:单机 nginx 应对高并发处理