浅谈优化----nginx与php增大并发

Posted DonotCTR

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅谈优化----nginx与php增大并发相关的知识,希望对你有一定的参考价值。

1、概述

     近期以来,公司业务爆炸性增长,服务器压力也是不断地增大,php出现连接超时情况,特别在高峰期下,出现成百上千的超时情况,当时运维侧习惯以为是开发逻辑层代码问题,因为这种情况基本上都是开发代码层面的问题。但是当看到后台高峰期那个用户访问量比原来加了一倍都不止时,并且通过监控数据看到服务器的CPU利用率和负载高出了很多,这时,运维侧就应该反思是否是并发数不够。


2、PHP之连接进程数

       登录服务器查看到PHP的进程数并不是很高,也不充足,从配置中查看到设置为150,按照服务器的内存16G来计算,一个进程占用内存空间大概在25-30M之间,那么16G内存,PHP占用8G来计算,差不多可以达到350左右进程。那么可以调整那几个配置呢,需要修改的配置文件:/usr/local/php7/etc/php-fpm.d/www.conf  如果需要了解LNMP搭建的可以参考文档:​​LNMP搭建​

pm = dynamic
pm.max_children = 350
pm.start_servers = 65
pm.min_spare_servers = 60
pm.max_spare_servers = 70
pm.max_requests = 10000

pm = dynamic:设置动态进程管理

pm.max_children:最大进程数为350

pm.start_servers:动态方式下的起始php-fpm进程数量

pm.min_spare_servers:动态方式空闲状态下的最小php-fpm进程数量

pm.max_spare_servers:动态方式空闲状态下的最大php-fpm进程数量

pm.start_servers = min_spare_servers + (max_spare_servers - min_spare_servers) / 2

检测配置是否正确

php-fpm -t

重新加载配置

/etc/init.d/php7-fpm reload

浅谈优化----nginx与php增大并发_并发数

优化从监控看到的结果,服务器负载降下来了

浅谈优化----nginx与php增大并发_nginx_02

前一天

浅谈优化----nginx与php增大并发_连接数_03

优化当天

以上优化服务器性能方面确实得到很大的优化,但是实际问题还是没有得到很好的解决。


3、PHP之并发数

    以上服务器性能得到优化后,发现在高峰期还是存在大量的php超时问题,那么这个时候应该考虑的问题,就是优化php并发数的问题。优化PHP并发数问题首先应优化内核参数在服务器层面开启更大的服务器并发连接数。

    优化服务器内核参数:/etc/sysctl.conf

net.core.somaxconn = 65535

   配置生效命令

systcl  -p

   以上只是调整系统层面的并发数

   优化PHP层面的并发数,修改配置文件为:/usr/local/php7/etc/php-fpm.d/www.conf

listen.backlog = 511

    检查配置是否正确

php-fpm  -t

   重启php-fpm才能生效

/etc/init.d/php7-fpm restart

  检查是否生效:

ss  -lnt

  调整成功后如下图

浅谈优化----nginx与php增大并发_php_04

    以上问题得到解决,此时有没有想过一个这样子的问题,就是PHP其实还需要与nginx进行配合,那么nginx的连接并发数是否充足呢


4、Nginx之并发数

      在没有调整系统内核并发连接数情况下,nginx默认的连接数只有128,根据上面PHP的调整,明显nginx能力是不够应付PHP的连接的。那么也就需要调整nginx的并发连接数,由于在PHP之并发数过程中,已经调整过了内核参数,如果在nginx只需要511并发数可以应付的话。那么只需要重启nginx即可完成。特别注意reload无法完成加载的

systemctl restart  nginx

    扩展一个知识点:nginx在linux内核并发参数没有优化情况,部署的nginx默认只有128并发数;如果优化linux内核参数情况下,在重启nginx默认就有511并发数。

未优化前nginx

浅谈优化----nginx与php增大并发_nginx_05

优化后nginx

浅谈优化----nginx与php增大并发_nginx_06

  那么如何增大并发数超过511呢,目前所看到的方式就是在端口加一个backlog=一个数值的参数。

   如下图例子:修改端口配置文件,在相应端口后面加上backlog=1024

浅谈优化----nginx与php增大并发_nginx_07

    重启nginx

systemctl restart  nginx

浅谈优化----nginx与php增大并发_nginx_08

   以上可以让所有优化并发数的运维同学提供一个思路,希望帮忙更多的运维解决此类问题,望大家多多支持,谢谢


以上是关于浅谈优化----nginx与php增大并发的主要内容,如果未能解决你的问题,请参考以下文章

Nginx高并发配置思路(轻松应对1万并发量)

Nginx高并发配置思路(轻松应对1万并发量)

nginx集群配置

PHP服务缓存加速优化实战

NGINX 优化方法论

HA架构关于应对高并发