前面讲了如何配置Nginx虚拟主机,如何配置服务日志等很多基础的内容,大家可以去这里看看nginx系列文章:https://www.cnblogs.com/zhangweizhong/category/1529997.html 。

今天要说的是Nginx服务器高性能优化的配置,如何使Nginx轻松实现10万并发访问量。

通常来说,一个正常的 Nginx Linux 服务器可以达到 500,000 – 600,000 次/秒 的请求处理性能,如果Nginx服务器经过优化的话,则可以稳定地达到 904,000 次/秒 的处理性能,大大提高Nginx的并发访问量。

这里需要特别说明的是:

1、本文中所有列出来的配置都是在我的测试环境验证的,你需要根据你服务器的情况进行配置。

2、Nginx的优化需要进行进行压力测试,这里压力测试用的是Apache ab测试工具,不熟悉的可以看看我之前的文章:《如何使用apache ab性能测试工具进行压力测试

一、优化思路

分析:nginx要成功响应请求,会有如下两个限制:

1、nginx接受的tcp连接多,能否建立起来?

2、nginx响应过程,要打开许多文件,能否打开?

所以,只要我们针对上面两个限制进行优化,就能大幅提升Nginx的效率。

二、优化步骤

我们知道Nginx的工作流程如下图所示:

一、步骤:

1. 找到Nginx服务器瓶颈。

2. 优化配置。

3. 重新压力测试

注意:在配置修改之后务必要进行压力测试,这样可以观测到具体是哪个配置修订的优化效果最明显。通过这种有效测试方法可以为你节省大量时间。

二、找出Nginx的瓶颈

1. 打开Apache ab压力测试工具,输入如下命令:ab -n 200000 -c 5000 http://localhost:8080/index.html。

2. 查看Nginx 状态信息

在浏览器中输入nginx的地址:http://127.0.0.1/status,查看nginx的状态信息。

注意查看connections,waiting等参数信息。从而确定如何优化相关参数。

Nginx 状态信息打开的方法,这里就不细说了,不清楚的可以看我之前的文章,《Nginx总结(八)启用Nginx Status及状态参数详解

三、优化配置

根据上面的方法总结起来,一般来说nginx 配置文件中对优化比较有作用的为以下几项:

Nginx优化配置项:

1)优化 workprocess,cpu

worker_processes 8;      // 根据CPU核数配置
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;

2)事件处理模型优化

nginx的连接处理机制在于不同的操作系统会采用不同的I/O模型,Linux下,nginx使用epoll的I/O多路复用模型,在freebsd使用kqueue的IO多路复用模型,在solaris使用/dev/pool方式的IO多路复用模型,在windows使用的icop等等。 
要根据系统类型不同选择不同的事务处理模型,我们使用的是Centos,因此将nginx的事件处理模型调整为epoll模型。

events {
worker_connections 10240; //
use epoll;
}

说明:在不指定事件处理模型时,nginx默认会自动的选择最佳的事件处理模型服务。

3)设置work_connections 连接数

 worker_connections  10240; 

4)每个进程的最大文件打开数

worker_rlimit_nofile 65535;  # 一般等于ulimit -n系统值

5)keepalive timeout会话保持时间

keepalive_timeout  60;

6)GZIP压缩性能优化

gzip on;       #表示开启压缩功能
gzip_min_length 1k; #表示允许压缩的页面最小字节数,页面字节数从header头的Content-Length中获取。默认值是0,表示不管页面多大都进行压缩,建议设置成大于1K。如果小于1K可能会越压越大
gzip_buffers 4 32k; #压缩缓存区大小
gzip_http_version 1.1; #压缩版本
gzip_comp_level 6; #压缩比率, 一般选择4-6,为了性能
gzip_types text/css text/xml application/javascript;  #指定压缩的类型 gzip_vary on; #vary header支持

7)proxy超时设置

proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k

8)高效传输模式

sendfile on; # 开启高效文件传输模式。
tcp_nopush on; #需要在sendfile开启模式才有效,防止网路阻塞,积极的减少网络报文段的数量。将响应头和正文的开始部分一起发送,而不一个接一个的发送。

Linux系统内核层面:

Nginx要达到最好的性能,出了要优化Nginx服务本身之外,还需要在nginx的服务器上的内核参数。

这些参数追加到/etc/sysctl.conf,然后执行sysctl -p 生效。

1)调节系统同时发起的tcp连接数
net.core.somaxconn = 262144

2)允许等待中的监听

net.core.somaxconn = 4096

3) tcp连接快速回收

4) tcp连接重用

net.ipv4.tcp_tw_recycle = 1

net.ipv4.tcp_tw_reuse = 1

5)不抵御洪水攻击

net.ipv4.tcp_syncookies = 0

net.ipv4.tcp_max_orphans = 262144  #该参数用于设定系统中最多允许存在多少TCP套接字不被关联到任何一个用户文件句柄上,主要目的为防止Ddos攻击

6)最大文件打开数

ulimit -n 30000

最后

以上,就把Nginx服务器高性能优化的配置介绍完了,大家可以根据我提供的方法,每个参数挨个设置一遍,看看相关的效果。这些都是一点点试出来的,这样才能更好的理解各个参数的意义。

Nginx总结(九)Nginx服务器高性能优化的配置--轻松实现10万并发访问量的更多相关文章

  1. (转)nginx优化 实现10万并发访问量

    转自http://www.cnblogs.com/pricks/p/3837149.html 一般来说nginx配置文件中对优化比较有作用的为以下几项:worker_processes 8;1 ngi ...

  2. nginx优化 实现10万并发访问量

    一般来说nginx配置文件中对优化比较有作用的为以下几项:worker_processes 8;1 nginx进程数,建议按照cpu数目来指定,一般为它的倍数.worker_cpu_affinity ...

  3. IIS服务器能支持10万并发

    服务器能支持10万并发由于一个项目的访问量越来越大,从原来的几百个,增加到现在50多万个每天,所以阿里的服务器也扛不住了,于是就想办法,查了N多资料,总结了以下方法,才解决这问题,每天一共访问量50多 ...

  4. EasyDarwin流媒体服务器高性能优化方向

    我们在EasyDarwin开源流媒体服务器上做了很多的优化,包括前面说到的<EasyDarwin开源流媒体服务器将select改为epoll的方法>.<EasyDarwin开源流媒体 ...

  5. Nginx高并发配置思路(轻松应对1万并发量)

    测试机器为腾讯云服务器1核1G内存,swap分区2G,停用除SSH外的所有服务,仅保留nginx,优化思路主要包括两个层面:系统层面+nginx层面. 一.系统层面 1.调整同时打开文件数量 ulim ...

  6. Nginx的10万并发内核参数优化

    关于内核参数的优化: net.ipv4.tcp_max_tw_buckets = 6000timewait的数量,默认是180000.net.ipv4.ip_local_port_range = 10 ...

  7. 基于Nginx实现10万+并发,你应该做的Linux内核优化

    由于默认的linux内核参数考虑的是最通用场景,这明显不符合用于支持高并发访问的Web服务器的定义,所以需要修改Linux内核参数,是的Nginx可以拥有更高的性能: 在优化内核时,可以做的事情很多, ...

  8. NGINX轻松管理10万长连接 --- 基于2GB内存的CentOS 6.5 x86-64

    http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=190176&id=4234854 一 前言   当管理大量连接时,特别 ...

  9. NGINX轻松管理10万长连接

    先说说服务为什么使用HTTPs长连接技术?有如下几个原因:对响应时间要求较高:服务走的是公网,客户端与服务端的TCP建立的三次握手和断开的四次握手都需要40ms左右(真实数据包计算出来的),共需要80 ...

随机推荐

  1. k8s之Service详解-Service使用

    实验环境准备 在使用service之前,首先利用deployment创建出3个pod,注意要为pod设置app=nginx-pod的标签 创建deployment.yaml,内容如下 apiVersi ...

  2. Python之replace()方法失效

    1.背景 Titanic存活率预测案例: # 读取数据 df_train = pd.read_csv("./data/train.csv") df_train.head() OUT ...

  3. 【LeetCode】39. 组合总和

    39. 组合总和 知识点:递归:回溯:组合:剪枝 题目描述 给定一个无重复元素的正整数数组 candidates 和一个正整数 target ,找出 candidates 中所有可以使数字和为目标数  ...

  4. Http协议中的CharacterEncoding、Content-Encoding和Transfer-Encoding

    https://www.cnblogs.com/jinzhiming/p/5765672.html https://www.jianshu.com/p/e918a65b617f https://www ...

  5. spring boot中连接数据库报错500(mybatis)

    spring boot中连接数据库报错500(mybatis) pom.xml中的依赖 <!-- 集成mybatis--> <dependency> <groupId&g ...

  6. 漏洞复现|Dubbo反序列化漏洞CVE-2019-17564

    01漏洞描述 - Apache Dubbo支持多种协议,官方推荐使用Dubbo协议.Apache Dubbo HTTP协议中的一个反序列化漏洞(CVE-2019-17564),该漏洞的主要原因在于当A ...

  7. 流动的观察者模式 | Flutter 设计模式

    观察者模式,又称发布订阅模式,是一种行为设计模式--你可以定义一种订阅机制,可在对象事件发生时通知多个 观察 该对象的其他对象. 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主 ...

  8. Tag Helper 标签助手

    简介 标签助手是Razor 页面中自动生成HTML语句的可重用组件.标签助手对应特定的HTML标签,ASP.NET Core 包含大量与HTML标签对应的预定义标签助手. Razor页面中的标签助手作 ...

  9. STM32—TIMx实现编码器四倍频

    文章目录 一.储备知识 二.TIMx的编码器模式介绍 1.计数边沿设置 2.选择极性和使能 3.使能 4.计数方向 三.代码部分 一.储备知识 通过STM32的定时器编码器接口模式对编码器进行四倍频, ...

  10. 【Python机器学习实战】决策树和集成学习(二)——决策树的实现

    摘要:上一节对决策树的基本原理进行了梳理,本节主要根据其原理做一个逻辑的实现,然后调用sklearn的包实现决策树分类. 这里主要是对分类树的决策进行实现,算法采用ID3,即以信息增益作为划分标准进行 ...