问题:最近的抢购有点火,到点抢购的时候网站就会出现502错误 顶不住消费者的压力。

伤。。。。。

之前php-fpm配置:

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

1
2
3
4
5
6
7
8
9
10
11
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来处理请求。

具体操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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处理多少时间,都是开发者需要考虑的点。

本文出自 “章小鱼儿_linux” 博客,请务必保留此出处http://zhangxylinux.blog.51cto.com/5041623/1563427

转载于:https://blog.51cto.com/ss991/1564629

如何面对你—LNMP高并发时502相关推荐

  1. 服务器高并发时请求报错_基于redis的分布式锁防止高并发重复请求

    需求: 我们先举个某系统验证的列子:(A渠道系统,业务B系统,外部厂商C系统) (1)B业务系统调用A渠道系统,验证传入的手机.身份证.姓名三要素是否一致. (2)A渠道系统再调用外部厂商C系统. ( ...

  2. 【java】动态高并发时为什么推荐重入锁而不是Synchronized?

    1.概述 转载:http://www.dreamwu.com/post-1758.html 这个图画的不错,有助于加深理解. [Java]Synchronized 有几种用法 [java] 从hots ...

  3. wcf高并发 mysql_WCF 高并发时客户端发送和服务端接收存在等待或延迟

    前提: .net版本: .net framework 4.5.2(服务端),.net framework 3.5(客户端) 服务器:8核E5420 2.5GHZ,16G内存,1万转HDD磁盘 wind ...

  4. 高并发时的线程安全问题

    在单例模式下,如果类中存在全局变量或者父类中存在全局变量,多个线程并发请求的时候,会出现全局变量的值的混乱和冲突. 引用资料 spring单例在高并发下可能出现的错误: 首先,只有当注入的对象是无状态 ...

  5. python django并发访问挂掉,解决django高并发时数据库连接量过大的问题(实现连接池的方法)...

    Django默认每访问一次数据库都会创建一个新的数据库连接,执行完数据库操作后再关闭连接.这在高并发的场景下会导致连接数不断增多,最终出现"too many connections" ...

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

    开发中,全局变量的使用很频繁,但对于多线程的访问,使用全局变量需要注意的地方有很多,下面做了个大概的总结. 全局变量的使用场合: 1:定义只读的全局变量时,必须加final修饰,防止被修改.哪怕是私有 ...

  7. nodeJS express mysql 高并发时连接数不够用问题 以及如何处理高并发

    首先 描述下问题,前段时间接到了通知,做nodejs高并发代码优化,于是开始整咯,首先用loadrunning模拟高并发,问题就来了,到高并发路由的时候,会出现数据库连接数不够用的情况.查询了代码,都 ...

  8. google-perftools优化nginx在高并发时的性能

    为什么80%的码农都做不了架构师?>>>    1,首先下载并安装google-perftools: 注意,如果是64位系统: 那么你需要做: 1)先安装libunwind或者 wg ...

  9. php fpm高并发,php-fpm 高并发、502解决方案

    php-fpm 配置文件生成 file_exists('php-fpm-conf/prod') or mkdir('php-fpm-conf/prod', 0777, true); file_exis ...

最新文章

  1. 关于AI方面创业公司的分析
  2. 如何将注册中心从 Consul 平滑的迁移到 Nacos ?
  3. connect time out 获取token失败_Power Query之获取钉钉日志自动刷新Power BI报告
  4. 导入jar包和创建jar文件
  5. [转]C#异步编程的实现方式(1)——异步委托
  6. 洛谷 U5122 T2-power of 2(费马小定理)
  7. the day of python learning(考试解释)
  8. Git之深入解析如何使用Git调试项目源码中的问题
  9. adb隐藏状态栏图标_[应用]华为手机怎么设置隐藏状态栏上的图标
  10. ISA2000安装与设置
  11. 数据结构与算法 —— 向量的扩容策略与分摊时间复杂度
  12. 了解数据库索引及其原理
  13. CMMI有几个过程域?
  14. 深入了解vray材质的属性
  15. 如何管理公司的共享iPad?
  16. 【Go】blockchain-tutorial 区块链技术教程
  17. 怎么拆分PDF文档?一分钟学会拆分PDF文档的方法
  18. 3.12_weight-decay
  19. C/C++ 正则表达式 regex库介绍(详细版)
  20. 2020年有寓意的领证日期_2020热门领证日期大全 2020适合领证的好日子

热门文章

  1. 32位处理器的寄存器介绍
  2. 利用winston和morgan记录express日志信息
  3. reduce实现filter,map 数组扁平化等
  4. spring boot: 构建项目时报错Not a managed type
  5. portal商品展示功能逻辑
  6. BZOJ1257 [CQOI2007]余数之和
  7. 研究人员开发出最节能的 Wi-Fi 技术
  8. jQuery实现父窗口的问题
  9. Java8新特性Stream API与Lambda表达式详解(1)
  10. oc-21-class对象