返回列表 发帖

检测VPS负载过高时重启php,监测php-fpm并重启,IP连接数监控

看看我的负载监控记录  (每2分钟监控一次,每周清空一次)

http://www.idc866.com/tsphp.txt

IP连接数实时监控: (每2分钟监控一次)
http://www.idc866.com/tsip.txt



centos系统中使用:yum -y install bc     安装上bc。
Debian系统中使用:apt-get -y install bc



执行脚本:
本贴隐藏内容,需登录、回复后,即可浏览!




添加定时执行: crontab -e      (2分钟检测一次)
*/2 * * * * /root/check-php.sh >>/home/wwwroot/default/check-php.txt


测试执行: sh  /root/check-php.sh

显示:
14-07-30 11:21:17 up 15 min, 2 users, load average: 0.00, 0.02, 0.00
无其它提示,则说明正常,
就可以直接用IP访问日志了:ip/check-php.txt
              和IP连接数记录:ip/check-ip.txt



注:一楼check-php.sh 采用二楼脚本代码,最后增加了一个IP连接数记录。
       关于check-ip.txt 和 check-php.txt 名可自行修改,免得人家访问。





监控时间都设为2分钟自动执行任务,如果想更快更精准,到时设1分钟即可。
负载监控是 负载高于3时停止php,低于1时启动php,每周清空一次记录

以后 修改脚本经后放出一楼 (结合二楼、三楼脚本)。


现贴出原贴相关脚本:

(原脚本这个里面的 /etc/init.d/php-fpm 是与 LNMP的php5.3+的 兼容的 )

注:
二楼他这些脚本就是有一点点不完美,需结合3楼的方法使用。

就是当你负载超过多少时就会停止php
3分钟后,再检查php是否运行,如果没有运行,则启动php

这就存在一个问题,不管你负载是多少都再次执行启动php。
3分钟后检查负载高了再停止php,再3分钟检查无php进程再启动php   
如此循环。。

一楼这个原贴是没做低于多少判断的。  
所以到时会一直启动-停止-启动-停止。。
分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
★ 11月开空间新规则,百度GG收录百贴:http://idc866.com/thread-15155-1-1.html
★ 本站转型:推荐免费空间,收集免费空间,免费空间测试,并提供原创申请教程。
★ 免备案空间,免费空间,免费国外空间,国外免费空间,免费美国空间
★ 我们是一群辛勤的小站站长,我们需要团结,我们需要共同进步!!!!
★ 达要求开空间,论坛发申请贴后,请加QQ:876812422  (一般在线、有Q必回)

本文分享一例shell脚本,用于检测当Linux负载过高时重启php,监测php-fpm并重启,效果不错,有需要的朋友参考下。

服务器的php-fpm经常负载高,于是写了一个shell脚本来检查负载并重启php。
可以根据服务器的情况来决定要负载超过多少时重启php。

系统:centos 5.9 64位     (注:支持其它 linux 系统)

shell脚本内容:
vi  /root/check-php.sh


复制代码,保存退出。 代码示例:

#!/bin/sh
#
TOP_SYS_LOAD_NUM=1
SYS_LOAD_NUM=`uptime | awk '{print $(NF-2)}' | sed 's/,//'`

echo $(date +"%y-%m-%d") `uptime`
if [ `echo "$TOP_SYS_LOAD_NUM < $SYS_LOAD_NUM"|bc` -eq 1 ]
then
echo "#0#" $(date +"%y-%m-%d %H:%M:%S") "pkill php-fpm" `ps -ef | grep php-fpm | wc -l`
/etc/init.d/php-fpm stop
sleep 8
pkill php-fpm
sleep 8
for i in 1 2 3
do
if [ `pgrep php-fpm | wc -l` -le 0 ]
then
/etc/init.d/php-fpm start
sleep 30
echo "#1#" $(date +"%y-%m-%d %H:%M:%S") "start php-fpm" `ps -ef | grep php-fpm | wc -l`
fi
done
else
if [ `pgrep php-fpm | wc -l` -le 0 ]
then
/etc/init.d/php-fpm start
sleep 30
echo "#2#" $(date +"%y-%m-%d %H:%M:%S") "start php-fpm" `ps -ef | grep php-fpm | wc -l`
fi
fi


设置执行权:
chmod -R 755 /root/check-php.sh


添加定时执行: crontab -e      (3分钟检测一次)
*/3 * * * * /root/check-php.sh >>/home/wwwroot/default/check-php.txt

就可以直接用IP访问日志了:ip/check-php.txt



测试执行: sh  /root/check-php.sh

显示:
14-07-30 11:21:17 up 15 min, 2 users, load average: 0.00, 0.02, 0.00
无其它提示,则说明正常,  使用上面的IP就能查看记录。
间隔时间,修改 */2为2分钟检测一次 , */1为1分钟检测一次。



在运行脚本时,可能会出现如下的错误提示:
: line 6: bc: command not found
: line 6: [: -eq: unary operator expected
这说明没有找到bc命令,
centos系统中使用:yum -y install bc 安装即可。
Debian系统中使用:apt-get -y install bc

注:复制原文,中间只把文件位置,和日志地址更改了一下,方便直接查看日志。

复制地址:http://www.jbxue.com/article/12446.html
原地址:http://blog.csdn.net/liuxuejin/article/details/8621268

他这个原贴是没做低于多少判断的。  所以到时会一直启动-停止-启动-停止。。

注: 此脚本支持监控重启其它应用,如nginx,Apache,等。
只要注意中间的 /etc/init.d/php-fpm 启动文件位置,和 php-fpm 进程。
★ 11月开空间新规则,百度GG收录百贴:http://idc866.com/thread-15155-1-1.html
★ 本站转型:推荐免费空间,收集免费空间,免费空间测试,并提供原创申请教程。
★ 免备案空间,免费空间,免费国外空间,国外免费空间,免费美国空间
★ 我们是一群辛勤的小站站长,我们需要团结,我们需要共同进步!!!!
★ 达要求开空间,论坛发申请贴后,请加QQ:876812422  (一般在线、有Q必回)

TOP

另一参考脚本: (此脚本,有一个高负载时停止,达到低负载时启动。)

http://blog.163.com/lgh_2002/blog/static/4401752620131402842625/


Linux脚本:根据CPU负载及内存使用率自动重启服务进程  
                     

                                                                            2013-02-04 12:37:16


为了让服务器能稳定运行,所以做个脚本能自动检测系统负载,在系统负载很高的时候(当负载或内存占用达到设置值后),自动重启有问题的程序以避免宕机:

# 设置最大内存占用百分比
PID_MEM_MAX=”85″

# 设置最大系统负载
SYS_LOAD_MAX=”1″

# 设置需要监控的服务名称
NAME_LIST=”php5-cgi mysql”

for NAME in $NAME_LIST
do
# 初始化内存统计
PID_MEM_SUM=0

# 获取该程序总进程数
PID_NUM_SUM=`ps aux | grep $NAME | wc -l`

# 列出每个进程内存占用百分比
PID_MEM_LIST=`ps aux | grep $NAME | awk ‘{print $4}’`

# 计算所有进程总内存占用
for PID_MEM in $PID_MEM_LIST
do
PID_MEM_SUM=`echo $PID_MEM_SUM + $PID_MEM | bc`
done

# 获取最近一分钟系统负载
SYS_LOAD=`uptime | awk ‘{print $(NF-2)}’ | sed ‘s/,//’`

# 比较内存占用和系统负载是否超过阀值
    MEM_VULE=`awk ‘BEGIN{print(‘”$PID_MEM_SUM”‘>=’”$PID_MEM_MAX”‘?”1″:”0″)}’`
    LOAD_VULE=`awk ‘BEGIN{print(‘”$SYS_LOAD”‘>=’”$SYS_LOAD_MAX”‘?”1″:”0″)}’`

# 如果系统内存占用和系统负载超过阀值,则进行下面操作。
    if [ $MEM_VULE = 1 ] || [ $LOAD_VULE = 1 ] ;then
# 写入日志
    echo $(date +”%y-%m-%d %H:%M:%S”) “killall $NAME” “(MEM:$PID_MEM_SUM,LOAD:$SYS_LOAD)”>> /var/log/autoreboot.log
# 正常停止服务
    /etc/init.d/$NAME stop
    sleep 3
# 强制关闭
    pkill $NAME

# 重启
    /etc/init.d/$NAME start
#写入日志
    echo $(date +”%y-%m-%d %H:%M:%S”) “start $NAME” “(MEM:$PID_MEM_SUM,LOAD:$SYS_LOAD)” >> /var/log/autoreboot.log
    else
    echo “$NAME very health!(MEM:$PID_MEM_SUM,LOAD:$SYS_LOAD)” > /dev/null
    fi
    done
    以上代码保存为一个文件,例如:auto_reboot.sh

    添加计划任务,设置每分钟检查一次(注意文件的位置要搞正确)
    crontab -e
    * * * * * /bin/bash/root/auto_reboot.sh

    请确保您的Linux系统中已经安装了bc,否则会出现错误。查看是否安装了bc可以使用命令:
    bc -v
    如果没有安装,centos可以用 yum -y install bc 安装,然后执行命令:
    sh /bin/bash/root/auto_reboot.sh

    CentOS VPS服务器根据CPU负载及内存占用自动重启的bash shell脚本:
# !/bin/sh
# usage: */2 * * * * root /root/checkload.sh
# [CentOS]VPS服务器根据CPU负载及内存占用自动重启脚本
# 设置最小剩余内存,一般至少要剩余50M可用(单位兆)
    FREE_MEM_MIN=”50″
# 设置最大系统负载
    SYS_LOAD_MAX=”3″
# 设置重启服务的最小剩余内存(单位兆)
    RESTART_FREE_MEM_MIN=”500″
# 设置需要监控的服务名称
    NAME_LIST=”httpd mysqld”
    for NAME in $NAME_LIST
    do
# 获得剩余内存(单位兆)
    FREE_MEM=`free -m|grep Mem|awk ‘{print $4}’`
# 获得已用内存(单位兆)
#   FREE_MEM=`free -m|grep Mem|awk ‘{print $3}’`
# 获取最近一分钟系统负载
    SYS_LOAD=`uptime | awk ‘{print $(NF-2)}’ | sed ‘s/,//’`
# 比较内存占用和系统负载是否超过阀值
    MEM_VULE=`awk ‘BEGIN{print(‘”$FREE_MEM”‘<’”$FREE_MEM_MIN”‘?”1″:”0″)}’`
    LOAD_VULE=`awk ‘BEGIN{print(‘”$SYS_LOAD”‘>=’”$SYS_LOAD_MAX”‘?”1″:”0″)}’`

# 测试结果
# LOAD_VULE=”1″
# echo $(date +”%y-%m-%d %H:%M:%S”) “DEBUG $NAME”   “(FREE_MEM:$FREE_MEM|$MEM_VULE,LOAD:$SYS_LOAD|$LOAD_VULE)”>> /var/log/autoreboot_debug.log

# 如果系统内存占用和系统负载超过阀值,则进行下面操作。
    if [ $MEM_VULE = 1 ] || [ $LOAD_VULE = 1 ] ;then
# 写入日志
    echo $(date +”%y-%m-%d %H:%M:%S”) “killall $NAME” “(FREE_MEM:$FREE_MEM,LOAD:$SYS_LOAD)”>> /var/log/autoreboot.log
# 正常停止服务
    service $NAME stop
    sleep 3
# 强制关闭
    skill $NAME
# 重启
    sleep 10
    for i in 1 2 3
    do
    FREE_MEM=`free -m|grep Mem|awk ‘{print $4}’`
    MEM_VULE=`awk ‘BEGIN{print(‘”$FREE_MEM”‘>=’”$RESTART_FREE_MEM_MIN”‘?”1″:”0″)}’`
    if [ `pgrep $NAME | wc -l` -le 0 ] && [ $MEM_VULE = 1 ]
    then
    service $NAME start
    sleep 15
    echo “AutoStart:” $(date +”%y-%m-%d %H:%M:%S”) “start $NAME” `ps -ef | grep $NAME | wc -l` > /var/log/autoreboot.log
    fi
    done

# 写入日志
    echo $(date +”%y-%m-%d %H:%M:%S”) “start $NAME” “(FREE_MEM:$FREE_MEM,LOAD:$SYS_LOAD)” >> /var/log/autoreboot.log
    else
    MEM_VULE=`awk ‘BEGIN{print(‘”$FREE_MEM”‘>=’”$RESTART_FREE_MEM_MIN”‘?”1″:”0″)}’`
    if [ `pgrep $NAME | wc -l` -le 0 ] && [ $MEM_VULE = 1 ]
    then
    service $NAME start
    sleep 15
    echo “AutoStart:” $(date +”%y-%m-%d %H:%M:%S”) “start $NAME” `ps -ef | grep $NAME | wc -l` > /var/log/autoreboot.log
    else
    echo “$NAME very health!(FREE_MEM:$FREE_MEM,LOAD:$SYS_LOAD)” > /dev/null
    fi
    fi
    done



  注:此脚本,idc886未做测试,只使用了此脚本的 高负载停低负载启动代码。
★ 11月开空间新规则,百度GG收录百贴:http://idc866.com/thread-15155-1-1.html
★ 本站转型:推荐免费空间,收集免费空间,免费空间测试,并提供原创申请教程。
★ 免备案空间,免费空间,免费国外空间,国外免费空间,免费美国空间
★ 我们是一群辛勤的小站站长,我们需要团结,我们需要共同进步!!!!
★ 达要求开空间,论坛发申请贴后,请加QQ:876812422  (一般在线、有Q必回)

TOP

重启 就好了吧  停止的话 一般 都会停止很久。。。
www.76lt.com

TOP

大家··看的我花里花俏的···怎么不打包好啊
大家··看的我花里花俏的···怎么不打包好啊··无语了

TOP

不错。来看看。
null

TOP

非常有用,尝试一下

TOP

非常有用,尝试下,防止502

TOP

谢谢大家

TOP

重启 就好了吧  停止的话 一般 都会停止很久。。。

TOP

返回列表