设为首页 收藏本站
查看: 959|回复: 0

LNMP高并发时502

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-1-19 11:14:51 | 显示全部楼层 |阅读模式
之前php-fpm配置:

单个php-fpm实例,使用socket方式,内存8G 静态方式,启动php-fpm进程数300,具体参数如下

   

listen = /tmp/php-cgi.sock

#listen = 127.0.0.1:9000

listen.backlog = 2048

listen.allowed_clients = 127.0.0.1

pm = static

pm.max_children = 300

pm.start_servers = 50

pm.min_spare_servers = 30

pm.max_spare_servers = 250

request_terminate_timeout = 0

request_slowlog_timeout = 2

由于架构,代码等原因,单台几百并发就出现502错误。

初步解决:各种相关优化,

增大pm.max_children为400

nginx和fpm 添加了 listen.backlog = 2048

最大打开文件句柄数 65535

/etc/sysctl.conf 都进行了微调,高并发时nginx发起的连接数,远远超过了php-fpm所能处理的数目,导致端口(或socket)频繁被锁,造成堵塞。依然出现502错误

终极解决方法:

启用两个php-fpm实例,把php-fpm分为两部分,每部分各听一个端口或socket,这样就减少了lock,依然保持400个php-fpm进程,每个实例启用200个,采用nginx的upstream负载均衡,轮询每个socket来处理请求。

具体操作:


   

cp php-fpm.conf php-fpm2.conf

vi php-fpm2.conf 做相应的修改

[global]

pid = /usr/local/php/var/run/php-fpm2.pid

error_log = /usr/local/php/var/log/php-fpm2.log

log_level = notice

[www]

listen = /tmp/php-cgi2.sock

#listen = 127.0.0.1:9000

listen.backlog = 2048

listen.allowed_clients = 127.0.0.1

pm = static

pm.max_children = 200

pm.start_servers = 50

pm.min_spare_servers = 30

pm.max_spare_servers = 250

request_terminate_timeout = 0

request_slowlog_timeout = 2

slowlog = var/log/slow.log

cp /etc/init.d/php-fpm /etc/init.d/php-fpm2  

vi  /etc/init.d/php-fpm2

修改

prefix=/usr/local/php

exec_prefix=${prefix}

php_fpm_BIN=${exec_prefix}/sbin/php-fpm

php_fpm_CONF=${prefix}/etc/php-fpm2.conf

php_fpm_PID=${prefix}/var/run/php-fpm2.pid

启动php-fpm2即可



配置nginx

编辑nginx.conf 主配置文件,如果后端采用虚拟主机,跟我一样,

添加

upstream backend{

              server unix:/tmp/php-cgi.sock;

              server unix:/tmp/php-cgi2.sock;

                }



vi vhost/test.conf

修改此处 fastcgi_pass  backend; 调用fastcgi是,使用负载均衡的方式。

location ~ [^/]\.php(/|$)

                        {

                                try_files $uri =404;

                                fastcgi_pass  backend;

                        #       fastcgi_pass  127.0.0.1:9000;

                                fastcgi_index index.php;

                                include fastcgi.conf;

                               # include pathinfo.conf;

                        }

重启nginx。

等待验证吧,502错误会大大地减少,网站抢购甚欢,消费者甚欢。

总结:

高并发时使用tcp端口的方式比socket方式相对稳定一点,但是使用端口的方式,处理的效率确实比socket效率低了那么一点。LNMP环境下,在 面对高并发时,除了一个合理的架构,与合理的调优之外,开发者的代码逻辑与高效的代码也是影响高并发的一个重要因素。一个请求调用多少次php-fpm, 每个php-fpm处理多少时间,都是开发者需要考虑的点。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-41066-1-1.html 上篇帖子: xampp如何设置多虚拟主机访问 下篇帖子: 手动编译搭建LAMP服务器
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表