> php教程 > php手册 > php fork太多进程导致整体性能下降,mysql down掉的解决.

php fork太多进程导致整体性能下降,mysql down掉的解决.

WBOY
풀어 주다: 2016-06-06 19:59:08
원래의
1484명이 탐색했습니다.

1.同事跑了一个php的抓取, 这个会导致非常高的sleep,大概到好几千的水平.进而mysql会down掉. 写了个crontab #crontab -e * */1 * * * /sh/detect_php.sh detech_php 的内容 #!/bin/bashhost_dir=`cd /sh`proc_name=mysqlbug_time=`date -R`pid=0proc_num(){n

1.同事跑了一个php的抓取, 这个会导致非常高的sleep值,大概到好几千的水平.进而mysql会down掉.

写了个crontab

#crontab -e


* */1 * * * /sh/detect_php.sh
로그인 후 복사



detech_php 的内容

#!/bin/bash

host_dir=`cd /sh`
proc_name="mysql"
bug_time=`date -R`
pid=0

proc_num()
{
	num=`ps -ef | grep $proc_name | grep -v grep | wc -l`
	return $num
}

proc_id()
{
	pid=`ps -ef | grep $proc_name | grep -v grep | awk '{print $2}'`
}

proc_num
number=$?
if [ $number -eq 0 ]
then
	./restart_php_mysql.sh
	proc_id
	echo " Kill the php and new mysql pid is : ${pid} :  ${bug_time} " >> php_mysql.log 2>&1
else
	proc_id
	echo " The mysql is working , ${bug_time} " >> php_mysql.log 2>&1
	echo "it's ok!"
fi
로그인 후 복사

脚本解释,这个脚本非常简单的. 就是判断mysql进程是否为0, 如果为0,那么就去杀掉php,然后重启mysql.并且写入一个日志.


restart_php_mysql.sh 的内容
#!/bin/sh
killall -9 php
service mysql restart
로그인 후 복사

pkill会导致脚本在杀完进程后直接terminated. 所以这里不使用pkill.  


改进的

#!/bin/bash
host_dir=`cd /sh`
log_dir="/var/log/php_mysql_log/"
proc_name="mysql"
bug_time=`date -R`
pid=0
now_time=`date +%F`
log_file="${log_dir}${now_time}.log"

log_detect()
{
	if [ ! -d "$log_dir" ];
	then
	mkdir "$log_dir"
	fi

	if [ ! -f "$log_file" ]
	then
	touch "$log_file"
	fi
}

proc_num()
{
	num=`ps -ef | grep $proc_name | grep -v grep | wc -l`
	return $num
}

proc_id()
{
	pid=`ps -ef | grep $proc_name | grep -v grep | awk '{print $2}'`
}

proc_num
number=$?
if [ $number -eq 0 ]
then
	./restart_php.sh
	proc_id
	log_detect
	echo " Kill the php and new mysql pid is : ${pid} :  ${bug_time} " >> ${log_dir}${now_time}.log 2>&1
else
	proc_id
	log_detect
	echo " The mysql is working ,${pid} : ${bug_time} " >> ${log_dir}${now_time}.log 2>&1
	echo "it's ok!"
fi
로그인 후 복사
更新的内容就是把日志按照时间来创建.

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 추천
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿