欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

nginx比apache处理静态文件速度快,但是nginx处理大量并发的php请求时,容易出现502错误,频率大概是多少

程序员文章站 2023-11-27 17:00:40
首先要明确一点的是502是怎么出现的,为什么会出现502呢?一般而言,出现502的错误是因为php-cgi连接数不够导致的。举个例子:php-cgi开10个进程,前端发20个请求,每个请求的脚本都sleep100s,那么必然有至多10个请求会出现502错误。因此,出现502是因为php进程不够用了, ......

首先要明确一点的是502是怎么出现的,为什么会出现502呢?

一般而言,出现502的错误是因为php-cgi连接数不够导致的。
举个例子:
php-cgi开10个进程,前端发20个请求,每个请求的脚本都sleep100s,那么必然有至多10个请求会出现502错误。因此,出现502是因为php进程不够用了,和nginx没有多大关系。

如果非要是找出这种502错误的比例,需要综合考虑:
1后端php-cgi的进程数,
2php-cgi对请求的处理时间,
3nginx的并发量,
要解决502也很容易,加大php-cgi的进程数。这里又三种方式:
1增加nginx的upstream,其中upstream中为php-cgi的地址;
2利用nginx作为反向代理,分支法解决并发量;
3增加php-cgi的进程数,(这里会受到机器资源的限制,因此,也并不能无限增加)

问:php-cgi怎么开十个进程?求回答,谢谢啊
 
追答:目前而言,php-cgi都是通过php-fpm去管理的。
   在php/etc/php-fpm.conf文件中,有设置php进程数目的选项。

   项设置可以参考php-fpm.conf中的说明。每个配置项都有详细的说明。

追问:开启apache就会在任务管理器中看到fast-cgi线程了?一个fast-cgi线程是说在同一时刻只能处理一个客户端的网页请求吗?求回答

 
追答:是的,一个fast-cgi进程在同一时刻只能响应一个用户请求。其他的用户请求都会被放到一个队列里面。

 

1、为什么nginx的性能要比apache高得多?

 

1  这得益于nginx使用了最新的epoll(linux 2.6内核)和kqueue(freebsd)网络i/o模型,而apache则使用的是传统的select模型。目前linux下能够承受高并发访问的squid、memcached都采用的是epoll网络i/o模型。
2  处理大量的连接的读写,apache所采用的select网络i/o模型非常低效。下面用一个比喻来解析apache采用的select模型和nginx采用的epoll模型进行之间的区别:
3  假设你在大学读书,住的宿舍楼有很多间房间,你的朋友要来找你。select版宿管大妈就会带着你的朋友挨个房间去找,直到找到你为止。而epoll版宿管大妈会先记下每位同学的房间号,你的朋友来时,只需告诉你的朋友你住在哪个房间即可,不用亲自带着你的朋友满大楼找人。如果来了10000个人,都要找自己住这栋楼的同学时,select版和epoll版宿管大妈,谁的效率更高,不言自明。同理,在高并发服务器中,轮询i/o是最耗时间的操作之一,select和epoll的性能谁的性能更高,同样十分明了。

 

2、为什么会出现502错误呢?

nginx出现502有很多原因,但大部分原因可以归结为资源数量不够用,也就是说后端php-fpm处理有问题,nginx将正确的客户端请求发给了后端的php-fpm进程,但是因为php-fpm进程的问题导致不能正确解析php代码,最终返回给了客户端502错误。优化php-fpm,优化代码,加大内存才是解决502的根源。

3、10000并发的话,nginx的表现怎么样?

2009年9月3日下午2:30,金山游戏《剑侠情缘网络版叁》临时维护1小时,大量玩家上官网,论坛、评论、客服等动态应用nginx服务器集群,每台服务器的nginx活动连接数达到2.8万。

nginx比apache处理静态文件速度快,但是nginx处理大量并发的php请求时,容易出现502错误,频率大概是多少