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

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

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Lepaskan: 2016-06-06 19:59:08
asal
1562 orang telah melayarinya

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
Salin selepas log masuk



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
Salin selepas log masuk

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


restart_php_mysql.sh 的内容
#!/bin/sh
killall -9 php
service mysql restart
Salin selepas log masuk

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
Salin selepas log masuk
更新的内容就是把日志按照时间来创建.

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Cadangan popular
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan