有时候,运行nginx和PHP CGI(PHP FPM)web服务的Linux服务器,突然系统负载上升,用top命令查看,很多phpcgi进程的CPU利用率接近100%后来通过跟踪发现,这种情况与PHP的file_get_contents()函数密切相关。

在大中型网站中,基于HTTP协议的API调用比较常见PHP程序员喜欢使用休闲鹿简单方便的file﹣get﹣contents(“http://example.com/”)函数来获取URL的返回内容但是,如果http://example.com/网站响应缓慢,则文件﹣get﹣contents()将始终停留在那里,并且不会超过时间限制。

我们知道,马克斯中有一个参数,它可以指定执行时间,它可以设置PHP脚本的最大执行时间。但是,在PHP CGI(PHP FPM)中,这个参数不起作用PHP FPM.CONF配置文件中的下列参数可以真正控制PHP脚本的最大执行时间:

查看素描?

服务单个请求的超时(以秒为单位),在此之后将终止工作进程

应在“max_execution_time”ini选项因某种原因未停止脚本执行时使用

“0s”表示“off”

<value name=“request\u terminate\u timeout”>0s</value>

默认值为0秒,这意味着PHP脚本将继续执行这样,当所有的PHP CGI进程都被困在file﹣get﹣contents()函数中时,nginx+PHP web服务器将不再处理新的PHP请求,nginx将向用户返回“502坏网关”有必要修改这个参数来设置PHP脚本的最大执行时间,但是没有必要治愈这些症状。例如,更改为<value name=“request﹣terminate﹣timeout>30s</value>如果file﹣get﹣contents()获取网页内容的速度很慢,这意味着150个PHP CGI进程每秒只能处理5个请求,而webserver也很难避免“502坏网关”。

要彻底解决这个问题,PHP程序员只能摆脱直接使用文件“get”内容(“http://example.com/”)的习惯,只需稍微修改一下,添加一个超时,然后按照以下方式实现httpget请求如果遇到问题,可以将以下代码封装到函数中。

最新文章

  1. Python 学习手册, char 14 - 15
  2. MATLAB数字图像处理基础
  3. Lua词汇约定
  4. C++混合编程之idlcpp教程Lua篇(9)
  5. css 小三角
  6. SQLServer系统监控
  7. tomcat 协议之并发协议 Http11NioProtocol
  8. 第2章 面向对象的设计原则(SOLID):5_迪米特法则
  9. HTML: 用CSS畫一個三角形
  10. 【 随笔 】 D3 难吗?
  11. XDocument和XmlDocument的区别
  12. MultiWii MWC的软件和调试方法
  13. linux中ctrl+z、ctrl+d和ctrl+c的区别
  14. MessageBoxButtons.OKCancel的选择事件
  15. android 基础04-BroadCastReceiver
  16. css3控制div上下跳动
  17. vue 实现图片上传与预览,以及清除图片
  18. IntelliJ IDEA 工程Java文件上红色的无效符
  19. core的微服务相关
  20. maven+Spring+SpringMVC+Hibernate快速搭建

热门文章

  1. Android资源文件命名规范学习手册
  2. 123457123456---com.treeapp.quweiyingyushuzi01----趣味英语数字游戏(儿童宝宝学英语)
  3. activity 工作流
  4. rhel7免密登录问题
  5. mysql导入、导出 ( 带视图)
  6. orcale11g安装
  7. 如何抓住ECS的命门,让我们的学习事半功倍
  8. 【miscellaneous】理解Gstreamer架构
  9. windows下进程与线程
  10. org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Could