V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
abcbuzhiming
V2EX  ›  PHP

PHP-CGI 进程过多,该如何查找原因?

  •  
  •   abcbuzhiming · 2016-10-26 20:54:17 +08:00 · 3153 次点击
    这是一个创建于 2979 天前的主题,其中的信息可能已经有所发展或是发生改变。
    系统是 windows 2008 R2 ,通过 IIS7.5 ,以 fastcgi 模式执行 php ,这两天怀疑遭到攻击, php-cgi 进程可以出现上百个那么多,而且从用户名看出均是 IIS 下某个特定站点启动的。怀疑该站点下是否有某段程序写的有漏洞造成死循环,被外界发现了,然而,该如何进一步定位这个问题?
    21 条回复    2016-11-08 09:26:54 +08:00
    huigeer
        1
    huigeer  
       2016-10-26 20:56:55 +08:00 via Android
    iis 日志导出,分析访问日志路由和 ip
    cxbig
        2
    cxbig  
       2016-10-26 21:06:08 +08:00
    僵尸进程,我司有类似情况, Linux 系统,写了一个脚本从 log 里统计特定参数,达到阈值自动重启 php-fpm ,并清理 pid 小于新的主进程的所有 worker 。
    vibbow
        3
    vibbow  
       2016-10-26 21:14:28 +08:00
    LZ 你 APP POOL 的 max instance 设置的多少
    abcbuzhiming
        4
    abcbuzhiming  
    OP
       2016-10-26 22:05:28 +08:00
    @cxbig 你们没有分析为啥会产生僵尸进程?
    vibbow
        5
    vibbow  
       2016-10-26 22:06:24 +08:00
    @abcbuzhiming 他们是 linux......
    cxbig
        6
    cxbig  
       2016-10-26 22:15:15 +08:00
    @abcbuzhiming 很粗暴的解决方案,暂时没有深挖。
    enenaaa
        7
    enenaaa  
       2016-10-26 22:21:15 +08:00 via Android
    如果是死循环,那 cpu 占用应该很高。如果 cpu 空闲,,看一下网络连接情况,是不是一直存在空闲连接。
    abcbuzhiming
        8
    abcbuzhiming  
    OP
       2016-10-26 22:23:24 +08:00
    @vibbow 最大工作进程,设置的为 2.不知道为啥就能蹦出那么多来
    abcbuzhiming
        9
    abcbuzhiming  
    OP
       2016-10-26 22:24:58 +08:00
    @enenaaa 很奇怪的是,这些进程 CPU 占用都不是很高,普遍都是 1-3%晃悠。我们也想不通为啥
    enenaaa
        10
    enenaaa  
       2016-10-26 22:27:27 +08:00 via Android
    @abcbuzhiming 可能是某些蜘蛛类客户端长时间扫描你的网站,或者它们恶意保持连接
    abcbuzhiming
        11
    abcbuzhiming  
    OP
       2016-10-26 22:44:02 +08:00
    @enenaaa 可是我的最大进程只是 2 啊,就算是保持连接,难道 php-cgi 不会自动退出吗?
    vibbow
        12
    vibbow  
       2016-10-26 23:15:22 +08:00
    @abcbuzhiming php-cgi 在超过 实例最大请求数 之前,一般情况不会自动退出
    vibbow
        13
    vibbow  
       2016-10-26 23:15:46 +08:00
    @abcbuzhiming 不过为什么是 2 ? fastcgi 默认设置都是 4 的啊...
    vibbow
        14
    vibbow  
       2016-10-26 23:16:44 +08:00
    还有 LZ 你的活动超时 和 空闲超时 都是多久?
    abcbuzhiming
        15
    abcbuzhiming  
    OP
       2016-10-27 00:42:51 +08:00
    @vibbow 空闲超时 20 分钟,活动超时 60 秒
    abcbuzhiming
        16
    abcbuzhiming  
    OP
       2016-10-27 00:44:13 +08:00
    我操我发现这些 php-cgi.exe 真虎啊,我在 IIS 的程序池手动回收他们都不退出的?
    vibbow
        17
    vibbow  
       2016-10-27 01:04:39 +08:00
    @abcbuzhiming 记得看过 IIS 的推荐配置,这两项均是 300 秒...
    vibbow
        18
    vibbow  
       2016-10-27 01:05:09 +08:00
    @abcbuzhiming 你用 process explorer 看一下进程树,看 php 的进程还在不在 w3wp 下面
    realpg
        19
    realpg  
       2016-10-27 08:45:57 +08:00
    老老实实用 linux 就完了……
    ijustdo
        20
    ijustdo  
       2016-10-27 10:22:38 +08:00
    linux 下 我一般这么干 找到占用 cpu 最高的 phpcgi 然后用 lsof 和 strace 跟踪

    HPHP_PID=`ps aux|grep "php-fpm"|grep -v 'grep'|awk '{print $3" " $2}'|sort|tail -n 1|awk '{print $2}'`

    if [ -n HPHP_PID ]; then
    lsof -p ${HPHP_PID} > "/home/lsof_${HPHP_PID}"
    strace -s 256 -p ${HPHP_PID} > "/home/starce_${HPHP_PID}"
    fi

    看跟踪结果 再解决
    abc123ccc
        21
    abc123ccc  
       2016-11-08 09:26:54 +08:00
    @ijustdo 朋友,你的这个脚本能不能加个判断条件,当 CPU 为 30 以上的时候,再分析???
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4793 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 10:01 · PVG 18:01 · LAX 02:01 · JFK 05:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.