PHP站点首页打不开的原因讲起

近期有个站点首页打不开,偶尔报504错误。如图所看到的。这是nginx直接返回的。


今天下午16:00多又出现了,看了下阿里云数据库连接,事实上在晚上2:00也出现了一次。

这个图是后来问题已经攻克了获取的,数据库连接的请求数已经降下来了。



如今似乎是数据库压力非常大,由于我们的数据库server同一时候有好几个库在线上,并不确定是其它系统把数据库拖垮还是当前这个系统的原因。


使用语句查询数据库的会话数

SQLSERVER 查看当前连接数
Select * from sys.dm_exec_connections --此命令能够看到有多少人在连
Select * from sys.dm_exec_sessions --此命令能够看到有多少会话,一个连接能够有多个会话


从图中大致定位到还是之前报504的站点对数据库的请求数非常多。


定位到详细应用就能够上相应的server去进一步去查

先看CPU是比較正常的



再查PHP-FPM的进程数


正常情况下php进程仅仅有10个左右。一下子变成这么多肯定说明是外界有非常大的请求数。


可是为了确定是不是php出现什么异常导致进程无法结束,所以结束全部进程,重新启动php-fpm.。

发现没过多久又出现非常多的进程数,所以能够得出结论:这说明nginx报504的原因是外界的请求是持续的。导致数据库压力巨大请求只是来,所以nginx报504


然后查这个时候的nginx日志近期500条数据

#tail -n 500 /usr/local/nginx/logs/access.log >>500_20160218-1712.txt


从日志里看出主要是百度和搜狗的蜘蛛在爬行。百度是一直在爬行的,应该是比較稳定不会导致站点突然流量剧增。并且据说百度会控制訪问的频率,保证不把站点爬挂。

看来后面的日志,发现这个时间段搜狗的蜘蛛爬行数量是非常多的。由于蜘蛛是用集群在爬。所以屏蔽IP是无用的,仅仅能在nginx里屏蔽请求头。

server {
	listen       80;
	root        /www/;
	index  index.php;
	#禁止特定爬虫的抓取
	if ($http_user_agent ~* "Sogou web spider") {
	 return 403;
	}

然后又一次结束php进程,启动php进程。发现整个进程是非常平稳的维持在10个


说明就是搜狗搞的事情,当务之急仅仅能先这么着了,谁让搜狗没有多少用户群呢,兴许的解决方式还是使用缓存。所以从这个事情得出一条非常重要的结论,尽量使用缓存,不要由于站点如今非常稳定就不使用缓存,由于站点随时会遇到这样的訪问量突发的情况


屏蔽搜狗之前:

屏蔽搜狗之后:



以下是从nginx日志中分析出来的各种蜘蛛对站点的爬行数据排名靠前的几个,事实上已经屏蔽了谷歌等非常多用处不大的爬虫,可是还是有非常多爬虫在爬:


看的出来搜狗一天怕了不少。


特定IP抓取站点数据,事实上是和指针相似,可是这类抓取通常会不定时,所以须要监控php进程,及时屏蔽对方IP 

监控php-fpm进程数

#!/bin/sh 
echo `date '+%Y-%m-%d %H:%M:%S'` "php进程数>>>"`ps -ef | grep php-fpm | wc  -l` >> /usr/wwwyuanboweb/phpfpm.txt


假设要做进程不存在重新启动之类的事情

#!/bin/sh 
ps -ef | grep php-fpm | wc  -l
if [ $? -ne 0 ]
then
echo "start process....."
else
echo "runing....."
fi
#####


须要windows到linux转码

# yum install -y dos2unix
# dos2unix ./t.sh

 

或者

vi t.sh
:set fileformat=unix
:wq 

 

还须要给shell脚本权限

#chmod +x ./t.sh

#contab  -e

*/1 * * * * /bin/bash  /usr/wwwyuanboweb/t.sh

 

查指定时间段的nginx日志

# sed -n '/23\/Feb\/2016:13:45:00/,/23\/Feb\/2016:13:50:59/'p /usr/local/nginx/logs/access.log>>20160223-1345-1350.txt

屏蔽指定的IP

通过iptables屏蔽某些或者某个IP地址达到屏蔽效果
# iptables -I INPUT -s 192.168.38.174 -j DROP //屏蔽单个ip
# iptables -I INPUT -s 192.168.38.0/100 -j DROP //屏蔽某段ip


站点监控数据




posted @ 2017-08-16 15:25  jzdwajue  阅读(269)  评论(0编辑  收藏  举报