[转]你如何面对—LNMP高并发时502
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的更多相关文章
- 关于sphinx+PHP在高并发时响应性能低下的解决办法
经过多次压力测试,发现sphinx在高并发时出现负载突然提升,并且响应速度明显下降.经过多方面的排查,发现是由于PHP与sphinx自带的 searchd进行socket的连接之后,系统内存有大量的T ...
- j2ee高并发时使用全局变量需要注意的问题
原文:https://blog.csdn.net/jston_learn/article/details/21617311 开发中,全局变量的使用很频繁,但对于多线程的访问,使用全局变量需要注意的地方 ...
- php session在高并发时可能存在的问题。
如果同一个客户端并发发送多个请求,而每个请求都使用了Session,那么PHP Session锁的存在会导致服务器串行响应这些请求,而不是并行.这是因为在默认情况下,PHP使用文件存储Session数 ...
- 高并发Web服务的演变:节约系统内存和CPU
一.越来越多的并发连接数 现在的Web系统面对的并发连接数在近几年呈现指数增长,高并发成为了一种常态,给Web系统带来不小的挑战.以最简单粗暴的方式解决,就是增加Web系统的机器和升级硬件配置.虽然现 ...
- 转---高并发Web服务的演变——节约系统内存和CPU
[问底]徐汉彬:高并发Web服务的演变——节约系统内存和CPU 发表于22小时前| 4223次阅读| 来源CSDN| 22 条评论| 作者徐汉彬 问底Web服务内存CPU并发徐汉彬 摘要:现在的Web ...
- 高并发 Web 服务的演变:节约系统内存和 CPU
本文内容 越来越多的并发连接数 Web 前端优化,降低服务端压力 节约 Web 服务端的内存 节约 Web 服务器的 CPU 小结 一,越来越多的并发连接数 现在,Web 系统面对的并发连接数呈现指数 ...
- (转)高并发Web服务的演变——节约系统内存和CPU
一.越来越多的并发连接数 现在的Web系统面对的并发连接数在近几年呈现指数增长,高并发成为了一种常态,给Web系统带来不小的挑战.以最简单粗暴的方式解决,就是增加Web系统的机器和升级硬件配置.虽然现 ...
- 【WEB】高并发Web服务的演变-节约系统内存和CPU
目前主流浏览器通常可以存在2-6个并发. 连接和请求,占据了服务器的大量CPU和内存等资源.在资源数目超过100+的网站页面中,使用更多的下载连接,非常有必要. 缓解“高并发”的压力的手段. 一. W ...
- Java Web(1)高并发业务
互联网无时无刻不面对着高并发问题,例如商品秒杀.微信群抢红包.大麦网抢演唱会门票等. 当一个Web系统,在一秒内收到数以万计甚至更多的请求时,系统的优化和稳定是至关重要的. 互联网的开发包括Java后 ...
随机推荐
- C#并行编程(5):需要知道的异步
异步与并行的联系 大家知道"并行"是利用CPU的多个核心或者多个CPU同时执行不同的任务,我们不关心这些任务之间的依赖关系. 但是在我们实际的业务中,很多任务之间是相互影响的,比如 ...
- Python3 CNN中卷积和池化的实现--限制为二维输入
# -*- coding: utf-8 -*- """ Created on Wed Jan 31 14:10:03 2018 @author: markli " ...
- Wireshark数据抓包教程之Wireshark的基础知识
Wireshark数据抓包教程之Wireshark的基础知识 Wireshark的基础知识 在这个网络信息时代里,计算机安全始终是一个让人揪心的问题,网络安全则有过之而无不及.Wireshark作为国 ...
- Codeforces.314E.Sereja and Squares(DP)
题目链接 http://www.cnblogs.com/TheRoadToTheGold/p/8443668.html \(Description\) 给你一个擦去了部分左括号和全部右括号的括号序列, ...
- 工具使用-----Jmeter的基础用法
//摘抄至http://www.cnblogs.com/TankXiao/p/4045439.html 以下是我自己录制的关于这篇文章的视频,有兴趣的可以下载哦 https://yunpan.cn/c ...
- 机器学习算法(5):卷积神经网络原理及其keras实现
1.原理 CNN的资料特别多,这里不再赘述,仅收集相关的资料供大家参考: a.Deep learning:五十一(CNN的反向求导及练习) b.Deep Learning 2.实现 我们使用keras ...
- Ulipad安装、配置使用教程(附Ulipad下载)
一.安装Ulipad 因为ulipad编辑器使用的是wxpython编写的gui,所以我们需要第三方库wxpython的支持,这里我们先讲一下Ulipad在Windows系统环境下的安装: 1. 确实 ...
- CentOS 7 下编译安装lnmp之PHP篇详解
一.安装环境 宿主机=> win7,虚拟机 centos => 系统版本:centos-release-7-5.1804.el7.centos.x86_64 二.PHP下载 官网 http ...
- 【转载】Android dip,px,pt,sp 的区别
dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA.HVGA和QVGA 推荐使用这个,不依赖像素. ...
- Bootstrap入门学习(三)——简单项目
此样例来自Bootstrap官网提供的入门级模版.仅仅有主要的东西:引入了预编译版的 CSS 和 JavaScript 文件,页面仅仅包括了一个 container 元素. 引入Bootstrap 创 ...