abcbuzhiming
V2EX  ›  PHP

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

  •  
  •   abcbuzhiming · Oct 26, 2016 · 3982 views
    This topic created in 3662 days ago, the information mentioned may be changed or developed.
    系统是 windows 2008 R2 ,通过 IIS7.5 ,以 fastcgi 模式执行 php ,这两天怀疑遭到攻击, php-cgi 进程可以出现上百个那么多,而且从用户名看出均是 IIS 下某个特定站点启动的。怀疑该站点下是否有某段程序写的有漏洞造成死循环,被外界发现了,然而,该如何进一步定位这个问题?
    21 replies  •  2016-11-08 09:26:54 +08:00
    huigeer
    huigeer
    Oct 26, 2016 via Android
    1
    iis 日志导出,分析访问日志路由和 ip
    cxbig
    cxbig
    Oct 26, 2016
    2
    僵尸进程,我司有类似情况, Linux 系统,写了一个脚本从 log 里统计特定参数,达到阈值自动重启 php-fpm ,并清理 pid 小于新的主进程的所有 worker 。
    vibbow
    vibbow
    Oct 26, 2016
    3
    LZ 你 APP POOL 的 max instance 设置的多少
    abcbuzhiming
    abcbuzhiming
    OP
    Oct 26, 2016
    4
    @cxbig 你们没有分析为啥会产生僵尸进程?
    vibbow
    vibbow
    Oct 26, 2016
    5
    @abcbuzhiming 他们是 linux......
    cxbig
    cxbig
    Oct 26, 2016
    6
    @abcbuzhiming 很粗暴的解决方案,暂时没有深挖。
    enenaaa
    enenaaa
    Oct 26, 2016 via Android
    7
    如果是死循环,那 cpu 占用应该很高。如果 cpu 空闲,,看一下网络连接情况,是不是一直存在空闲连接。
    abcbuzhiming
    abcbuzhiming
    OP
    Oct 26, 2016
    8
    @vibbow 最大工作进程,设置的为 2.不知道为啥就能蹦出那么多来
    abcbuzhiming
    abcbuzhiming
    OP
    Oct 26, 2016
    9
    @enenaaa 很奇怪的是,这些进程 CPU 占用都不是很高,普遍都是 1-3%晃悠。我们也想不通为啥
    enenaaa
    enenaaa
    Oct 26, 2016 via Android
    10
    @abcbuzhiming 可能是某些蜘蛛类客户端长时间扫描你的网站,或者它们恶意保持连接
    abcbuzhiming
    abcbuzhiming
    OP
    Oct 26, 2016
    11
    @enenaaa 可是我的最大进程只是 2 啊,就算是保持连接,难道 php-cgi 不会自动退出吗?
    vibbow
    vibbow
    Oct 26, 2016
    12
    @abcbuzhiming php-cgi 在超过 实例最大请求数 之前,一般情况不会自动退出
    vibbow
    vibbow
    Oct 26, 2016
    13
    @abcbuzhiming 不过为什么是 2 ? fastcgi 默认设置都是 4 的啊...
    vibbow
    vibbow
    Oct 26, 2016
    14
    还有 LZ 你的活动超时 和 空闲超时 都是多久?
    abcbuzhiming
    abcbuzhiming
    OP
    Oct 27, 2016
    15
    @vibbow 空闲超时 20 分钟,活动超时 60 秒
    abcbuzhiming
    abcbuzhiming
    OP
    Oct 27, 2016
    16
    我操我发现这些 php-cgi.exe 真虎啊,我在 IIS 的程序池手动回收他们都不退出的?
    vibbow
    vibbow
    Oct 27, 2016
    17
    @abcbuzhiming 记得看过 IIS 的推荐配置,这两项均是 300 秒...
    vibbow
    vibbow
    Oct 27, 2016
    18
    @abcbuzhiming 你用 process explorer 看一下进程树,看 php 的进程还在不在 w3wp 下面
    realpg
    realpg
    Oct 27, 2016
    19
    老老实实用 linux 就完了……
    ijustdo
    ijustdo
    Oct 27, 2016
    20
    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
    abc123ccc
    Nov 8, 2016
    21
    @ijustdo 朋友,你的这个脚本能不能加个判断条件,当 CPU 为 30 以上的时候,再分析???
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2692 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 46ms · UTC 13:15 · PVG 21:15 · LAX 05:15 · JFK 08:15
    ♥ Do have faith in what you're doing.