+ -
当前位置:首页 → 问答吧 → 关于Nginx的worker_processes参数设置

关于Nginx的worker_processes参数设置

时间:2009-08-28

来源:互联网

最近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分钟左右挂掉。

作者: peacock   发布时间: 2009-08-28

ppc来个人看看啊。

作者: 生命如蓝   发布时间: 2009-08-28

http://wiki.nginx.org/NginxCoreModule#worker_cpu_affinity
不过502一般是fastcgi的问题
你可以检查下502都发生在那些页面
经常出现的情况是spawn-fcgi进程较少 不能承载php解析照成的

作者: x-comet   发布时间: 2009-08-28

哦 造成的

作者: x-comet   发布时间: 2009-08-28

我还以为是同时在线人数过多,就把我T了啊

作者: 山丘之王   发布时间: 2009-08-28

http://wiki.nginx.org/NginxCoreModule#worker_cpu_affinity
不过502一般是fastcgi的问题
你可以检查下502都发生在那些页面
经常出现的情况是spawn-fcgi进程较少 不能承载php解析照成的
x-comet 发表于 2009-8-28 17:46
个人也感觉可能是fastcgi的可能性更大.

作者: z0800   发布时间: 2009-09-04

试过,我的centos无论设置成多少一样稳定,502调整fastcgi参数效果很明显,和worker_processes影响不大

作者: ronin   发布时间: 2009-09-07

应该了解一下worker_processes跟fastcgi的关系吧,502改worker_processes这个,在并发很高的时候治标不治本

作者: pylong   发布时间: 2009-09-08

乱解释一通,work_processes和502错误一点关系都没有,502错误是表示php执行超时,检查下你的程序,效率低的情况下就可能造成502错误,最好是看php-fpm的日志

work_processes可以设置几十个,只要你的内存和硬盘的I/0足够,什么CPU的数量完全是假的,当然前提是在linux下,windows的就不清楚,完全不能发挥出nginx的性能

作者: bigbigworld   发布时间: 2009-09-09

围观lz,没玩过ng

作者: cnkiller   发布时间: 2009-09-23

ulimit -n查看文件句柄数限制
如果不是这里出问题调整cgi
work_processes好像处理并发用的一般用nginx做反向代理可以把这个调整大一点,处理php需要cgi,cgi相关Linux文件句柄。只调整cgi不调整文件句柄会造成cgi假死。

作者: learsu   发布时间: 2009-09-28