nginx worker_processes 配置
搜索到原作者的话:
As a general rule you need the only worker with large number of
worker_connections, say 10,000 or 20,000.
However, if nginx does CPU-intensive work as SSL or gzipping and
you have 2 or more CPU, then you may set worker_processes to be equal
to CPU number.
Besides, if you serve many static files and the total size of the files
is bigger than memory, then you may increase worker_processes to
utilize a full disk bandwidth.
Igor Sysoev
一般一个进程足够了,你可以把连接数设得很大。
如果有SSL、gzip这些比较消耗CPU的工作,而且是多核CPU的话,可以设为和CPU的数量一样。
或者要处理很多很多的小文件,而且文件总大小比内存大很多的时候,也可以把进程数增加,
以充分利用IO带宽(主要似乎是IO操作有block)。
根据我配置实践,
服务器是“多个CPU+gzip+网站总文件大小大于内存”的环境,worker_processes设置为CPU个数的两倍比较好。
分享二:
最近PPC经常出现502错误,网页经常无法打开,所以本人决定对Nginx进行深入折腾!
Nginx本身没有挂掉,否则不会出现502的错误信息,所以原因一定在Nginx的设置上。
经过我查阅资料和测试,发现有可能是worker_processes的参数设置不当引起的。
worker_processes默认情况下为1,一般情况下不用修改,但考虑到实际情况,可以修改这个数值,以提高性能;
官方的建议是修改成CPU的内核数,这里引用一段翻译过的文章:
worker_processes指明了nginx要开启的进程数,
据官方说法,一般开一个就够了,多开几个,可以减少机器io带来的影响。
据实践表明,nginx的这个参数在一般情况下开4个或8个就可以了,再往上开的话优化不太大。
据另一种说法是,nginx开启太多的进程,会影响主进程调度,所以占用的cpu会增高。
经过我测试发现,
这个数字是不能乱设置的,如果网站没有出现io性能问题,最好不要修改,采用默认的1即可,
如果非要设置,必须要和CPU的内核数匹配,否则要么就假死(主要是Windows),要么就出现502的错误(主要是Linux)。
我的电脑是双核的,按理说应该是2,但是实际上应该是4,因为是双线程的。测试结果如下:
1、worker_processes为1,线程打开2个,有一个是主线程,运行很稳定。
2、worker_processes为2,线程打开3个,有一个是主线程,1分钟左右挂掉
(假死,无法打开网页,浏览器一直处于载入中)。
3、worker_processes为4,线程打开5个,有一个是主线程,运行很稳定。
4、worker_processes为8,线程打开9个,有一个是主线程,和2一样,1分钟左右挂掉。
配置参考
配置1:
4 CPU (4 Core) + 4 worker_processes (每个worker_processes 使用1个CPU)
[reistlin@reistlin.com ~]$ cat /proc/cpuinfo | grep processor
processor : 0
processor : 1
processor : 2
processor : 3
worker_processes 4;
worker_cpu_affinity 0001 0010 0100 1000;
配置2:
8 CPU (8 Core) + 8 worker_processes (每个worker_processes 使用1个CPU)
[reistlin@reistlin.com ~]$ cat /proc/cpuinfo | grep processor
processor : 0
processor : 1
processor : 2
processor : 3
processor : 4
processor : 5
processor : 6
processor : 7
worker_processes 8;
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
配置3:
16 CPU (16 Core) + 16 worker_processes (每个worker_processes 使用1个CPU)
[reistlin@reistlin.com ~]$ cat /proc/cpuinfo | grep processor
processor : 0
processor : 1
processor : 2
processor : 3
processor : 4
processor : 5
processor : 6
processor : 7
processor : 8
processor : 9
processor : 10
processor : 11
processor : 12
processor : 13
processor : 14
processor : 15
worker_processes 16;
worker_cpu_affinity
0000000000000001 0000000000000010 0000000000000100 0000000000001000 0000000000010000 0000000000100000 0000000001000000 0000000010000000 0000000100000000 0000001000000000 0000010000000000 0000100000000000 0001000000000000 0010000000000000 0100000000000000 1000000000000000;
Nginx worker_cpu_affinity 设置
根据 Nginx Wiki 上的资料显示:
worker_cpu_affinity
Syntax: worker_cpu_affinity cpumask [cpumask...]
Default: none
Linux only.
With this option you can bind the worker process to a CPU, it calls sched_setaffinity().
For example,
worker_processes 4; worker_cpu_affinity 0001 0010 0100 1000;
Bind each worker process to one CPU only.
worker_processes 2; worker_cpu_affinity 0101 1010;
Bind the first worker to CPU0/CPU2, bind the second worker to CPU1/CPU3. This is suitable for HTT.
worker_cpu_affinity 默认是没有开启的,
根据例子我们可以看得出,0001 0010 0100 1000 分别代表第1、2、3、4个逻辑CPU,
所以我们可以设置0010 0100 1000来将3个进程分别绑定到第2、3、4个逻辑CPU上:
worker_processes 3;
worker_cpu_affinity 0010 0100 1000;
同时根据例子我们也可以看出,
worker_cpu_affinity 可以将同1个进程绑定在2个逻辑CPU上:
worker_processes 2;
worker_cpu_affinity 0101 1010;
0101也就是第1、3个逻辑CPU上,1010就是第2、4个逻辑CPU上。
分享三:
worker_processes指明了nginx要开启的进程数,
据官方说法,一般开一个就够了,多开几个,可以减少机器io带来的影响。
据实践表明,nginx的这个参数在一般情况下开4个或8个就可以了,再往上开的话优化不太大。
据另一种说法是,nginx开启太多的进程,会影响主进程调度,所以占用的cpu会增高,
这个说法我个人没有证实,估计他们是开了一两百个进程来对比的吧。
worker_processes配置的一些注意事项:
1、worker_cpu_affinity配置最好是能写上
我这里服务器多数是双核超线程,相当于4cpu,我一般开8进程,所以这个配置就是这样:
worker_cpu_affinity 0001 0100 1000 0010 0001 0100 1000 0010;
另,worker_cpu_affinity不是什么时候都能用的,
我没有认真研究并罗列所有情况,只知道2.4内核的机器用不了,
如果用不了的话,那么最好是加大worker_processes进程数,这样分配cpu就会平均一点啦,
如果不平均只好多重启几下。
2、worker_rlimit_nofile配置要和系统的单进程打开文件数一致,千万不要再画蛇添足地除以worker_processes。
我现在在linux 2.6内核下开启文件打开数为65535,worker_rlimit_nofile就相应应该填写65535。
这是因为nginx调度时分配请求到进程并不是那么的均衡,所以假如填写10240,
总并发量达到3-4万时就有进程可能超过10240了,这时会返回502错误。
nginx worker_processes 配置的更多相关文章
- Nginx主配置参数详解,Nginx配置网站
1.Niginx主配置文件参数详解 a.上面博客说了在Linux中安装nginx.博文地址为:http://www.cnblogs.com/hanyinglong/p/5102141.html b.当 ...
- nginx + tomcat配置负载均衡
目标:Nginx做为HttpServer,连接多个tomcat应用实例,进行负载均衡. 注:本例程以一台机器为例子,即同一台机器上装一个nginx和2个Tomcat且安装了JDK1.7. 1.安装Ng ...
- 理解nginx的配置
Nginx配置文件主要分成四部分:main(全局设置).server(主机设置).upstream(上游服务器设置,主要为反向代理.负载均衡相关配置)和 location(URL匹配特定位置后的设置) ...
- nginx缓存配置的操作记录梳理
web缓存位于内容源Web服务器和客户端之间,当用户访问一个URL时,Web缓存服务器会去后端Web源服务器取回要输出的内容,然后,当下一个请求到来时,如果访问的是相同的URL,Web缓存服务器直接输 ...
- Nginx安装配置(转)
Nginx 安装配置 Nginx("engine x")是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的 Web和 反向代理 服务器,也是一个 IMAP/POP3/ ...
- nginx的配置总结
总体而言,nginx的配置比起apache来是要简洁很多,而言容易理解得多的,另外官网的文档也十分的简洁易懂.我们先看一个简化版的配置文件nginx.conf: #user nobody; worke ...
- 图文解说:Nginx+tomcat配置集群负载均衡
图文解说:Nginx+tomcat配置集群负载均衡 博客分类: appserver nginxTomcatUbuntuLinux网络应用 作者:niumd Blog:http://ari.iteye ...
- nginx性能配置参数说明:
nginx的配置:main配置段说明一.正常运行的必备配置: 1.user username [groupname]; 指定运行worker进程的用户和组 2.pid /path/to/pidfile ...
- Centos6.5 nginx+nginx-rtmp配置流媒体服务器
之前使用命令方式安装nginx并配置了反向代理,由于想做一个视频直播的小项目,查了流媒体服务器的方案,发现nginx有相关模块,于是开始搞起. nginx-rtmp模块需要在nginx编译时,以模块方 ...
随机推荐
- Python:Day26 socket
SOCKET通信流程 服务器创建套接字链接: 1.创建SOCKET,socket.socket(family=AF_INET, type=SOCK_STREAM, proto=0, fileno=No ...
- [ASP.NET]ScriptManager控件使用 转载
目录 概述 局部刷新 错误处理 类型系统扩展 注册定制脚本 注册 Web 服务 在客户端脚本中使用认证和个性化服务 ScriptManagerProxy 类 添加 ScriptManager 控件 客 ...
- docker 9 docker的容器命令
有镜像才能创建容器,这是根本的前提 下面我们以下载一个centos镜像来做演示. [root@t-docker chenzx]# docker images REPOSITORY TAG IMAGE ...
- Eclipse 设置保存代码时自动格式化
在码代码或者优化的时候,经常需要使用到ctrl+shift+F来格式化代码,但其实ecilpse已经自带自动格式化功能了,只是没有默认开启. 正确的打开方式:windows-->Preferen ...
- BZOJ1390 CEOI2008 Fences 凸包、Floyd最小环/DP
传送门 为了方便描述把固定点叫做白色点,Tree叫做黑色点 一种基于特殊性质的做法: 如果不算入选白色的权值,那么一定会选中所有白色点构成的凸包上的点,因为能够尽可能围更多的黑色点.然后我们在这个基础 ...
- odoo 基于SQL View视图的model类
在做odoo的过程中,会涉及到多表的查询, 尤其是做报表的时候这种情况更甚,这样下来会做很多的关联,不是很方便.odoo提供了一种机制,即基于视图的model类.代码地址在这里. 具体过程如下: 1. ...
- C#获取指定IP地址的数据库所有数据库实例名
/// <summary> /// 获取指定IP地址的数据库所有数据库实例名. /// </summary> /// <param name="ip" ...
- .net排坑篇:负载均衡域名转发的背后
背景 昨天因客户私有部署问题,需要到客户公司去排查问题. 他们是一家外企,各种权限需要提前申请(最大的坑).他们之前部署的一般为单域名,很少部署互联网类型多个域名的情形(第二个坑).这次私有部署总计使 ...
- Windows Community Toolkit 4.0 - DataGrid - Part03
概述 在上面一篇 Windows Community Toolkit 4.0 - DataGrid - Part02 中,我们针对 DataGrid 控件的 Utilities 部分做了详细分享.而在 ...
- Python—sys模块介绍
sys.argv 命令行参数List,第一个元素是程序本身路径 sys.exit(n) 退出程序,正常退出时exit(0) sys.version 获取Python解释程序的版本信息 sys.maxi ...