防止Apache并发连接太多,超负荷运行导致系统崩溃

post by rocdk890 / 2012-3-2 14:50 Friday linux技术

当网站被恶意攻击时,又没有硬防的情况下,可以使用下面方法,此方法是定期检查Apache的进程数,发现连接过多然后自动重启Apache,虽然有些笨,但还是比较有效的.
新建一Shell脚本文件,命名为checkapache,内容如下:
#!/bin/sh -e
#
# Check overload apache2
#

#最大Apache进程数,超过则重启Apache
maxpids=600
#检查进程时间间隔
interval=10
#日志文件
logfile=”/var/log/checkapache.log”

以上文件内容大致意思是每隔10秒种检查一次Apache进程数,如果超过600个Apache进程,则重启Apache服务,当然,这个maxpids和Interval参数依服务器承受能力而定。
echo ” Starting CheckApache MaxConn: $maxpids ” >> $logfile
date >> $logfile
while [ 1 ]
do
pnums=$(ps ax | grep “[/]usr/sbin/apache2″ | wc -l)
if [ “$pnums” = “0″ ]; then
sleep 5
echo “**********************************************” >> $logfile
date >> $logfile
echo “———Starting apache2….—————” >> $logfile
/etc/init.d/apache2 start >> $logfile
fi
#pids=$(ps ax | grep “[/]usr/sbin/apache2″ | awk ‘{print $1}’)
if [ $pnums -gt $maxpids ]; then
#echo $pnums
#for i in $pids; do
#    kill $i
#done
#sleep 10
echo “**********************************************” >> $logfile
date >> $logfile
echo “Too much pids: $pnums ..Re Starting apache2….” >> $logfile
/etc/init.d/apache2 stop >> $logfile
sleep 5
/etc/init.d/apache2 start >> $logfile
sleep 2
fi
sleep $interval
done
为了保障checkapache能正常运行工作,新建一个Cron来定时驱动另一个Shell文件checkrun,定期检查checkapache是否正常工作,checkrun的内容如下:
#!/bin/sh -e
# /var/log/checkrun
#
# Written by
rocdk890
DAEMON=/var/log/checkapache
PIDFILE=/var/log/checkapache.pid
NAME=ChechApache

test -x $DAEMON || exit 0
. /lib/lsb/init-functions
if [ -f $PIDFILE ]
then
PID=`cat $PIDFILE`
if [ “x$PID” != “x” ] && kill -0 $PID 2>/dev/null ; then
STATUS=”PID: $PID :running”
RUNNING=1
else
STATUS=”PID $PID :not running”
RUNNING=0
fi
else
STATUS=”NO PIDFILE:not running”
RUNNING=0
fi
echo ” * $STATUS”
case “$1″ in
start)
log_begin_msg “Starting Apache-Check server: $NAME”
if [ $RUNNING = 1 ]; then
log_begin_msg “is running”
else
sudo start-stop-daemon –start –background -m –pidfile $PIDFILE –exec $DAEMON && log_end_msg 0 || log_end_msg 1
fi
;;
stop)
log_begin_msg “Stopping Apache-Check server: $NAME”
kill -9 $PID && log_end_msg 0 || log_end_msg 1
#sudo start-stop-daemon –stop –pidfile $PIDFILE –signal 1 –exec $DAEMON && log_end_msg 0 || log_end_msg 1
;;
*)
log_success_msg “Usage: $DEAMON {start|stop}”
exit 1
;;
esac
exit 0

此checkrun脚本由Cron定期执行,检查checkapache这个脚本是否运行正常,如果发现checkapache没有运行,则重新启动它。
cron新加指令代码行如:*/1 * * * * /var/log/checkshd start
意即每一分钟检查一次,可以定期检查一下日志文件/var/log/checkapache.log的内容,掌握Apache服务器的运行状态.

夜空- 本站版权
1、本站所有主题由该文章作者发表,该文章作者与夜空享有文章相关版权
2、其他单位或个人使用、转载或引用本文时必须同时征得该文章作者和夜空的同意
3、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
4、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
5、原文链接:blog.slogra.com/post-145.html

标签: apache centos shell 阻止 脚本 使用 进程 连接数 崩溃 并发数 防止

  1. 2012-03-22 20:53
    @奇谭:是自己搭建的啊,我的环境是lnmp啊
  1. 2012-03-22 20:52
    @奇谭:是啊 你居然用的4.2的
  1. gravatar 奇谭
    2012-03-22 19:17
    访问速度挺快的,是自己搭建的vps么?呵呵,还是因为我的js文件太多了。。。
  1. gravatar 奇谭
    2012-03-22 19:14
    呵呵,没想到我们还是用了同一个模板的。。逛逛。。。

评论: