nginx 服务器并发优化
apache 提供的 ab 可以对服务器进行压力测试,
安装 ab: apt-get install apache2-utils
安装完后,ab 在目录 /usr/bin/ 下的。
执行: ab -c 并发数 -n 请求数 请求的URL 如:
ab -c 2000 -n 50000 http://192.168.137.47/ 表示对 http://192.168.137.47/ 进行50000次请求,并发数为 2000
我运行的机器不是在 192.168.137.47 上,运行时报了一个错误: socket: Too many open files
运行: ulimit -n 出现结果 1024,说明最大允许打开的文件描述符的数量为 1024,我们上面并发数为 2000,比1024大,运行下面的命令,设置一个较大的值:
ulimit -n 20000
先运行小一点的压力测试参数,看看正确返回时, ab 给出的测试报告。如: ab -c 200 -n 5000 http://192.168.137.47/
Server Software: Tengine/2.2.2 # 我用的是 Tengine (https://tengine.taobao.org/ 淘宝对 nginx 的扩展)
Server Hostname: 192.168.137.47
Server Port: 80
Document Path: /
Document Length: 179 bytes
Concurrency Level: 200 # 命令中 -c 的值
Time taken for tests: 16.161 seconds # 总共花费的时间
Complete requests: 5000 # 命令中 -n 的值
Failed requests: 0 #失败的请求数
Total transferred: 2110000 bytes # 总共传输的数据量
HTML transferred: 895000 bytes # 总共的 HTML 内容的传输量
Requests per second: 309.38 [#/sec] (mean) # 吞吐率(平均值)
Time per request: 646.447 [ms] (mean) # 平均一次请求所花费的时间,即用户的等待时间
Time per request: 3.232 [ms] (mean, across all concurrent requests) # 服务器平均一次请求处理时间,吞吐率的倒数
Transfer rate: 127.50 [Kbytes/sec] received # 平均每秒网络上的流量,可以帮助排除是否存在网络流量过大导致响应时间延长的问题
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 20 111.8 1 1002
Processing: 4 595 596.6 455 3669
Waiting: 1 593 595.9 452 3608
Total: 4 616 604.5 483 3670
Percentage of the requests served within a certain time (ms)
50% 483 # 50% 的用户等待时间不超过 483 ms
66% 778 # 66% 的用户等待时间不超过 778 ms
75% 1021
80% 1119
90% 1484
95% 1804
98% 2137
99% 2337
100% 3670 (longest request)
当加大参数时,如 ab -c 2000 -n 50000 http://192.168.137.47/
这时出现了: apr_socket_recv: Connection reset by peer (104) 这个错误(在命令里加上 -r 参数后,就不会报这个错了,而是会一直测试下去,直到达到 -n 设置的请求的数量),网上有人说是 ab 安装的问题,也可能是 ab 这个作为请求的客户端撑不住了。在高并发的情况下,如果服务器撑不住了,应该是服务器端报错,体现在ab测试完的报告里。因为我用的是虚拟机,一台真实电脑上,开了4台虚拟机(两台 tomcat 运行 web 服务,一台 nginx 服务器作负载均衡,一台运行压力测试的命令)。需要对 ab 客户机做一些优化(下面中的第3,4,5,8点)。下面是对 nginx 服务器进行优化:
高并发优化思路:

1. keepalive_timeout 默认值是 65,我改成 0 后,ab 端反而很快就报 apr_socket_recv: Connection reset by peer (104) 这个错误了,值为 65 时,报这个错误的时间会较晚,不知道是不是我其实只有一台真实机器的原因。
2. 增大 nginx 配置文件中的 worker_connections 数量
3. echo 50000 > /proc/sys/net/core/somaxconn # 最大连接数
4. echo 1 > /proc/sys/net/ipv4/tcp_tw_recycle # 加快 tcp 连接的回收
5. echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse # 空的 tcp 允许回收
6. echo 0 > /proc/sys/net/ipv4/tcp_syncookies # 不做洪水抵御
7. 增大 nginx 配置文件中的 worker_rlimit_nofile 的值,比如: 10000
8. ulimit -n 20000
注:上面的一些设置,可以通过修改配置文件(/etc/sysctl.conf)达到:
#参数决定TIME_WAIT状态的sockets总数量,可根据连接数和系统资源需要进行设置。
再次运行 ab -c 2000 -n 50000 http://192.168.137.47/, 发现能正常返回报告了,因为是单台机器上装的虚拟机,当并发达到一定数量时,不管怎么调,最后总会出错。
nginx 服务器并发优化的更多相关文章
- Nginx总结(九)Nginx服务器高性能优化的配置--轻松实现10万并发访问量
前面讲了如何配置Nginx虚拟主机,如何配置服务日志等很多基础的内容,大家可以去这里看看nginx系列文章:https://www.cnblogs.com/zhangweizhong/category ...
- 修改Linux内核参数提高Nginx服务器并发性能
当linux下Nginx达到并发数很高,TCP TIME_WAIT套接字数量经常达到两.三万,这样服务器很容易被拖死.事实上,我们可以简单的通过修改Linux内核参数,可以减少Nginx服务器 的TI ...
- Nginx 之六: Nginx十万并发优化
操作 操作 Nginx 之六: Nginx十万并发优化
- nginx高并发优化
一、一般来说nginx 配置文件中对优化比较有作用的为以下几项: 1. worker_processes 8; nginx 进程数,建议按照cpu 数目来指定,一般为它的倍数 (如,2个四核的cpu ...
- Nginx高并发优化方案
原网址: https://blog.csdn.net/HoeWang/article/details/81221463 一.一般来说nginx 配置文件中对优化比较有作用的为以下几项: 1. work ...
- Nginx服务器性能优化与安全配置实践指南
转载自:https://www.bilibili.com/read/cv16151784?spm_id_from=333.999.0.0 1.引言 1.1 目的 为了更好的指导部署与测试艺术升系统ng ...
- nginx 高并发优化参数
关于内核参数的优化: net.ipv4.tcp_max_tw_buckets = 6000timewait的数量,默认是180000.net.ipv4.ip_local_port_range = 10 ...
- Linux下Apache服务器并发优化
Linux/UnixLinux系统下Apache 并发数的优化 Apache Http服务器采用prefork或者是worker两种并发控制模式. preforkMPM 使用多个子进程,每个子进程只 ...
- Nginx 之并发优化
客户端/服务端 连接数 ulimit -n 100000 nginx 链接数 10240 个 worker_connections 10240;允许打开文件数worker_processes 1;wo ...
随机推荐
- eclipse自动提示功能没了的解决办法
由于重新配置了环境,并且eclipse也是装的4.2的,今天用的时候发现了,居然没有自动提示功能,也就是当一个对象居然点不出他的相关方法.后来网上搜索了下,成功的 办法是. 1.我window-> ...
- 数据库的join查询
假设我们有两张表. Table A 是左边的表. Table B 是右边的表. 其各有四条记录,其中有两条记录是相同的,如下所示: id name id name -- ---- -- ---- 1 ...
- 影响Cache的几个HTTP头信息【转载http://hi.baidu.com/feilala_fly/item/f79eca08fbf389026c9048a7】
Http的Cache机制总共有4个组成部分: Cache-Control.Last-Modified(If-Modified-Since).Etag(If-None-Match) .Expires 服 ...
- Oracle 12c 多租户 CDB 与 PDB 备份
一. CDB 备份 1.1 只备份CDB 只备份CDB数据库需要具有SYSDBA或SYSBACKUP权限用户连接到CDB的root环境下,执行backupdatabase root命令即可完成对C ...
- IAR常用快捷键及技巧
1.复制和粘贴几行的部分代码 需求:有时候我们需要复制几行代码的后半部分,不需要复制前半部分.方法:按住Alt键,再用鼠标拖动就可以复制和粘贴后半部分 [END/2015-09-23] 2.复制一行 ...
- SSH不允许Root登陆的方法
不允许Root登陆的方法如下: vim /etc/ssh/sshd_config 把PermitRootLogin yes 改成: PermitRootLogin no 然后重启sshd服务: Ser ...
- makefile 基础知识
$@ 目标文件名 $< 第一个依赖文件名 $^ 规则所有依赖文件列表 如果不想让执行语句被打印出来,就在语句前面加上@符号 模式规则 %.o:%.c 后缀规则 .c.o 生成单进程的Mak ...
- Skyline实现橡皮筋效果绘制矩形框
这种类似于框选的效果用的比较普遍,一般三维平台和GIS平台都提供了支持接口,可是Skyline就是这么傲娇! 思路是这样的:绘制出的矩形框应该是一直与屏幕边框平行的,也就是矩形框的实际旋转角度是等于摄 ...
- python 基础 进程与线程
多进程 使用multipprocessing模块创建多进程 multiprocessing模块提供了一个Process类来描述一个进程对象.创建子进程时,需要传入一个执行函数和函数的参数.用start ...
- [poj3264]rmq算法学习(ST表)
解题关键:rmq模板题,可以用st表,亦可用线段树等数据结构 log10和log2都可,这里用到了对数的换底公式 类似于区间dp,用到了倍增的思想 $F[i][j] = \min (F[i][j - ...