您的位置:首页 > 运维架构 > Linux

Linux Web服务器网站故障分析常用的命令

2013-07-25 11:34 585 查看
Netstat:显示网络状态信息
参 数: -a或--all 显示所有连线中的Socket
-n或--numeric 直接使用IP地址,而不通过域名服务器
-t或--tcp 显示TCP传输协议的连线状况
-u或--udp 显示UDP传输协议的连线状况
-l或--listening 显示监控中的服务器的Socket
-p或--programs 显示正在使用Socket的程序识别码和程序名称
状 态:
LISTEN:侦听来自远方的TCP端口的连接请求; SYN-SENT:在发送连接请求后等待匹配的连接请求;
SYN-RECEIVED:在收到和发送一个连接请求后等待对方对连接请求的确认;
ESTABLISHED:代表一个打开的连接,我们常用此作为并发连接数;
FIN-WAIT-1:等待远程TCP连接中断请求,或先前的连接中断请求的确认;
FIN-WAIT-2:从远程TCP等待连接中断请求;
CLOSE-WAIT:等待从本地用户发来的连接中断请求;
CLOSING:等待远程TCP对连接中断的确认;
LAST-ACK:等待原来发向远程TCP的连接中断的确认;
TIME-WAIT:等待足够的时间以确保远程TCP连接收到中断请求的确认;
CLOSED:没有任何连接状态;管道“|”:利用Linux所提供的管道符“|”将两个命令隔开,管道符左边命令的输出就会作为管道符右边命令的输入。连续使用管道意味着第一个命令的输出会作为 第二个命令的输入,第二个命令的输出又会作为第三个命令的输入,依此类推。

Grep:在文件中查找并显示包含指定字符串的行,目标是字符串
参 数:-v,反转查找,即输出与查找条件不相符的行。
-i 忽略大小写
-E 多个字符串一起搜寻,就是egrep
说 明:1、grep命令不支持“*”和“?”这些普通意义上的通配符
2、最常用的通配符:
符号“^”表示以什么字符开头,“^word”表示以“word”开头,
符号“$”表示以什么字符结尾,“word$”表示以“word”结尾,
“^$”则表示空行。
符号”.“表示以个非换行符的字符,'gr.p'匹配gr后接一个任意字符,然后是p
符号”[]“表示匹配一个指定范围内的字符,'[Gg]rep'匹配Grep和grep
符号"[^]"表示匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-F和H-Z的一个字母开头,紧跟rep的行。Awk:把一行分成数个行进行处理;逐行扫描文件,从第一行到最后一行,寻找匹配的特定模式的行,并在这些行上进行你想要的操作。如果没有指定处理动作,则把匹配的行显示到标准输出(屏幕),如果没有指定模式,则所有被操作所指定的行都被处理 参 数:-F 后面跟分隔符,可以加多个,默认为空格 取代FS
格 式:awk -F ‘[分隔符]+’ ‘条件类型{动作}’
动 作:$N变量:它指的是一条记录。如$ awk '{print $0}' test将输出test文件中的所有记录。$1表示第一个域,$n表示第n个域。Cut:对数据进行剪切,以每一行为一个处理对象
参 数:-c:字符(characters),中文字符和空格都算一个字符
-b:字节(bytes),一个空格算一个字节,一个汉字算三个字节
-f:域(fields),可以理解为一个字段
-d:定义分隔符,默认制表符TAB,d一般情况下根-f一起使用,而不能和-b,-c一起使用Sort:排序,将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。 参 数:-n:以数值来排序
-r:在输出行中按降序输出,默认是升序
-f :忽略大小写的差异,例如 A 与 a 视为编码相同
-b :忽略最前面的空格符部分Uniq:去除排序过的文件中的重复行,所有的重复行必须是相邻,经常和SORT一起使用 参 数:-c, --count //在每行前加上表示相应行目出现次数的前缀编号
-d, --repeated //只输出重复的行
-D, --all-repeated //只输出重复的行,不过有几行输出几行
-u :只显示唯一的行
实例:查看操作系统上有哪些服务器连接到数据库服务器
[root@localhost ~]# netstat -ntu|more
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 192.168.15.209:1521 192.168.15.65:37781 ESTABLISHED
tcp 0 0 192.168.15.209:1521 192.168.15.65:37783 ESTABLISHED
tcp 0 0 192.168.15.209:1521 192.168.15.65:37777 ESTABLISHED
tcp 0 0 192.168.15.209:1521 192.168.15.65:37779 ESTABLISHED
tcp 0 0 10.100.15.209:49895 10.100.15.207:26069 ESTABLISHED
tcp 0 0 10.100.15.209:49898 10.100.15.213:6092 ESTABLISHED
tcp 0 0 192.168.15.209:1521 192.168.15.65:37785 ESTABLISHED
tcp 0 0 192.168.15.209:1521 192.168.15.181:21869 ESTABLISHED
tcp 0 0 192.168.15.209:1521 192.168.15.181:21870 ESTABLISHED
tcp 1 0 192.168.15.209:26781 192.168.15.89:1521 CLOSE_WAIT
tcp 0 0 192.168.15.209:10332 192.168.15.211:6200 ESTABLISHED
tcp 0 0 192.168.15.209:1521 192.168.15.181:21875 ESTABLISHED
tcp 0 0 192.168.15.209:1521 192.168.15.65:37766 ESTABLISHED
tcp 0 0 192.168.15.209:1521 192.168.15.181:21874 ESTABLISHED
tcp 0 0 192.168.15.209:1521 192.168.15.65:37761 ESTABLISHED
######省略N行######
这是所有与数据库服务器连接的外部IP 信息列表,可以看到第五列是所有的外部IP 信息。根据这些信息,找出数目最多的那个IP 是什么,或者根据IP 数目做一个排序。

[root@localhost ~]# netstat -ntu|grep 'tcp'
tcp 0 0 192.168.15.209:1521 192.168.15.65:37781 ESTABLISHED
tcp 0 0 192.168.15.209:1521 192.168.15.65:37783 ESTABLISHED
tcp 0 0 192.168.15.209:1521 192.168.15.65:37777 ESTABLISHED
tcp 0 0 192.168.15.209:1521 192.168.15.65:37779 ESTABLISHED
tcp 0 0 10.100.15.209:49895 10.100.15.207:26069 ESTABLISHED
tcp 0 0 10.100.15.209:49898 10.100.15.213:6092 ESTABLISHED
tcp 0 0 192.168.15.209:1521 192.168.15.65:37785 ESTABLISHED
tcp 0 0 192.168.15.209:1521 192.168.15.181:21869 ESTABLISHED
tcp 0 0 192.168.15.209:1521 192.168.15.181:21870 ESTABLISHED
tcp 1 0 192.168.15.209:26781 192.168.15.89:1521 CLOSE_WAIT
tcp 0 0 192.168.15.209:10332 192.168.15.211:6200 ESTABLISHED
tcp 0 0 192.168.15.209:1521 192.168.15.181:21875 ESTABLISHED
tcp 0 0 192.168.15.209:1521 192.168.15.65:37766 ESTABLISHED
tcp 0 0 192.168.15.209:1521 192.168.15.181:21874 ESTABLISHED
tcp 0 0 192.168.15.209:1521 192.168.15.65:37761 ESTABLISHED
#也可以使用egrep 过滤多个条件:netstat -ntu|egrep 'tcp|udp'
使用grep 将tcp 过滤出来

[root@localhost ~]# netstat -ntu|grep 'tcp'|awk '{print $5}'
192.168.15.65:37781
192.168.15.61:34281
192.168.15.65:37783
192.168.15.61:34282
192.168.15.65:37777
192.168.15.65:37779
10.100.15.207:26069
192.168.15.61:34275
10.100.15.213:6092
#######省略N行...######
使用awk 将第五列链接的IP单独截出来

[root@localhost ~]# netstat -ntu|grep 'tcp'|awk '{print $5}'|cut -d: -f1
192.168.15.65
192.168.15.61
192.168.15.65
192.168.15.61
192.168.15.65
192.168.15.65:
10.100.15.207
192.168.15.61
10.100.15.213
######省略N行######
使用cut 将列信息以":" 为分隔符再分成不同的列, 显示第一个field
[root@localhost ~]# netstat -ntu|grep 'tcp'|awk '{print $5}'|cut -d: -f1|sort
使用sort 默认字符顺序将字段值排序,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。

[root@localhost ~]# netstat -ntu|grep 'tcp'|awk '{print $5}'|cut -d: -f1|sort|uniq -c
使用uniq 将已经排序好的字段计算不同值的数目,uniq -c 根据相近的值计算和,因此之前需要排序好

[root@localhost ~]# netstat -ntu|grep 'tcp'|awk '{print $5}'|cut -d: -f1|sort|uniq -c|sort -nr
使用sort -nr ,按照数字降序排序

[root@localhost ~]# netstat -ntu|grep 'tcp'|awk '{print $5}'|cut -d: -f1|sort|uniq -c|sort -nr|head -10
32 192.168.15.146
30 192.168.15.65
18 192.168.15.92
17 192.168.15.100
15 192.168.15.63
12 192.168.15.204
11 192.168.15.61
10 192.168.15.181
8 192.168.15.62
8 192.168.15.133
这就得到我们要的结果,这个结果中,我们可以看出各个服务器在数据库服务器上的网络连接数。
查看服务器80端口链接数目:
[root@localhost ~]# netstat -nat|grep -i "80"|wc -l
  4341
#netstat -an会打印系统当前网络链接状态,而grep -i "80"是用来提取与80端口有关的连接的,wc -l进行连接数统计。最终返回的数字就是当前所有80端口的请求总数。
查看TCP连接状态
[root@localhost ~]# netstat -nat |awk ‘{print $6}’|sort|uniq -c|sort -rn
查看80端口连接数最多的20个IP
[root@localhost ~]# netstat -anlp|grep 80|grep tcp|awk ‘{print $5}’|awk -F: ‘{print $1}’|sort|uniq -c|sort -nr|head -n20
查找较多time_wait连接
[root@localhost ~]# netstat -n|grep TIME_WAIT|awk ‘{print $5}’|sort|uniq -c|sort -rn|head -n20


前面提到的netstat、awk、sort、uniq、wc、grep、head、tail、cut等在处理web服务器时经常用到,以下为一些简单的应用:一、查找请求数前10个的IP试验环境非线上环境,自己搭建的虚拟机1、查看监听中的请求及对应的程序名和PID
[root@justin ~]# netstat -anlp|more
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Programname
tcp        0      0 0.0.0.0:44640               0.0.0.0:*                   LISTEN      1606/rpc.statd
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      1519/rpcbind
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1780/sshd
tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      1660/cupsd
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      1856/master
tcp        0     52 10.15.72.38:22              10.15.72.73:57445           ESTABLISHED 2666/sshd
tcp        0      0 :::111                      :::*                        LISTEN      1519/rpcbind
tcp        0      0 :::22                       :::*                        LISTEN      1780/sshd
2、查看prot:80的请求由于试验环境没有web服务,这里以prot:22为例,
[root@justin ~]# netstat -anlp|grep ':22'
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1780/sshd
tcp        0     52 10.15.72.38:22              10.15.72.73:57445           ESTABLISHED 2666/sshd
tcp        0      0 :::22                       :::*                        LISTEN      1780/sshd
[root@justin ~]#
3、

系统连接状态篇:
1.查看TCP连接状态
netstat -nat |awk ‘{print $6}’|sort|uniq -c|sort -rnnetstat -n | awk ‘/^tcp/ {++S[$NF]};END {for(a in S) print a, S[a]}’ 或
netstat -n | awk ‘/^tcp/ {++state[$NF]}; END {for(key in state) print key,”t”,state[key]}’
netstat -n | awk ‘/^tcp/ {++arr[$NF]};END {for(k in arr) print k,”t”,arr[k]}’netstat -n |awk ‘/^tcp/ {print $NF}’|sort|uniq -c|sort -rnnetstat -ant | awk ‘{print $NF}’ | grep -v ‘[a-z]‘ | sort | uniq -c2.查找请求数请20个IP(常用于查找攻来源):netstat -anlp|grep 80|grep tcp|awk ‘{print $5}’|awk -F: ‘{print $1}’|sort|uniq -c|sort -nr|head -n20netstat -ant |awk ‘/:80/{split($5,ip,”:”);++A[ip[1]]}END{for(i in A) print A[i],i}’ |sort -rn|head -n20 3.用tcpdump嗅探80端口的访问看看谁最高tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F”.” ‘{print $1″.”$2″.”$3″.”$4}’ | sort | uniq -c | sort -nr |head -20
4.查找较多time_wait连接netstat -n|grep TIME_WAIT|awk ‘{print $5}’|sort|uniq -c|sort -rn|head -n20 5.找查较多的SYN连接netstat -an | grep SYN | awk ‘{print $5}’ | awk -F: ‘{print $1}’ | sort | uniq -c | sort -nr | more 6.根据端口列进程netstat -ntlp | grep 80 | awk ‘{print $7}’ | cut -d/ -f1
网站日志分析篇1(Apache):1.获得访问前10位的ip地址cat access.log|awk ‘{print $1}’|sort|uniq -c|sort -nr|head -10
cat access.log|awk ‘{counts[$(11)]+=1}; END {for(url in counts) print counts[url], url}’ 2.访问次数最多的文件或页面,取前20 cat access.log|awk ‘{print $11}’|sort|uniq -c|sort -nr|head -20 3.列出传输最大的几个exe文件(分析下载站的时候常用)cat access.log |awk ‘($7~/.exe/){print $10 ” ” $1 ” ” $4 ” ” $7}’|sort -nr|head -20 4.列出输出大于200000byte(约200kb)的exe文件以及对应文件发生次数cat access.log |awk ‘($10 > 200000 && $7~/.exe/){print $7}’|sort -n|uniq -c|sort -nr|head -100 5.如果日志最后一列记录的是页面文件传输时间,则有列出到客户端最耗时的页面cat access.log |awk ‘($7~/.php/){print $NF ” ” $1 ” ” $4 ” ” $7}’|sort -nr|head -100 6.列出最最耗时的页面(超过60秒的)的以及对应页面发生次数cat access.log |awk ‘($NF > 60 && $7~/.php/){print $7}’|sort -n|uniq -c|sort -nr|head -100 7.列出传输时间超过 30 秒的文件cat access.log |awk ‘($NF > 30){print $7}’|sort -n|uniq -c|sort -nr|head -20 8.统计网站流量(G) cat access.log |awk ‘{sum+=$10} END {print sum/1024/1024/1024}’ 9.统计404的连接awk ‘($9 ~/404/)’ access.log | awk ‘{print $9,$7}’ | sort 10. 统计http status cat access.log |awk ‘{counts[$(9)]+=1}; END {for(code in counts) print code, counts[code]}'
cat access.log |awk '{print $9}'|sort|uniq -c|sort -rn 10.蜘蛛分析,查看是哪些蜘蛛在抓取内容。/usr/sbin/tcpdump -i eth0 -l -s 0 -w - dst port 80 | strings | grep -i user-agent | grep -i -E 'bot|crawler|slurp|spider'
网站日分析2(Squid篇)按域统计流量zcat squid_access.log.tar.gz| awk '{print $10,$7}' |awk 'BEGIN{FS="[ /]"}{trfc[$4]+=$1}END{for(domain in trfc){printf "%st%dn",domain,trfc[domain]}}'
数据库篇
1.查看数据库执行的sql /usr/sbin/tcpdump -i eth0 -s 0 -l -w - dst port 3306 | strings | egrep -i 'SELECT|UPDATE|DELETE|INSERT|SET|COMMIT|ROLLBACK|CREATE|DROP|ALTER|CALL'系统Debug分析篇
1.调试命令
strace -p pid
2.跟踪指定进程的PID
gdb -p pidawk '{ip[$1]+=1} END{for(i in ip){print i," "ip[i]}}' access.log |wc -l
其中access.log就是apache的访问日志。这个就可以统计独立ip数据1、把IP数量直接输出显示:
cat access_log_2011_06_26.log |awk '{print $1}'|uniq -c|wc -l 本文出自 “水滴石穿” 博客,请务必保留此出处http://pengyl.blog.51cto.com/5591604/1256867
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: