PHP-CGI 进程 CPU …
来源:互联网 发布:java 手机短信验证码 编辑:程序博客网 时间:2024/05/28 06:04
有可能是file_get_contents() 函数造成的情况。
file_get_contents("http://www.abc.com/api.php")函数,用来获取一个URL的返回内容,但是如果http://example.com/api.php这个网站响应缓慢,file_get_contents()就会一直停在那儿,但是不会超时。
在php.ini中,有一个参数 max_execution_time 可以设置 PHP 脚本的最大执行时间,但是,在php-cgi(php-fpm) 中,该参数不会起效。真正能够控制 PHP 脚本最大执行时间的是 php-fpm.conf配置文件中的以下参数:
0s
默认值为0秒,也就是说,PHP脚本会一直执行下去。这样当所有的 php-cgi 进程都卡在 file_get_contents()函数时,这台 Nginx+PHP 的 WebServer 已经无法再处理新的 PHP 请求了,Nginx 将给用户返回“502 BadGateway”。修改该参数,设置一个 PHP 脚本最大执行时间是必要的,但是,治标不治本。例如:改成 30s,如果发生file_get_contents() 获取网页内容较慢的情况,这就意味着 150 个 php-cgi 进程,每秒钟只能处理 5个请求,WebServer 同样很难避免“502 Bad Gateway”。
要做到彻底解决,只能让 PHP 程序员们改掉直接使用file_get_contents("http://example.com/api.php")的习惯,而是稍微修改一下,加个超时时间,用以下方式来实现 HTTP GET请求。要是觉得麻烦,可以自行将以下代码封装成一个函数。
- \<\?php
- $ctx= stream_context_create(array(
- 'http'=> array(
- 'timeout'=> 1 //设置一个超时时间,单位为秒
- )
- )
- );
- file_get_contents("http://example.com/",0, $ctx);
- \?\>
- PHP-CGI 进程 CPU …
- PHP-CGI 进程 CPU …
- My understanding on CGI and enab…
- Python cgi windows
- PHP 的命令行模式 ¶--cli-cgi
- poj 3459 Dual Core CPU(最小割 di…
- 集线器 交换机 路由器 网桥 …
- php加速 PHP APC …
- 列举 Windows 所有进程…
- Linux:内核进程 (脑里面必有…
- 使用BBED修改SCN …
- PHP JSON extension not avaliabl…
- 用 Zend Studio 消灭 PHP 应用程序…
- 如何让 PHP json_encode…
- mysql+php select 下拉…
- php sphinx 高效率搜索引擎…
- php sphinx 高效率搜索引擎…
- Your PHP installation&…
- localForage——轻松实现 Web&n…
- 让你的HTML5&CSS3网站在老IE中也能…
- Java 理论与实践: 描绘线程安全性
- PHPFastCGI进程管理器PHP-FPM详解
- nginx的 CPU参数worker_proce…
- PHP-CGI 进程 CPU …
- [转]thrift 轻松实现多语言跨…
- navigation bar下面有一条黑线
- JS中的prototype
- PHP页面输出缓存控制
- mysql主从同步配置
- MySQL主从复制配置(包括备份原始数…
- 设计模式-PHP实现单件模式的几种…
- JS读取UserAgent信息并做判断