From : http://www.topthink.com/topic/5683.html

之前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处理多少时间,都是开发者需要考虑的点。

[转]你如何面对—LNMP高并发时502的更多相关文章

  1. 关于sphinx+PHP在高并发时响应性能低下的解决办法

    经过多次压力测试,发现sphinx在高并发时出现负载突然提升,并且响应速度明显下降.经过多方面的排查,发现是由于PHP与sphinx自带的 searchd进行socket的连接之后,系统内存有大量的T ...

  2. j2ee高并发时使用全局变量需要注意的问题

    原文:https://blog.csdn.net/jston_learn/article/details/21617311 开发中,全局变量的使用很频繁,但对于多线程的访问,使用全局变量需要注意的地方 ...

  3. php session在高并发时可能存在的问题。

    如果同一个客户端并发发送多个请求,而每个请求都使用了Session,那么PHP Session锁的存在会导致服务器串行响应这些请求,而不是并行.这是因为在默认情况下,PHP使用文件存储Session数 ...

  4. 高并发Web服务的演变:节约系统内存和CPU

    一.越来越多的并发连接数 现在的Web系统面对的并发连接数在近几年呈现指数增长,高并发成为了一种常态,给Web系统带来不小的挑战.以最简单粗暴的方式解决,就是增加Web系统的机器和升级硬件配置.虽然现 ...

  5. 转---高并发Web服务的演变——节约系统内存和CPU

    [问底]徐汉彬:高并发Web服务的演变——节约系统内存和CPU 发表于22小时前| 4223次阅读| 来源CSDN| 22 条评论| 作者徐汉彬 问底Web服务内存CPU并发徐汉彬 摘要:现在的Web ...

  6. 高并发 Web 服务的演变:节约系统内存和 CPU

    本文内容 越来越多的并发连接数 Web 前端优化,降低服务端压力 节约 Web 服务端的内存 节约 Web 服务器的 CPU 小结 一,越来越多的并发连接数 现在,Web 系统面对的并发连接数呈现指数 ...

  7. (转)高并发Web服务的演变——节约系统内存和CPU

    一.越来越多的并发连接数 现在的Web系统面对的并发连接数在近几年呈现指数增长,高并发成为了一种常态,给Web系统带来不小的挑战.以最简单粗暴的方式解决,就是增加Web系统的机器和升级硬件配置.虽然现 ...

  8. 【WEB】高并发Web服务的演变-节约系统内存和CPU

    目前主流浏览器通常可以存在2-6个并发. 连接和请求,占据了服务器的大量CPU和内存等资源.在资源数目超过100+的网站页面中,使用更多的下载连接,非常有必要. 缓解“高并发”的压力的手段. 一. W ...

  9. Java Web(1)高并发业务

    互联网无时无刻不面对着高并发问题,例如商品秒杀.微信群抢红包.大麦网抢演唱会门票等. 当一个Web系统,在一秒内收到数以万计甚至更多的请求时,系统的优化和稳定是至关重要的. 互联网的开发包括Java后 ...

随机推荐

  1. Centos下命令行编译MapReduce代码(Java)并打包在Hadoop中执行

    前提条件:搭建好Hadoop系统 新建文件夹:input  和  output hdfs dfs -mkdir /inputhdfs dfs -mkdir /output 查看文件系统 hdfs df ...

  2. vue打包以及在Apache环境下的配置

    vue打包,我们都清楚,实在记不住命令的可以去package.json中看: npm run build 打包后会生成dist文件夹,将dist文件夹下的所有文件复制到Apache下的www的文件夹下 ...

  3. TreeMap(红黑树)源码分析

    1. HashMap.Entry(红黑树节点) private static final boolean RED = false; private static final boolean BLACK ...

  4. python之sys.stdout、sys.stdin

    转自:http://www.cnblogs.com/turtle-fly/p/3280519.html 本文环境:Python 2.7  使用 print obj 而非 print(obj) sys. ...

  5. JavaMail发送和接收邮件API(详解)

    一.JavaMail概述: JavaMail是由Sun定义的一套收发电子邮件的API,不同的厂商可以提供自己的实现类.但它并没有包含在JDK中,而是作为JavaEE的一部分. 厂商所提供的JavaMa ...

  6. HDU 4453 Looploop (伸展树splay tree)

    Looploop Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  7. DG449 High Voltage Single SPDT Analog Switch in SOT23-8

    DESCRIPTION The DG449 is a dual supply single-pole/double-throw (SPDT) switches. On resistance is 38 ...

  8. 0xWS2812 STM32 driver for WS2812(B) RGB LEDs

    0xWS2812 STM32 driver for WS2812(B) RGB LEDs 0xWS2812 pronounced "hex-WS2812" This code ai ...

  9. ubuntu修改时区和时间的方法

    改时区参考 http://blog.sina.com.cn/s/blog_6c9d65a1010145st.html 1.首先查看时区: swfsadmin@swfsubuntu:~$ date -R ...

  10. javascript 原型继承

    因为javascript没有专门的机制去实现类,所以这里只能是借助它的函数能够嵌套的机制来模拟实现类.在javascript中,一个函数,可以包含变量,也可以包含其它的函数,那么,这样子的话,我们就可 ...