转的网上的,不过对PHP-CGI菜鸟的人,还是有点帮助的。

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文件中

转载于:https://blog.51cto.com/ppp1013/631087

php-cgi占用cpu资源过高的解决方法相关推荐

  1. php-cgi cpu很高,php-cgi占用cpu资源过高的解决方法

    转的网上的,不过对PHP-CGI菜鸟的人,还是有点帮助的. 1. 一些php的扩展与php版本兼容存在问题,实践证明 eAccelerater与某些php版本兼容存在问题,具体表现时启动php-cgi ...

  2. Win10开机wsappx进程占用CPU资源过高,最全的解决方法总结。

    Windows10系统很多用户都遇到了wsappx进程占用CPU资源过高的情况,笔者的三台电脑也都遇到了这样的情况,试过网上很多方法,都没有很好解决,起初得两台电脑都是重装系统后解决的.但是后来新的电 ...

  3. Windows10系统下wsappx占用CPU资源过高

    在Windows10系统开机的时候,wsappx进程占用的CPU资源非常高,导致电脑运行速度缓慢,那么我们如何关闭wsappx进程 [现象] 1.先来看一下电脑刚开机的时候,wsappx进程占CPU资 ...

  4. Win10音频设备图形隔离占用CPU使用率过高怎么解决

    系列文章目录 文章目录 系列文章目录 前言 一.具体步骤 前言 我们经常在使用电脑的时候,会经常遇到电脑很卡,打开任务管理器,查看是哪个程序在占用电脑大量资源的时候,发现名为Windows音频设备图形 ...

  5. linux 内核空间占用cpu百分比过高,linux下分析java程序占用CPU、内存过高

    一.CPU过高分析 1)使用TOP命令查看CPU.内存使用状态可以发现CPU占用主要分为两部分,一部分为系统内核空间占用CPU百分比,一部分为用户空间占用CPU百分比.其中CPU状态中标示id的为空闲 ...

  6. linux cpu 使用10个进程,linux下获取占用CPU资源最多的10个进程

    linux下获取占用CPU资源最多的10个进程,可以使用如下命令组合: ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head linux下获取占用 ...

  7. lum使用cgi处理PHP,php-cgi进程占用cpu资源过多负载高的原因分析及解决步骤

    服务器环境:redhat linux 5.5 , nginx ,  phpfastcgi 在此环境下,一般php-cgi运行是非常稳定的,但也遇到过php-cgi占用太多cpu资源而导致服务器响应过慢 ...

  8. linux下获取占用CPU资源最多的10个进程,可以使用如下命令组合: ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head linux下

    linux下获取占用CPU资源最多的10个进程,可以使用如下命令组合: ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head linux下获取占用 ...

  9. Linux Shell脚本专栏_找出占用CPU/内存过高的进程_05

    文章目录 找出占用CPU/内存过高的进程 1. 脚本 2. 运行脚本 3. 效果图 找出占用CPU/内存过高的进程 1. CPU 过高的进程2. 内存 过高的进程 1. 脚本 #/bin/bash e ...

最新文章

  1. 人群距离监测 DeepSOCIAL 最全汉化论文+源码导读
  2. 防止对 Visual Basic .NET 或 C# 代码进行反相工程
  3. TextureView+MediaPlayer实现在线短视频播放
  4. HDUOJ---2112HDU Today
  5. RxSwift之深入解析map操作符的底层实现
  6. 《5G,未来已来》——工信部发布5G宣传片!!!
  7. 服务器的hosts文件位置,Hosts文件位置和书写规范
  8. 一篇文章教会你使用Python定时抓取微博评论
  9. java。用类描述计算机中CPU的速度和硬盘的容量。要求Java应用程序有4个类,名字分别是PC、CPU、HardDisk和Test,其中Test是主类。
  10. Mapabc——地图标注
  11. 跟我学AngularJs:Directive指令用法解读(上)
  12. 初识华为设备和基本命令
  13. plex插件显示无服务器,deepin 15.11 安装plex和插件
  14. ui sketch_如何在Sketch中设计汽车应用程序设计UI
  15. office起动缓慢_怎么解决Office2016启动特别慢?
  16. 爬虫爬取豆瓣电影排行,保存到excel和SQLite
  17. Linux输入子系统框架
  18. Flutter学习第十五天:2021年最新版超详细Flutter实现Mob+SMSSDK手机验证码登录实现,Android和Flutter混合开发?
  19. wap.php区别,WAP与PHP程序设计之基础篇
  20. 深度学习——回归问题

热门文章

  1. 转:ASP.NET状态保存方法
  2. java与c/c++之间的数据交互-----jni点滴
  3. ASP.NET MVC 3中ViewBag, ViewData和 TempData
  4. 对做C#自定义控件的一点心得
  5. Cisco交换机解决网络蠕虫病毒***问题
  6. QOS的qmtoken 1
  7. Linux01-基本操作与Shell
  8. 解读Go语言的2018:怎么就在中国火成这样了?
  9. (C++)异常退出情况合集(持续更新中)
  10. 哪些人适合参加Python培训班?