2016年11月21日 上午
大周一的早上被手机闹铃给振醒,我这个人有个习惯每次起床必定看一眼手机,不管是早上还是半夜只要醒来总要看看手机邮箱是否收到报警邮件。(我只是个苦逼的小运维~)
起床拉开窗帘看着窗外06年的第一场雪,美好的一天开始了~~
刚到公司屁股刚坐热,听到有人说咱们网站咋回事?访问的时候咋看不到页面呐?!
好吧~ 我知道,来活了!开干!
问题描述:在浏览器中输入公司网址发觉连接了半天还没访问到页面,随着时间的加长网站只是加载了一些静态资源。清除缓存在此访问,问题依旧。
问题分析:因为之前出现过流量攻击的情况,我当时立刻打开监控查看网站入口流量情况发觉果然流量爆满并且超过了很多。根据日志发觉单个ip访问同一个页面1s中出现超过20次,怀疑为流量攻击。我试着把占用流量最多的两个外网地址给 iptables -I INPUT -s *.*.*.* -j DROP。流量很快下来了很多。
但是网站访问依然慢。这特么是为啥呢?
这时想到也许和mysql有关,毕竟动态网站是要读取mysql的如果mysql连接数过多可是会拖慢网站的!
首先查看mysql进程
#mysqladmin processlist -uroot -p |wc -l
5591
之后进入mysql查看最大连接数是多少?
mysql> show variables like ‘%max_connections%‘;
5000
丫丫个呸的~ 竟然是5000!
原来问题出在这里!!!
之后查看当前连接数
mysql> show status like ‘Threads%‘;
发觉果然超过了~
解决办法:show processlist 查看mysql进程,发觉有很多sleep进程!杀掉!!
(为了先解决问题,可以先重启一下mysql之后修改最大连接数)
附带批量kill sleep mysql进程脚本
cat mysql_sleep.sh
#!/bin/sh
user=root
passwd=12345678
host=192.168.1.200
while :
do
n=`mysqladmin processlist -u$user -p$passwd -h$host | grep -i sleep | wc -l`
date=`date +%Y%m%d[%H:%M:%S]`
echo $n
if [ "$n" -gt 20 ]
then
for i in `mysqladmin processlist -u$user -p$passwd -h$host | grep -i sleep | awk ‘{print $2}‘`
do
mysqladmin -u$user -p$passwd -h$host kill $i
done
echo "sleep is too many I killed it " >> /tmp/sleep.log
echo "$date : $n" >> /tmp/sleep.log
fi
sleep 1
done