原标题:百度经验:两步搞定PHP-FPM优化,让服务器更平稳

导言:Web服务器的CPU指标和MEM指标异常,不稳定?可能是PHP-FPM进程重启机制的问题导致的,一同和百度外卖探索下如何优化吧。作者简介:

猛哥

百度外卖基础架构部在线开发方向负责人

负责在线开发框架的持续优化和长期演进,主导研发的WFE/WODP/WOSP组成一套完整高效的WEB架构,支撑百度外卖所有在线服务高速高质量地发展。

百度外卖基础架构部在线开发团队

擅长自底向上地创造和优化基础框架、基础库和基础服务,对NGINX和PHP有深层次的理解和创新性的改造。天下大事必作于细,百度外卖基础架构部在线开发团队,将持续精耕细作,适时发布成熟有效的在线服务优化方案,期待与同行保持交流,共同进步。摘要

通过优化PHP-FPM进程重启机制,改善线上服务器CPU_IDLE和MEM_USED波动的问题,使服务器资源利用率更加平滑可靠。

背景

外卖交易服务集群报出在监控图上CPU_IDLE波动剧烈,如图所示。

事实上一直以来,不仅PU_IDLE存在一定的波动,MEM_USED的周期性断崖式下降再回升也早已司空见惯。那么CPU_IDLE与MEM_UESD的波动是否存在关联,追溯这种现象产生的原因,我们就必须理解PHP-FPM进程管理器的机制。

原理

在PHP5.3.3版本中,PHP-FPM正式被官方收编,作为FastCGI管理器,支持平滑停止启动进程、slow-log、动态进程、运行状态等特性。

PHP-FPM进程管理支持三种方式:static、dynamic、ondemand。我们选用的是static方式,即PHP-FPM生成固定数量的FastCGI进程,这种方式比较简单,避免了频繁开启关闭进程的开销。(在线下虚拟机环境中,进程管理可以配置成ondemand,既降低了内存需求又避免了进程数量不够用)

回到面临的问题上,CPU_IDLE和MEM_USED的周期性波动是如何产生的。首先这是一种所有的集群都存在的现象,然后交易服务集群表现尤为突出。在排查了应用程序(比如日志采集程序、定时脚本)的影响后,思路落在了PHP-FPM的一个关键参数上:max_requests。

max_requests这个参数使FastCGI进程在处理一定数量的请求后自动重启,以此避免第三方扩展内存泄漏产生破坏性影响。打开线上配置,发现外卖交易服务集群中配置该参数过小,为1000,这便造成了在请求高峰期,FastCGI频繁重启,对CPU产生了负担。于是将max_requests参数调整为10000后,CPU_IDLE表现得到了改善,如图。

但是经过观察发现,CPU_IDLE和MEM_USED周期性波动的问题并没有根除,效果如图。

这很好理解,我们调大max_requests参数,但是FastCGI重启机制依然生效,每个请求都会计数,当计数到达max_request之后,cgi进程会执行 fcgi_finish_request退出进程,子进程退出,fpm-master进程会收到SIGCHLD信号,运行fpm_children_bury重启进程,重启的方式是fork一个子进程。

FastCGI进程通过unix socket承接Nginx请求,负载较为均衡,生产环境流量大,PHP进程数配置较大,数以百计的FastCGI会在同一时间到达 max_requests上限而进行重启,这便造成了CPU_IDLE和MEM_USED周期性波动。

优化

max_requests的初衷是为了避免第三方扩展引起的内存泄漏问题,虽然线上环境使用的扩展经过分析和测试,并没有严重的内存泄漏问题,但是由于扩展内部使用的第三方库太多,并无法完全避免内存泄漏问题,同时max_requests机制很适合FastCGI多进程环境,以较小的代价,换取内存泄漏的长治久安。

为了避免CPU_IDLE和MEM_USED周期波动,同时保持max_requests机制,需要在PHP-FPM源码上稍作修改。FastCGI进程在启动时,设置max_requests,此时只要将max_requests配置参数散列开,使FastCGI进程分别配置不同的值,即可达到效果。

具体代码在sapi/fpm/fpm/fpm.c,修改如下:

php_mt_srand(GENERATE_SEED());*max_requests=fpm_globals.max_requests+php_mt_rand()&8191;

总结

经过修改上线,对比效果见下图

至此CPU_IDLE和MEM_USED已经告别了周期性波动,避免了CPU计算资源产生浪涌效果,内存占用数据也更加真实可靠。

以此文抛砖引玉,PHP-FPM在生产环境的精细优化,任重而道远。返回搜狐,查看更多

责任编辑:

51php服务器稳不稳定,百度经验:两步搞定PHP-FPM优化,让服务器更平稳相关推荐

  1. 两步搞定Hyperledger主打区块链解决方案Fabric

    区块链技术发展至今,形成了公有链和联盟链两种主流技术平台. 公有链 面向大众,用户可以匿名参与,非常方便,账本数据也公开,加上强大的智能合约,因此公有链极大地促进了区块链概念和技术的普及,比如比特币. ...

  2. 两步搞定暴风影音的文字广告!

    两步搞定暴风影音的文字广告! 今天才把暴风影音2升级了(已到2.07.08.20),重启后,居然看见有广告,虽然还是文字阶段!于是就在其官网的BBS看见了这个 关于暴风文字链广告的公告--恳请广大用户 ...

  3. H5页面-两步搞定文字首行缩进

    H5页面-两步搞定文字首行缩进 1. 定义样式 2. 应用样式 有时我们需要对一大段文字进行首行缩进(就是那种写作文每段前面空2格的意思) 1. 定义样式 在head里面定义好样式 p: p标签 te ...

  4. 两步搞定ubuntu18.04安装QQ,并实现屏幕共享,亲测

    腾讯官方不做linux版QQ,而是第三方deepin-wine做的. 第1步,下载和安装最新的deepin-wine环境: https://github.com/wszqkzqk/deepin-win ...

  5. 苹果手机怎么在照片上添加文字_给微信拍照的照片添加文字,调整后期效果,手机两步搞定!...

    给微信拍照的照片添加上文字,并调整后期效果非常的简单哦!添加文字一键搞定,添加滤镜.纹理以及调整图片的各种参数,也都是一键搞定哦,非常的方便的! 除了直接添加上后期效果和文字,还能够使用一些模版,增加 ...

  6. 如何用分区助手来进行分区U盘或外接硬盘【教你两步搞定】

    第一步:下载PAWinPE(分区助手) 链接:https://pan.baidu.com/s/1mJ5ydy4tNxNOwwbrXuXAKw 提取码:fnjw 第二步:

  7. WiFi防蹭网两步搞定

    打开这两个设置可以有效防止蹭网

  8. 数仓实战|两步搞定Hive数据加载到Greenplum

    如果说Hive是离线数仓的代表,那么Greenplum就是MPP数据库的代表.在离线数仓的年代,以Hive为核心的数据仓库席卷数据仓库市场,几乎成为了离线数仓的代名词.但是Hive的查询能力非常弱,通 ...

  9. 利用DB Link两步搞定Oracle两个数据库间的表同步

    一.实现目标: 要实现从源表:AAA到目标表:BBB的数据同步. 二.在目标机上建立Oracle DB Link: 1. 在network/admin/tnsname.ora文件中加入源库的连接信息, ...

最新文章

  1. Win7编译volley成jar包
  2. CIW《操作系统安全》目录
  3. 让串口可以自动分辨一帧数据
  4. 深度学习:Neural Network Layers Understanding
  5. 线上分享 | 增长思维:如何选择最优增长模式?
  6. Spring 3整合Quartz 2实现定时任务三:动态暂停 恢复 修改和删除任务
  7. 图文教程:如何将电脑TXT文档传到iPhone5并阅读之(无需越狱)
  8. ios键盘弹回时顶上去得页面不会回来
  9. 深入理解Linux/Unix文件描述符和epoll
  10. Java虚拟机学习(四)
  11. CocoaPods管理第三方
  12. 2048游戏简单实现
  13. Mysql如何按照指定间隔时间查询数据
  14. 正方形里面两个扇形相交部分_正方形里面为两个半圆相交,求相交部分阴影面积...
  15. Flink源码剖析:回撤流
  16. 护眼灯到底有没有护眼的效果?带你了解市面上的护眼灯真的护眼吗
  17. 免费临时网页邮箱(可丢弃式邮箱)
  18. 逻辑思维类面试题汇编七
  19. 什么是RGB模式与BGR模式
  20. CAEE2023精密冲压件/五金件、精密冲床、模具展览会

热门文章

  1. C Primer Plus怎样高效学?C语言大神案例值得借鉴!
  2. Nature 子刊重磅:腾讯与钟南山团队发布新冠危重症 AI 预测模型 Cox
  3. BTCU 分叉,真的是比特币“千年痛点”克星吗?
  4. “不会Linux,怎么当程序员?”面试官:等着被淘汰吧!
  5. 5G手机江湖:一场卡位战,一位“关键先生”,一个“王者”
  6. 马云谈 5G 危机;腾讯推出车载版微信;Ant Design 3.22.1 发布 | 极客头条
  7. 化敌为友,微软出手优化 Chrome!
  8. 用脚踹?地震火灾中,如何快速打开人脸识别闸机门?
  9. AI 秒杀人类!OpenAI 击败 DOTA2 世界冠军 OG
  10. 无人驾驶飞机来了!空难后波音的电动飞机你敢乘吗?