mysql > show processlist ;
出来哗啦啦好几屏幕的, 没有一千也有几百条, 查询语句把表锁住了, 赶紧找出第一个Locked的thread_id, 在mysql的shell里面执行.
kill掉第一个锁表的进程, 依然没有改善. 既然不改善, 咱们就想办法将所有锁表的进程kill掉吧, 简单的脚本如下.
mysql - u root -p mima - e " show processlist " | grep - i " Locked " >> locked_log . txt
for line in ` cat locked_log.txt | awk '{print $1 }' `
do
echo " kill $line ; " >> kill_thread_id . sql
done
现在kill_thread_id.sql的内容像这个样子
kill 66402983 ;
kill 66402986 ;
kill 66402991 ;
.....
好了, 我们在mysql的shell中执行, 就可以把所有锁表的进程杀死了.
当然了, 也可以一行搞定
do
mysqladmin kill ${id}
done
#########################################################################
至于怎么分析数据抓取的呢,首先你要开启 apache日志轮询。。
[root@c3 ~]# cat /home/houzc/shell/findIP2w.sh
#!/bin/sh
tail -10000 /www/logs/access/66_club_`date +%Y%m%d`_access.log |awk '{print $1} '| awk -F. '{print $1"."$2"."$3}'|sort|uniq -c|sort -rn|more
执行完脚本会调取倒数10000行中访问次数3位最高的IP排序出来来。
More-- |
分析日志就可以了。
如果直接调取4位
tail -20000 /www/logs/access/66_club_`date +%Y%m%d`_access.log |awk '{print $1} '|sort|uniq -cd|sort -rn|more
tail -20000 /www/logs/access/66_club_`date +%Y%m%d`_access.log |grep IP地址 |more
查看某一时间段的IP访问总量
# cat access_log|awk '(/\[04\/Aug\/2009/) {print}'|awk -F: '$2<2 {print}'| awk -F. '{print $1"."$2"."$3}' | sort | uniq -c| sort -rn | more
//查看[04/Aug/2009 开头的且 $2(第二列为小时)小于2点的 访问过的IP总量排序
查看8:00到8:15之间的访问总量
# cat /www/logs/access/club_20100120_access.log |awk '{print $0}'|awk -F: '$2~/8$/ && $3<15 {print $0}'| awk -F. '{print $1"."$2"."$3}' | sort | uniq -c|sort -rn | more
查看并发状态
# netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
这条语句返回结果如下
LAST_ACK 5
SYN_RECV 30
ESTABLISHED 1597
FIN_WAIT1 51
FIN_WAIT2 504
TIME_WAIT 1057
其中的SYN_RECV表示正在等待处理的请求数;ESTABLISHED表示正常数据传输状态;TIME_WAIT表示处理完毕,等待超时结束的请求数。
本文转自 houzaicunsky 51CTO博客,原文链接:http://blog.51cto.com/hzcsky/475725