Py学习  »  NGINX

nginx502错误——php程序运行后特别卡-php_fpm

10676 • 2 年前 • 223 次点击  

问题描述:
挺好个php程序,突然就崩了,这是一个站群服务,一个数据库上有34个网站,接口用php开发,其它33个程序全部是vue异步请求。突然特别卡,几乎是不动,尝试重启服务器,重启nginx都不好使,直到重启php,就好用了,但是两分钟后又挂了,经反复测试,重启php后,慢慢就卡了,两分钟以后基本就卡死了,以下是处理方法

1、在服务器允许得条件下,将max_children调整得大一些


服务器允许得情况下

2、调整 程序脚本得运行时间,我有之前得300调成了10,十秒钟,足矣


调整脚本运行时间

一开始遇到这个问题时听苦恼得,真的,重启刚开始还好使,两分钟左右,程序就慢慢转不动了,因为我做的时站群,34个网站全都在上面运行,php我都重新安装了一下,然后无意间看到这个命令:

 ps -ef |grep "php-fpm"|grep "pool"|wc -l

这个命令用来查看php-fpm连接数,起初这个值时200,起始值15 ,然后就发现这个数走着走着就满了,当时程序执行时间时300秒,于是我就合计那我就放大这个值,于是我调成了300,这样不一会还是会满,我就想,会不会是因为程序时间过长,一直不释放呢?于是将程序运行时间调短,然后大大方方得给最大子进程350,这样总够用了把,别说,真的够用了,哈哈哈


扩展:
1、ps -ef |grep "php-fpm"|grep "pool"|wc -l这条命令我解释一下
grep -v grep 代表在查询的最终结果中去掉grep命令本身
wc -l 标示统计查询到的结果数量

2、pm= static
首先说一下pm这个值 pm = dynamic 这个是php的进程数是动态的 会根据访问量来确定来回增加
而在高负载的php环境下我推荐设置 pm= static php-fpm进程数固定
3、pm.max_children=???
当用静态模式下 进程数确定根据 pm.max_children来进进行确定 那么问题来了我的服务器应该设定多少php-fpm呢 ?从理论的角度上说php-fpm进程数越多越好,相当于一个酒店有很多个充足的服务员来为你服务肯定会比较爽啊 ,你也不需要等待。 但是。。。。现实上总是残酷的 php-fpm的进程数会受到你的内存大小的限制。一般情况下我们 进程数 =用机器内存(M)除以2 再除以20(M);当然这个也不是绝对的 你需要知道: 你可以分配给php多大内存 :你的服务器上是不是单纯的php服务器 有没有比较耗费内存的其他程序(mysql)。你的每个php-fpm内存占多大 :内存占用多大要根据你的php代码质量和处理的相关业务。当然你可以用命令去统计你的php-fpm平均占用内存大小。
有人会问如果设置不恰当会有什么状况出现呢?
当数值偏小时请求到nginx会无法分配到php-fpm进程 导致502错误
4、下面补充几个命令统计相关php-fpm 相关数据
查看php-fpm的进程个数

ps -ef |grep "php-fpm"|grep "pool"|wc -l

查看每个php-fpm占用的内存大小

ps -ylC php-fpm --sort:rss

查看PHP-FPM在你的机器上的平均内存占用

ps --no-headers -o "rss,cmd" -C php-fpm | awk '{ sum+=$1 } END { printf ("%d%s\n", 
sum/NR/1024,"M") }'

查看单个php-fpm进程消耗内存的明细

pmap $(pgrep php-fpm) | less
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/124342
 
223 次点击