有时候,运行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. 微信小程序-上传下载
  2. Emit学习(4) - Dapper解析之数据对象映射(一)
  3. 删除多余的provisioning profile
  4. oracle中if/else功能的实现的3种写法
  5. arm裸机驱动错误总结
  6. 安卓 SQLite数据库操作实例
  7. Java泛型类和泛型方法
  8. [SQL]LeetCode601. 体育馆的人流量 | Human Traffic of Stadium
  9. unic
  10. HTML元素类别及转换
  11. INFO JobScheduler: Added jobs for time 1524468752000 ms/INFO MemoryStore: Block input-0-1524469143000 stored as bytes in memory/完全分布式 ./bin/run-example streaming.NetworkWordCount localhost 9999无法正常运行
  12. NOIP2012 Day1 T2国王游戏 洛谷P1080
  13. android开发心得之知识的量变到质变
  14. Distributing Ballot Boxes
  15. for-in 和 for
  16. C#抽象方法
  17. Zigbee系列(end device)
  18. 触摸事件【MotionEvent】简介
  19. STM32的备份寄存器和控制状态寄存器
  20. Tarball——以源代码的方式安装软件

热门文章

  1. Bitmap之getPixel和setPixel函数
  2. 阶段5 3.微服务项目【学成在线】_day09 课程预览 Eureka Feign_08-课程预览技术方案
  3. @Component默认是单例还是多例?
  4. (四)java对象的结构和对象的访问定位
  5. 【Leetcode_easy】746. Min Cost Climbing Stairs
  6. Flutter TextField 文本输入框的基本属性及详解
  7. python面向对象学习笔记(一)
  8. Lnamp的高级网站架构+动静分离+反向代理
  9. vector iterators incompatible
  10. Layui 上传图片到磁盘上 + Tomcat 配置虚拟路径