当前位置: 首页 > news >正文

nginx 优化

=>worker_processes auto; 

worker_processes 定义了nginx对外提供web服务时的worker进程数。最优值取决于许多因素,包括(但不限于)CPU核的数量。不能确定的时候,将其设置为可用的CPU内核数将是一个好的开始(设置为“auto”将尝试自动检测它)。

=>worker_rlimit_nofile 65535; 

worker_rlimit_nofile 更改worker进程的最大打开文件数限制。如果没设置的话,这个值为操作系统的限制。设置后你的操作系统和Nginx可以处理比“ulimit -a”更多的文件,所以把这个值设高,这样nginx就不会有“too many open files”问题了。这个指令是指当一个nginx 进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit -n)与nginx 进程数相除,但是nginx 分配请求并不是那么均匀,所以最好与ulimit -n 的值保持一致。

=》Events模块
events模块中包含nginx中所有处理连接的设置。
events { 
    worker_connections 65535; 
    multi_accept on; 
    use epoll; 
} 

worker_connections 设置可由一个worker进程同时打开的最大连接数。每个进程允许的最多连接数, 理论上每台nginx 服务器的最大连接数为worker_processes*worker_connections。如果设置了上面提到的worker_rlimit_nofile,我们可以将这个值设得跟worker_rlimit_nofile值一样。(记住,最大客户数也由系统的可用socket连接数限制(~ 64K),所以设置不切实际的高没什么好处。) multi_accept 告诉nginx收到一个新连接通知后接受尽可能多的连接。 use 设置用于复用客户端线程的轮询方法。如果你使用Linux 2.6+,你应该使用epoll。如果你使用*BSD,你应该使用kqueue。 (值得注意的是如果你不知道Nginx该使用哪种轮询方法的话,它会选择一个最适合你操作系统的)

=>配置Nginx多核

Nginx默认没有开启利用多核CPU,我们可以通过增加worker_cpu_affinity配置参数来充分利用多核CPU。CPU是任务处理,计算最关键的资源,CPU核越多,性能就越好。

配置Nginx多核CPU,worker_cpu_affinity使用方法和范例:

1. 2核CPU,开启2个进程

worker_processes  2;
worker_cpu_affinity 01 10;
01表示启用第一个CPU内核,10表示启用第二个CPU内核
worker_cpu_affinity 01 10;表示开启两个进程,第一个进程对应着第一个CPU内核,第二个进程对应着第二个CPU内核。

2. 2核CPU,开启4个进程

worker_processes     4;
worker_cpu_affinity 01 10 01 10;
开启了四个进程,它们分别对应着开启2个CPU内核

3. 4核CPU,开户4个进程

worker_processes     4;
worker_cpu_affinity 0001 0010 0100 1000;
0001表示启用第一个CPU内核,0010表示启用第二个CPU内核,依此类推

4. 4核CPU,开启2个进程

worker_processes     2;
worker_cpu_affinity 0101 1010;
0101表示开启第一个和第三个内核,1010表示开启第二个和第四个内核

2个进程对应着四个内核

worker_cpu_affinity配置是写在/etc/nginx/nginx.conf里面的。
2核是 01,四核是0001,8核是00000001,有多少个核,就有几位数,1表示该内核开启,0表示该内核关闭。

5. 8核CPU,开户8个进程

worker_processes     8;
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;

worker_processes最多开启8个,8个以上性能提升不会再提升了,而且稳定性变得更低,所以8个进程够用了。
配置完毕后,重启nginx ,执行/etc/init.d/nginx restart

=>HTTP 模块

gzip on; 
gzip_disable "msie6"; 
# gzip_static on; 
gzip_proxied any; 
gzip_min_length 1000; 
gzip_comp_level 4; 
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

gzip 是告诉nginx采用gzip压缩的形式发送数据。这将会减少我们发送的数据量。

gzip_disable 为指定的客户端禁用gzip功能。我们设置成IE6或者更低版本以使我们的方案能够广泛兼容。

gzip_static 告诉nginx在压缩资源之前,先查找是否有预先gzip处理过的资源。这要求你预先压缩你的文件(在这个例子中被注释掉了),从而允许你使用最高压缩比,这样nginx就不用再压缩这些文件了(想要更详尽的gzip_static的信息,请点击这里)。

gzip_proxied 允许或者禁止压缩基于请求和响应的响应流。我们设置为any,意味着将会压缩所有的请求。

gzip_min_length 设置对数据启用压缩的最少字节数。如果一个请求小于1000字节,我们最好不要压缩它,因为压缩这些小的数据会降低处理此请求的所有进程的速度。

gzip_comp_level 设置数据的压缩等级。这个等级可以是1-9之间的任意数值,9是最慢但是压缩比最大的。我们设置为4,这是一个比较折中的设置。

gzip_type 设置需要压缩的数据格式。上面例子中已经有一些了,你也可以再添加更多的格式。

 

转载于:https://www.cnblogs.com/aqicheng/p/10299236.html

相关文章:

  • vue复习
  • 操作数组的方法
  • MySQL安装失败,提示需安装MicroSoft Visual C++ 2013 Redistributable
  • HashMap源码分析笔记(一)
  • redis 学习笔记-cluster集群搭建
  • Java定义三个点Object...
  • Python学习链接
  • js给图层添加动态样式
  • LaTeX :font size 修改字体大小的几种方式
  • 4.1链表
  • 信号(SIGNAL)与槽(SLOT)
  • 类的约束 和 异常处理
  • jzoj3208. 【JSOI2013】编程作业(kmp)
  • JS中arguments对象
  • (七)Knockout 创建自定义绑定
  • [Vue CLI 3] 配置解析之 css.extract
  • 《深入 React 技术栈》
  • 4个实用的微服务测试策略
  • CODING 缺陷管理功能正式开始公测
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • es6--symbol
  • Fastjson的基本使用方法大全
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • laravel with 查询列表限制条数
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • ucore操作系统实验笔记 - 重新理解中断
  • Unix命令
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 如何解决微信端直接跳WAP端
  • 入门到放弃node系列之Hello Word篇
  • 异步
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • 终端用户监控:真实用户监控还是模拟监控?
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (windows2012共享文件夹和防火墙设置
  • (分布式缓存)Redis持久化
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (三)模仿学习-Action数据的模仿
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (循环依赖问题)学习spring的第九天
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (一)为什么要选择C++
  • (转)EXC_BREAKPOINT僵尸错误
  • (转)JAVA中的堆栈
  • (转)scrum常见工具列表
  • (转)关于如何学好游戏3D引擎编程的一些经验
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?