现象:

某日和开发的同事调试服务器php状态时候发现下面这种情况:

ps aux |grep php-fcgi |wc -l

602

表面上看是没什么问题,可是我明明记得 php-fcgi我只开了300个啊!难道有人改过了?

立刻查看 php-fpm.conf 找到这一项

300

确实是300个啊~~,怎么会有600个?

ps aux |grep php-fcgi |more

www      11707  0.0  0.7 250192  3888 ?        S    17:07

www      11708  0.0  0.7 250192  3888 ?        S    17:07

www      11709  0.0  0.7 250192  3888 ?        S    17:07

www      11710  0.0  0.7 250192  3888 ?        S    17:07

www      11711  0.0  0.7 250192  3888 ?        S    17:07

状态都正常啊,奇怪了。尝试把 php-fcgi重启一下

/usr/local/php-fcgi/sbin/php-fpm restart

Shutting down php_fpm . done

Starting php_fpm  done

再次查看

ps aux |grep php-fcgi |wc -l

602

还是多了300个.....奇怪了,这三百个是怎么来的呢?

因为我们的php和nginx是一起的,所以我又想到了nginx。

在访问量不高的时候偷偷重启了一下nginx

/etc/init.d/nginx restart

停止 nginx:                                               [确定]

Shutting down php_fpm  done

启动 nginx:                                               [确定]

Starting php_fpm  done

再次查看,我倒.....真服了。我和开发的同事都一头雾水

ps aux |grep php-fcgi |wc -l

602

这回不能简单的考虑重启服务了,需要想想到底是哪里出的问题,而且这是生产服务器不能随便弄。

因为现在线上的服务都还算正常,这个问题我们就先放下了。

第二天,那个同事跟我说。那个问题他知道怎么解决了,而且也知道是什么原因造成的。我赶紧问清楚:

原来是这样,最近因为测试比较频繁,对nginx服务重启次数较多。不知道哪次重启时候失败导致 nginx进程虽然停止了,

但是一起的300个php-fcgi却没有重启,导致这些进程还留在内存里不能被释放。需要强制手动杀掉所有的php-fcgi进程后再重启php-fpm就可以了。

听到这里我恍然大悟。马上去服务器上操作,果然问题解决了,具体步骤如下

pkill php-cgi

再次查看

ps aux |grep php-fcgi |wc -l

1

好了没有了,赶紧重启,因为现在访问网页已经是 502了。

/usr/local/php-fcgi/sbin/php-fpm restart

Shutting down php_fpm warning, no pid file found - php-fpm is not running ?

Starting php_fpm  done

再次查看进程数

ps aux |grep php-cgi |wc -l

302

好了,正常了,呵呵

后来我在试验机上面又测试了一下,果然重现了那个问题

[root@ime /]# /etc/init.d/nginx restart

停止 nginx:                                               [确定]

Shutting down php_fpm  done

启动 nginx:                                               [确定]

Starting php_fpm  done

[root@ime /]# ps aux |grep php-cgi|wc -l

302

这时进程数是正常的,下面杀掉nginx进程

[root@ime /]# pkill nginx

[root@ime /]# lsof -i:80

[root@ime /]# ps aux |grep php-cgi|wc -l

302

这300个进程就傻乎乎的留在这里了,再次启动nginx

[root@ime /]# /etc/init.d/nginx start

启动 nginx:                                               [确定]

Starting php_fpm  done

[root@ime /]# lsof -i:80

COMMAND   PID USER   FD   TYPE DEVICE SIZE NODE NAME

nginx   14072 root    8u  IPv4  64090       TCP *:http (LISTEN)

nginx   14073  www    8u  IPv4  64090       TCP *:http (LISTEN)

[root@ime /]# ps aux |grep php-cgi|wc -l

603

php-fcgi没有去理会在内存中存在的进程,继续开启了300个...

我如果再重复这个过程呢?

[root@ime /]# pkill nginx

[root@ime /]# lsof -i:80

[root@ime /]# /etc/init.d/nginx start

启动 nginx:                                               [确定]

Starting php_fpm  done

[root@ime /]# pkill nginx

[root@ime /]# lsof -i:80

[root@ime /]# ps aux |grep php-cgi|wc -l

904

900个... 继续重复

[root@ime /]# /etc/init.d/nginx start

启动 nginx:                                               [确定]

Starting php_fpm  done

[root@ime /]# ps aux |grep php-cgi|wc -l

954

[root@ime /]# ps aux |grep php-cgi|wc -l

1205

机器开始变慢了,估计再重复几次机器就会挂掉了...

[root@ime /]# pkill php-cgi

[root@ime /]# ps aux |grep php-cgi|wc -l

5

[root@ime /]# ps aux |grep php-cgi|wc -l

5

[root@ime /]# ps aux |grep php-cgi|wc -l

1

[root@ime /]# /etc/init.d/nginx restart

停止 nginx:                                               [确定]

Shutting down php_fpm warning, no pid file found - php-fpm is not running ?

启动 nginx:                                               [确定]

Starting php_fpm  done

[root@ime /]# ps aux |grep php-cgi|wc -l

302

好了,恢复正常....

看来需要修改一下 php-fpm的启动脚本了

限制php-cgi进程数量,php-fcgi进程数超过预设值问题的解决相关推荐

  1. php fcgi children,php-fcgi进程数超过预设值问题的解决

    现象: 某日和开发的同事调试服务器php状态时候发现下面这种情况: ps aux |grep php-fcgi |wc -l 602 表面上看是没什么问题,可是我明明记得 php-fcgi我只开了30 ...

  2. PHP服务Fcgi进程及PHP解析优化

    1.PHP引擎缓存加速 常见四种软件: 1.eAccelerator 2.Zendcache 3.xcache 4.apc 5.zendopcache php5.5自带 2.使用tmpfs作为缓存加速 ...

  3. C++进程数量的限制

    C++进程数量的限制 最大理论数 可创建的实际数 最大理论数 1.每个进程都要在全局段描述表GDT中占据两个表项 1.每个进程的局部段描述表LDT都作为一个独立的段而存在,在全局段描述表GDT中要有一 ...

  4. update_notifier 造成nodejs进程数量增长的问题

    最近运维老大j哥找到我说了一个事儿:某私有化部署的线上环境nodejs进程数量多达1000+,对比公版线上环境的66个进程数显得十分诡异.并且单个nodejs进程所占用swap空间也较大,也不释放空间 ...

  5. linux修改可用的最大进程数量和可打开的最大文件数

    cat >>/etc/security/limits.conf<<EOF * soft nproc 655350 * hard nproc 655350 * soft nofi ...

  6. Nachos进程数量限制128、ID号分配以及基于优先级的调度算法详解

    文章目录 写在前面 运行环境配置 最大线程限制 实现可回收的线程ID机制 基于优先级的先来先服务调度算法 修改完毕的nachos我已经上传了,需要的话可以点击这里下载,积分不够可以私信我,CSDN设置 ...

  7. php-fpm 如果dm设置为 static,那么其实只有pm.max_children这个参数生效。系统会开启设置数量的php-fpm进程。...

    php-fpm未优化网友反映的问题 1.最近将Wordpress迁移至阿里云.由于自己的服务器是云服务器,硬盘和内存都比较小,所以内存经常不够使,通过ps ax命令查看后,发现启动php-fpm进程数 ...

  8. Python 多进程笔记 — 启动进程的方式、守护进程、进程间通信、进程池、进程池之间通信、多进程生产消费模型

    1 面向过程启动多进程 Python 操作进程的类都定义在 multiprocessing 模块,该模块提供了一个 Process 类来代表一个进程对象,这个对象可以理解为是一个独立的进程,可以执行另 ...

  9. 使用cat /proc/进程id/maps 查看进程内存映射

    proc/<PID>/maps 查看进程的虚拟地址空间是如何使用的. 该文件有6列,分别为: 地址:库在进程里地址范围 权限:虚拟内存的权限,r=读,w=写,x=,s=共享,p=私有: 偏 ...

最新文章

  1. 对未来计算机的设想1000字,未来的世界作文1000字
  2. Pyhon爬虫开发:URLError的使用
  3. c语言 map转换成字符串数组,JSON数组形式字符串转换为ListMapString,String的几种方法...
  4. CDZSC_2015寒假新人(1)——基础 i
  5. 学习knex过程中好的参考资料整理
  6. UI设计师必定需要了解的sketch素材
  7. 只要赚钱的项目,很容易沦为资本的标的
  8. 微信小游戏凭什么拿走开发者 70% 的日流水?
  9. 2020最新文本检测算法TextFuseNet
  10. WPS最大的败笔是“免费用,广告弹窗”,难怪用户纷纷使用office
  11. linux mysql show_Linux下 MySQL Show命令的使用
  12. Lena,Pepper等图像,图像处理必备资料。
  13. 社交网络中常用数据集
  14. (Java-11)简单的银行账户模拟
  15. Android各个版本的Feature变更
  16. Linux基础8-TCP的面向链接(三次四次)
  17. FineBI与FineReport对比 1
  18. 凸显计算机学院特色的剧本,高职院校非计算机专业计算机课程的教学改进策略探析 - 计算机教育论文大全 - 小品台词 - 中国国际剧本网...
  19. 静态站点 免费_七个站点,您可以随意使用免费照片
  20. 基于JAVA网上图书销售系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署

热门文章

  1. redis做分布式锁可能不那么简单
  2. cordova使用cordova-plugin-baidumaplocation插件获取定位
  3. springboot设置静态资源不拦截的方法
  4. 知物由学 | 未来安全隐患:AI的软肋——故意欺骗神经网络
  5. android--------内存泄露分析工具—Android Monitor
  6. [CF460E]Roland and Rose
  7. pycharm 通过 SFTP 远程编辑项目的配置
  8. 恢复linux里被误删除的文件
  9. Android .9.png图片的处理
  10. 面向对象的程序设计之原型模式