[摘要]FastCGI像是一个常驻型的CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去fork一次。它还支持分布式的运算, 即 FastCGI 程序可以在网站服务器以外的主机上执行并且接受来自其它网站服务器来的请求。本文介绍手动编写PHP的Fast-CGI方式检查脚本。
使用fast-cgi方式的PHP在使用,有时候由于编写的代码问题,使处理代码的php-cgi进程的运行占用很多时间,在将所有活动的 php-cgi 进程都占用后,Web服务器对php的请求就失去响应了。
通过命令查看服务器上一共开了多少的 php-cgi 进程:
# ps -fe |grep "php" | grep -v "grep" | wc -l使用如下命令查看已经有多少个php-cgi进程用来处理tcp请求:
# netstat -anop | grep "php" | grep -v "grep" | wc -l当被使用的php进程接近所开启的php进程数时,可以考虑将被耗用的php进程释放一下,以防止网站访问的阻塞。
按照以上思路编写了一个检查脚本。
##!/bin/sh
#
echo "begin check"
#define default check delta num
defdeltacount=10
phpcount=`ps -fe |grep "php" | grep -v "grep" | wc -l`
netstatcount=`sudo netstat -anop | grep "php" | grep -v "grep" | wc -l`
echo " php process count is $phpcount
netstat process count is $netstatcount"
deltacount=`expr $phpcount – $netstatcount`
if [ -n "$1" ]; then
defdeltacount=$1
fi
echo "deltacount is $deltacount, defdeltacount is $defdeltacount"
if [ $deltacount -lt $defdeltacount ]; then
echo " need reset"
sudo /root/tools/resetphp.sh
else
echo " not need reset"
fi
echo "check end"
其中 /root/tools/resetphp.sh 为编写的php重启脚本,脚本可以放到 crontab 中,做自动定时检查处理。
分享到