


防止Apache并發(fā)連接太多、超負(fù)荷運(yùn)行導(dǎo)致崩潰的方法
此方法是定期檢查Apache的進(jìn)程數(shù),發(fā)現(xiàn)連接過多然后自動(dòng)重啟Apache,雖然有些笨,但還是比較有效的。
新建一Shell腳本文件,命名為checkapache,內(nèi)容如下:
#!/bin/sh -e
#
# Check overload apache2
#
#最大Apache進(jìn)程數(shù),超過則重啟Apache
maxpids=600
#檢查進(jìn)程時(shí)間間隔
interval=10
#日志文件
logfile=”/var/log/checkapache.log”
以上文件內(nèi)容大致意思是每隔10秒種檢查一次Apache進(jìn)程數(shù),如果超過600個(gè)Apache進(jìn)程,則重啟Apache服務(wù),當(dāng)然,這個(gè)maxpids和Interval參數(shù)依服務(wù)器承受能力而定。
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能正常運(yùn)行工作,新建一個(gè)Cron來定時(shí)驅(qū)動(dòng)另一個(gè)Shell文件checkrun,定期檢查checkapache是否正常工作,checkrun的內(nèi)容如下:
#!/bin/sh -e
# /var/log/checkrun
#
# Written by Vohot
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定期執(zhí)行,檢查checkapache這個(gè)腳本是否運(yùn)行正常,如果發(fā)現(xiàn)checkapache沒有運(yùn)行,則重新啟動(dòng)它。
cron新加指令代碼行如:*/1 * * * * /var/log/checkshd start
意即每一分鐘檢查一次,可以定期檢查一下日志文件/var/log/checkapache.log的內(nèi)容,掌握Apache服務(wù)器的運(yùn)行狀態(tài)。
關(guān)鍵字:Apache 并發(fā)連接 超負(fù)荷 崩潰
新文章:
- CentOS7下圖形配置網(wǎng)絡(luò)的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統(tǒng)后丟失windows啟動(dòng)項(xiàng)
- CentOS單網(wǎng)卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗(yàn)證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網(wǎng)打印機(jī)IP講解
- CentOS7使用hostapd實(shí)現(xiàn)無AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網(wǎng)絡(luò)重啟出錯(cuò)
- 解決Centos7雙系統(tǒng)后丟失windows啟動(dòng)項(xiàng)
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統(tǒng)有什么不同呢
- Centos 6.6默認(rèn)iptable規(guī)則詳解