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请求如果遇到问题,可以将以下代码封装到函数中。
PHP函数问题的更多相关文章
- Python 小而美的函数
python提供了一些有趣且实用的函数,如any all zip,这些函数能够大幅简化我们得代码,可以更优雅的处理可迭代的对象,同时使用的时候也得注意一些情况 any any(iterable) ...
- 探究javascript对象和数组的异同,及函数变量缓存技巧
javascript中最经典也最受非议的一句话就是:javascript中一切皆是对象.这篇重点要提到的,就是任何jser都不陌生的Object和Array. 有段时间曾经很诧异,到底两种数据类型用来 ...
- JavaScript权威指南 - 函数
函数本身就是一段JavaScript代码,定义一次但可能被调用任意次.如果函数挂载在一个对象上,作为对象的一个属性,通常这种函数被称作对象的方法.用于初始化一个新创建的对象的函数被称作构造函数. 相对 ...
- C++对C的函数拓展
一,内联函数 1.内联函数的概念 C++中的const常量可以用来代替宏常数的定义,例如:用const int a = 10来替换# define a 10.那么C++中是否有什么解决方案来替代宏代码 ...
- 菜鸟Python学习笔记第一天:关于一些函数库的使用
2017年1月3日 星期二 大一学习一门新的计算机语言真的很难,有时候连函数拼写出错查错都能查半天,没办法,谁让我英语太渣. 关于计算机语言的学习我想还是从C语言学习开始为好,Python有很多语言的 ...
- javascript中的this与函数讲解
前言 javascript中没有块级作用域(es6以前),javascript中作用域分为函数作用域和全局作用域.并且,大家可以认为全局作用域其实就是Window函数的函数作用域,我们编写的js代码, ...
- 复杂的 Hash 函数组合有意义吗?
很久以前看到一篇文章,讲某个大网站储存用户口令时,会经过十分复杂的处理.怎么个复杂记不得了,大概就是先 Hash,结果加上一些特殊字符再 Hash,结果再加上些字符.再倒序.再怎么怎么的.再 Hash ...
- JS核心系列:浅谈函数的作用域
一.作用域(scope) 所谓作用域就是:变量在声明它们的函数体以及这个函数体嵌套的任意函数体内都是有定义的. function scope(){ var foo = "global&quo ...
- C++中的时间函数
C++获取时间函数众多,何时该用什么函数,拿到的是什么时间?该怎么用?很多人都会混淆. 本文是本人经历了几款游戏客户端和服务器开发后,对游戏中时间获取的一点总结. 最早学习游戏客户端时,为了获取最精确 ...
- Python高手之路【四】python函数装饰器
def outer(func): def inner(): print('hello') print('hello') print('hello') r = func() print('end') p ...
随机推荐
- java-mybaits-013-mybatis-Interceptor-拦截器执行顺序
一.概述 已知拦截器能够拦截四种类型:Executor.ParameterHandler.ResultSetHandler.StatementHandler. 1.1.不同类型拦截器的执行顺序 背景: ...
- 001-java 设计模式概述
一.概述 思维导图 GoF(“四人帮”,又称Gang of Four,即Erich Gamma, Richard Helm, Ralph Johnson & John Vlissides) 1 ...
- QML使用MouseArea
1.普通使用 MouseArea { anchors.fill: parent hoverEnabled: true//为true才会触发进入信号 onClicked: { } onEntered: ...
- C++队列和链表
1.什么是队列[queue] 队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表. 关于队列 ...
- spark中的cache和persist的区别
在使用中一直知其然不知其所以然的地使用RDD.cache(),系统的学习之后发现还有一个与cache功能类似看起来冗余的persist 点进去一探究竟之后发现cache()是persist()的特例, ...
- PAT 甲级 1062 Talent and Virtue (25 分)(简单,结构体排序)
1062 Talent and Virtue (25 分) About 900 years ago, a Chinese philosopher Sima Guang wrote a histor ...
- 第二十二章 集成验证码——《跟我学Shiro》
目录贴:跟我学Shiro目录贴 在做用户登录功能时,很多时候都需要验证码支持,验证码的目的是为了防止机器人模拟真实用户登录而恶意访问,如暴力破解用户密码/恶意评论等.目前也有一些验证码比较简单,通过一 ...
- 查询 ip占用导致ip不通的 问题 查IP对应的mac地址
IP冲突, 同一个IP配到了多余1台的机器上 ,导致IP 不通的情况,此时需要查询 都有哪台机器配置了这个IP,用 arping 命令, 具体命令 类似于 ping ,直接 arping + 目标地 ...
- SpringBoot Profile使用详解及配置源码解析
在实践的过程中我们经常会遇到不同的环境需要不同配置文件的情况,如果每换一个环境重新修改配置文件或重新打包一次会比较麻烦,Spring Boot为此提供了Profile配置来解决此问题. Profile ...
- csu 1958: 数字游戏
1958: 数字游戏 Submit Page Summary Time Limit: 2 Sec Memory Limit: 128 Mb Submitted: 134 ...