服务器环境:redhat linux 5.5 , nginx , phpfastcgi
在此环境下,一般php-cgi运行是非常稳定的,但也遇到过php-cgi占用太多cpu资源而导致服务器响应过慢,我所遇到的php-cgi进程占用cpu资源过多的原因有:
1. 一些php的扩展与php版本兼容存在问题,实践证明 eAccelerater与某些php版本兼容存在问题,具体表现时启动php-cgi进程后,运行10多分钟,奇慢无比,但静态资源访问很快,服务器负载也很正常(说明nginx没有问题,而是php-cgi进程的问题),解决办法就是从php.ini中禁止掉eAccelerater模块,再重启php-cgi进程即可
2. 程序中可能存在死循环,导致服务器负载超高(使用top指令查看负载高达100+), 需要借助Linux的proc虚拟文件系统找到具体的问题程序
3. php程序不合理使用session , 这个发生在开源微博记事狗程序上,具体表现是有少量php-cgi进程(不超过10个)的cpu使用率达98%以上, 服务器负载在4-8之间,这个问题的解决,仍然需要借助Linux的proc文件系统找出原因。
4. 程序中存在过度耗时且不可能完成的操作(还是程序的问题),例如discuz x 1.5的附件下载功能: source/module/forum/forum_attachement.php中的定义
function getremotefile($file) {
global $_G;
@set_time_limit(0);
if(!@readfile($_G['setting']['ftp']['attachurl'].'forum/'.$file)) {
$ftp = ftpcmd('object');
$tmpfile = @tempnam($_G['setting']['attachdir'], '');
if($ftp->ftp_get($tmpfile, 'forum/'.$file, FTP_BINARY)) {
@readfile($tmpfile);
@unlink($tmpfile);
} else {
@unlink($tmpfile);
return FALSE;
}
}
return TRUE;
}
没有对传入的参数作任何初步检查,而且设置了永不超时,并且使用readfile一次读取超大文件,就可能存在以下问题:
A. 以http方式读取远程附件过度耗时
B. FTP无法连接时,如何及时反馈出错误?
C. readfile是一次性读取文件加载到内存中并输出,当文件过大时,内存消耗惊人
根据实验发现采用readfile一次性读取,内存消耗会明显增加,但是CPU的利用率会下降较多。如果采用分段读取的方式,内存消耗会稍微下降,而CPU占用却会明显上升。
对discuz x 1.5的这个bug较好解决方法就是后台重新正确设置远程附件参数。
以下是我逐步整理的故障排除步骤:
1. 得到占用cpu资源过多的php-cgi进程的pid(进程id), 使用top命令即可,如下图:
经过上图,我们发现,有两个php-cgi进程的cpu资源占用率过高,pid分别是10059,11570,这一般都是程序优化不够造成,如何定位问题的php程序位置?
2. 找出进程所使用的文件
/proc/文件系统保存在内存中,主要保存系统的状态,关键配置等等,而/proc/目录下有很多数字目录,就是进程的相关信息,如下图,我们看看进程10059正在使用哪些文件?
显然,使用了/home/tmp/sess_*文件,这明显是PHP的session文件, 我们查看这个session文件的内容为:view_time|123333312412
到这里,我们已经可以怀疑是由于php程序写入一个叫view_time的session项而引起, 那么剩余的事件就是检查包含view_time的所有php文件,然后修改之(比如改用COOKIE),这实话, 这个view_time并非敏感数据,仅仅记录用户最后访问时间,实在没必要使用代价巨大的session, 而应该使用cookie。
3. 找出有问题的程序,修改之
使用vi编辑以下shell程序(假设网站程序位于/www目录下)
#!/bin/bash
find /www/ -name "*.php" > list.txt
f=`cat ./list.txt`
for n in $f
do
r=`egrep 'view_time' $n`
if [ ! "$r" = "" ] ; then
echo $n
fi
done
运行这个shell程序,将输出包含有view_time的文件, 对记事狗微博系统,产生的问题位于modules/topic.mod.class文件中
- 大小: 99 KB
- 大小: 59.7 KB
分享到:
相关推荐
进程导致CPU占用100%的问题分析及解决方案 #### 一、问题背景 在IT运维领域中,服务器资源管理尤其是CPU利用率的监控至关重要。当出现服务器上的`php-cgi.exe`进程占用大量CPU资源的情况时,可能会导致整个系统的...
"PHP-CGI占用CPU100%的原因分析" 在实际工作中,经常会遇到PHP-CGI占用CPU100%的情况,这种情况会导致服务器的性能下降,影响到网站的正常运行。那么,PHP-CGI为什么会占用CPU100%呢? 首先,我们需要了解PHP-CGI...
php_cgi_start => 填写 php-cgi 启动参数及端口 php_cgi_num => 填写同时运行 php-cgi 的个数 其他使用默认配置即可 工具简陋,原本供自己使用,现方便有相同需求的人。 压缩包内有邮箱,有疑问可发邮件。
为了解决这个问题,我们可以使用"RunHiddenConsole xxfpm nginx windows php-cgi进程维护工具"。这个工具组合包括了RunHiddenConsole.exe和xxfpm等组件,旨在确保PHP-CGI进程稳定运行。 首先,我们要理解`...
windows下 解决PHP-CGI 进程崩溃502的资源包,资源包中包括pthreadGC2.dll、registe.bat、restart_cgi.bat、RunHiddenConsole.exe、xxfpm.exe文件,详细使用方法可参考博客文章{windows下 解决PHP-CGI 进程崩溃502}
当PHP-CGI进程占用大量CPU资源时,可能是由于多种原因,如代码错误、无限循环、资源泄露或与外部服务的通信问题等。 在案例中,用户首先描述了其网站架构:使用Nginx作为负载均衡器,连接两台Web服务器,通过NFS...
6. **安全性增强**:通过限制单个进程的资源使用,如内存和CPU,防止恶意脚本消耗过多资源,增加系统的安全性。 **使用xxfpm的步骤** 1. **下载安装**:获取xxfpm的压缩包,解压至服务器的合适位置。 2. **配置...
此外,确认是否是`file_get_contents()`引起CPU使用率过高,可以通过`top`命令查找CPU使用率最高的`php-cgi`进程,并进一步检查其执行的脚本,或者使用类似`strace`的工具进行进程跟踪,观察是否有长时间阻塞在`file...
当遇到PHP-CGI进程CPU负载过高时,应首先通过监控工具(如`top`、`strace`)找出占用资源的进程或函数。在本案例中,`wp-cron.php`定时任务是罪魁祸首。禁用WP-Cron可以有效地降低服务器负载。同时,定期检查并优化...
它以其高性能和低内存占用而著名。而PHP-CGI是PHP的一个版本,通过CGI(通用网关接口)协议与Web服务器进行交互,用于处理动态内容。 1. **安装Nginx和PHP-CGI** 在Windows上,你需要下载Nginx和PHP的Windows二...
当FastCGI进程因为负载、资源限制或配置不当而未能在规定时间内完成任务时,就会导致超时错误。这个标签指明了解决问题时需要关注的核心概念,即PHP进程的运行效率和超时设置。 详细内容中的知识点:在详细内容部分...
在Linux系统中,当php-cgi进程占用...综上所述,解决Linux环境下php-cgi进程高CPU占用问题,通常需要结合日志分析、配置调整、代码优化和安全检查等多方面的方法。通过这些措施,可以有效地提升服务器的性能和稳定性。
本安装文件修改了源码网的“CentOS 集成linux+php-cgi+nginx+mysql安装包“里面的部分文件,主要是修改了install.sh内的几个错误位置。目前我测试在centos 5.4下,安装一切正常! 使用这个安装之前请一定看一下本...
FastCGI是语言无关的、可伸缩架构的CGI开放扩展,其主要行为是将CGI解释器进程保持在内存中并因此获得较高的性能。 FastCGI与CGI特点: 1. 语言无关性 2. 独立于核心web服务器运行 3. 支持多种语言,包括C/C++、...
在Linux系统中,PHP-FPM (FastCGI Process Manager) 是用于管理PHP进程的一个高效解决方案。然而,当php-fpm进程过多时,可能会导致服务器内存耗尽,从而影响到其他服务的正常运行,比如数据库服务。本篇文章将详细...
– FastCGI 进程超过了配置的请求超时时限【环境】:php + IIS7.5解决办法:方法一:C:\Windows\System32\inetsrv\config\applicationHost.config 进行编辑,将activityTimeout设置调大,默认为600(10分钟),最大...
Windows下PHP-CGI 作为进程管理器
FastCGI则解决了CGI的性能问题,它允许PHP进程持续运行,接收并处理多个请求,提高了系统资源利用率。PHP-CGI可以以两种模式运行:CGI和FastCGI。当以FastCGI模式运行时,PHP-CGI可以作为一个管理器,监听特定端口...