有时,运转Nginx和PHP-CGI(php-fpm)网络服务的Linux主机突然产生系统负载参与。经常使用top命令检查,很多php-cgi进程的CPU占用率凑近100%。起初经过跟踪发现,这种状况的产生与PHP的file_get_contents()函数亲密相关。(北京网站树立)
在大中型网站中,基于HTTP协定的API接口调用习认为常。PHP程序员青睐用简双繁难的file_get_contents('http://example.com/')函数来失掉一个URL的前往内容,然而假设http://example.com/网站照应慢,file_get_contents()会不时卡在那里,不会暂停。
咱们知道在php.ini中,有一个参数max_executION_TIME可以设置PHP脚本的最长口头期间,然而在php-cgi(php-fpm)中,这个参数是不会失效的。真正管理PHP脚本最大口头期间的是php-fpm.conf性能文件中的以下参数:
作为单个恳求服务的超时(以秒为单位),之后上班进程将被中断
应在max_execution_timeini选项因某种要素未中止脚本口头时经常使用
0s示意封锁
0s/值
自动值为0秒,即PHP脚本将永远口头。这样,当一切的php-cgi进程都卡在file_get_contents()函数中时,这个Nginx+PHPWebServer就不能再处置新的PHP恳求,Nginx就会前往502BadGateway给用户。须要修正该参数来设置PHP脚本的最大口头期间,但治标不治标。比如改成30s,假设file_get_contents()失掉网页内容慢,说明150个php-cgi进程每秒只能处置5个恳求,WebServer也很难防止502Bad网关。
要成功完整的处置打算,PHP程序员只能改掉间接经常使用file_get_contents('http://example.com/')的习气,而是稍微修正一下,加个timeout,依照上方的模式成功HTTPGET恳求。假设感觉费事,可以自己将上方的代码封装成一个函数。
="tag-name">php当然,造成php-cgi进程CPU100%的要素不仅有这一种,那么,怎样确定是file_get_contents()函数造成的呢?
首先,经常使用top命令检查CPU经常使用率较高的php-cgi进程。
找其中一个CPU100%的php-cgi进程的PID,用以下命令跟踪一下:
假设屏幕显示:
那么,就可以确定是file_get_contents()造成的疑问了。
咱们专一上流建站,小程序开发、软件系统定制开发、BUG修复、物联网开发、各类API接口对接开发等。十余年开发阅历,每一个名目承诺做到满意为止,多一次性对比,必定让您多一份收获!
标签: CGI进程CPU、 PHP、 北京网站制造、 100%与file、 contents函数的相关、 get、本文地址: https://yihaiquanyi.com/article/9a6f41b93f71dc6c6125.html
上一篇:北京网站制造公司排名北京网站制造PHP罕用...