Nginx之大并发服务器架构实战技法二

服务器
我们总体目标是,把一台普通的PC机nginx服务器单机,在不用其他架构和手段的情况下,单使用我们上次的理论把他优化成1万并发以上。

在上一篇文章里,我介绍了一下nginx服务器解决大并发的基本思路,现在我就要运用这些理论知识,一起来看看实际效果咋样。我们总体目标是,把一台普通的PC机nginx服务器单机,在不用其他架构和手段的情况下,单使用我们上次的理论把他优化成1万并发以上。

[[221910]]

Nginx 之大并发服务器架构实战技法二

首先,来对这台 nginx 服务器做一下压力测试。在这里压力测试我们使用使用apache自带的ab小工具。我们先测试一下nginx 的并发性咋样。先来1000个并发,测试50000 的请求。测试结果如下图所示:

1000并发5万请求的测试结果

1000个并发显示3000多的报错

通过结果显示80%是在100毫秒内相应。90%-95%是在1秒左右相应,其中有1%超过了3秒。5万个请求,有3000多个出错。这个请求情况并不算优秀。再压一次2000个并发,8万个请求,压力测试结果显示如下:

显示报错信息:Too many open files

90%的相应都在3秒以上

通过上面的测试结果,我们看到出问题了。有一个报错: “socket: Too many open files”,而且90以上都是在3秒以上响应。所谓高并发,没有什么神奇的东西。只要你服务器硬盘快。CPU强,内存大。硬件条件要够。这个和比武一样,首先要有硬件条件,然后才能讲技巧。具体到我们这里,我们的硬件够,2000个并发应该不是问题,但是此处确提示:"socket: Too many open files",其实这个报错就是我们优化的一个重要的启发。它说打开的文件太多了。我们知道,在linux 中,简介即是美,一切的操作,无论硬盘,软盘还是打印机等都当成是文件来处理。其实质是,每来一个请求,都要建立一个socket 连接,在linux 看来,就是把网卡看成了一个文件。1000多个并发,打开了1000多次次,打开的太多了。接收不了,所以报"Too many open files"错误。对于nginx 服务器,默认情况下,只允许打开1024个描述符。做高并发服务器,一下就用光了。所以我们需要把服务器允许打开的描述符变大些,调节成2000.: “ulimit -n 2000”,ab再 测试一下。

服务器允许打开描述符配置

结果发现,发现80000的请求,70000多个请求失败,那么这时候,基本上2000个并发的测试已经是撑不住了。

在刚才的测试中,看结果显示,有多少个等待的。什么叫等待呢?就类似学生去食堂买饭,好多人在等着买饭。

我们当然是希望等待越少越好。

结果中显示等待

工欲善其事,必先利其器。我们用ab小工具压2000,发现也可以压。但是我们想更详细的观察服务器的状态。比方说当前有多少客户端正在连接中、并发是多少,有多少处于等待状态。所以我们要借助与nginx 的一个统计工具来方便我们做测试。有一个选项是内建的一个nginx 的观察统计模块模块:--with-http_stub_status_module,在编译nginx 的时候,只需要指定一下就可以了。便于我们观察每时每刻到底有多少并发,多少等待。这样便于我们调优。

nginx 统计模块配置

我们现在在压力测一下。2000个并发,请求10万次,通过 观察统计模块,我们发现显示的有点异样。我们请求的是 2000个并发,但是这里显示,最多只有600多并发的样子。在看看ab 的结果,10万个并发,9万多的失败率。这个结果基本上就没法接受了。

2000个并发,结果实际显示才几百并发

10万的请求9万多失败

nginx 不尽人意,2000个并发就错误率非常高了。那么失败没有关系,正因为它失败了。而且并发低,才需要我们做优化。在这里,我们还没有对nginx 做优化处理,现在我们只是完成了压力测试和它的统计信息的观察。那么在下一篇文章,我们将在这个基础上,针对这个压力测试结果做优化。

 

责任编辑:武晓燕 来源: 服务器/架构/Nginx
相关推荐

2018-10-12 09:06:37

2018-02-09 08:40:37

Nginx服务器架构

2019-12-24 14:42:51

Nginx服务器架构

2019-09-10 15:22:17

Nginx服务器架构

2019-01-10 11:12:15

Nginx服务器架构

2020-05-12 21:17:18

Nginx服务器架构

2009-12-24 16:15:17

2020-10-16 16:40:26

Linux高并发命令

2018-02-07 10:24:01

Nginx服务器架构

2018-03-01 10:03:37

服务器架构高并发

2017-03-06 09:26:56

Nginx服务器 SSL

2018-08-13 09:09:35

Nginx服务器内部

2021-09-10 10:07:17

Nginx虚拟主机服务器

2009-12-01 13:25:24

服务器并发

2010-09-06 17:08:23

2010-02-06 10:24:52

CentOS Ngin

2018-05-18 09:43:37

服务器架构大型网站

2021-01-29 14:41:43

Nginx直播服务器rtmp

2018-02-08 08:52:37

2024-01-03 10:03:26

PythonTCP服务器
点赞
收藏

51CTO技术栈公众号