PHP函数问题
有时候,运行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请求如果遇到问题,可以将以下代码封装到函数中。
最新文章
- Python 学习手册, char 14 - 15
- MATLAB数字图像处理基础
- Lua词汇约定
- C++混合编程之idlcpp教程Lua篇(9)
- css 小三角
- SQLServer系统监控
- tomcat 协议之并发协议 Http11NioProtocol
- 第2章 面向对象的设计原则(SOLID):5_迪米特法则
- HTML: 用CSS畫一個三角形
- 【 随笔 】 D3 难吗?
- XDocument和XmlDocument的区别
- MultiWii MWC的软件和调试方法
- linux中ctrl+z、ctrl+d和ctrl+c的区别
- MessageBoxButtons.OKCancel的选择事件
- android 基础04-BroadCastReceiver
- css3控制div上下跳动
- vue 实现图片上传与预览,以及清除图片
- IntelliJ IDEA 工程Java文件上红色的无效符
- core的微服务相关
- maven+Spring+SpringMVC+Hibernate快速搭建
热门文章
- Android资源文件命名规范学习手册
- 123457123456---com.treeapp.quweiyingyushuzi01----趣味英语数字游戏(儿童宝宝学英语)
- activity 工作流
- rhel7免密登录问题
- mysql导入、导出 ( 带视图)
- orcale11g安装
- 如何抓住ECS的命门,让我们的学习事半功倍
- 【miscellaneous】理解Gstreamer架构
- windows下进程与线程
- org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Could