Linux下php-cgi占内存100%电脑变的很卡的解决方法




Linux下php-cgi占内存100%电脑变的很卡的解决方法

2022-07-20 20:26:57 网络知识 官方管理员

  Linux系统在使用的时候,电脑变的很卡,发现是php-cgi进程在占用cpu,占用率既然达到了100%,究竟是什么原因导致这种情况的呢?下面小编就给大家介绍下Linux系统php-cgi占用cpu百分百的解决方法

  网站日志目录/home/hosts_log

  日志文件有对应的网站id

  php-cgi日志目录/usr/local/php_fcgi/logs

  php-fpm.log

  slow.log

  查看日志文件基本上就可以解决问题了,网站被入侵上传了一个phpddos文件,当然如果不是此问题可以如下查看是不是程序问题有时使用file_get_contents函数也可能导致cpu100%。

  在php.ini中,有一个参数max_execution_time可以设置PHP脚本的最大执行时间,但是,在php-cgi(php-fpm)中,该参数不会起效。真正能够控制PHP脚本最大执行时间的是php-fpm.conf配置文件中的以下参数:

  Thetimeout(inseconds)forservingasinglerequestafterwhichtheworkerprocesswillbeterminated

  Shouldbeusedwhen‘max_execution_time’inioptiondoesnotstopscriptexecutionforsomereason

  ‘0s’means‘off’

  《valuename=request_terminate_timeout》0s《/value》

  默认值为0秒,也就是说,PHP脚本会一直执行下去。这样,当所有的php-cgi进程都卡在file_get_contents()函数时,这台Nginx+PHP的WebServer已经无法再处理新的PHP请求了,Nginx将给用户返回502BadGateway。修改该参数,设置一个PHP脚本最大执行时间是必要的,但是,治标不治本。例如改成《valuename=request_terminate_timeout》30s《/value》,如果发生file_get_contents()获取网页内容较慢的情况,这就意味着150个php-cgi进程,每秒钟只能处理5个请求,WebServer同样很难避免502BadGateway。

  要做到彻底解决,只能改掉直接使用file_get_contents的习惯,而是稍微修改一下,加个超时时间,用以下方式来实现HTTPGET请求。要是觉得麻烦,可以自行将以下代码封装成一个函数。

  《?php

  $ctx=stream_context_create(array(

  ‘http’=》array(

  ‘timeout’=》1//设置一个超时时间,单位为秒

  )

  )

  );

  file_get_contents(http://www.111cn.net/,0,$ctx);

  ?》

  当然如果像dedecms生成html页面时cpu也会100%的情况。

  Linux下php-cgi进程占用cpu百分百的解决方法就介绍到这里了,还有一种可能是中毒导致的,这就需要杀毒处理了。


发表评论:

最近发表
网站分类
标签列表