• apache 访问状态 分析


    态查看:


    1.查看apache 各状态连接数
    [root]#netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

    LAST_ACK 8
    SYN_RECV 1
    ESTABLISHED 1747
    FIN_WAIT1 12
    TIME_WAIT 14208
    ……
    (关于awk详解  参考linux类别中awk一文)

    以下同理
    netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rn 
    netstat -n | awk '/^tcp/ {++state[$NF]}; END {for(key in state) print key," ",state[key]}'
    netstat -n |awk '/^tcp/ {print $NF}'|sort|uniq -c|sort -rn
    netstat -ant | awk '{print $NF}' | grep -v '[a-z]' | sort | uniq -c

    2.查看httpd进程数

    ps -ef | grep httpd | wc -l  
     
     
    返回结果示例:
    1388 
      表示Apache能够处理1388个并发请求,这个值Apache可根据负载情况自动调整



    查看所有80端口的连接数
    netstat -ant | grep '80'|wc -l

    对连接的IP按连接数量进行排序
    netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

    查看80端口连接数最多的20个IP

    netstat -anlp|grep 80|grep tcp|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -n20
    netstat -ant |awk '/:80/{split($5,ip,":");++A[ip[1]]}END{for(i in A) print A,i}' |sort -rn|head -n20

    用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

    查找较多time_wait连接

    netstat -n|grep TIME_WAIT|awk '{print $5}'|sort|uniq -c|sort -rn|head -n20

    找查较多的SYN连接

    netstat -an | grep SYN | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr | more


    apache中的几种状态:

    1、服务器端LISTENING状态
       LISTENING表示处于侦听状态

    2、ESTABLISHED状态
       ESTABLISHED状态是表示两台机器正在传输数据,

    3、客户端SYN_SENT状态
        从上面的分析可以看出,当请求连接时客户端首先要发送同步信号给要访问的机器,此时状态为SYN_SENT,如果连接成功了就变为ESTABLISHED,正常情况下SYN_SENT状态非常短暂。


    4、服务器端状态SYN_RCVD
        从上面的分析可以看出,当服务器收到客户端发送的同步信号时,将标志位ACK和SYN置1发送给客户端,此时服务器端处于SYN_RCVD状态,如果连接成功了就变为ESTABLISHED,正常情况下SYN_RCVD状态非常短暂。
        如果发现有很多SYN_RCVD状态,那你的机器有可能被SYN Flood的DoS(拒绝服务攻击)攻击了。
        这种情况下服务器端一般会重试(再次发送SYN+ACK给客户端)并等待一段时间后丢弃这个未完成的连接,这段时间的长度我们称为SYN Timeout。


    5、其它
       在TCP的标志位中有一位是Reset,如果包重发该标志位置为1,重发包很多时网络一定有问题


    三次握手建立连接状态:
     CLOSED:无连接是活动的或正在进行
     LISTEN:服务器在等待进入呼叫
     SYN_RECV:一个连接请求已经到达,等待确认
     SYN_SENT:应用已经开始,打开一个连接
     ESTABLISHED:正常数据传输状态

    四次握手关闭连接状态:
    1.被动方
    CLOSE_WAIT : 服务端收到FIN,表示对方没有数据发送给你了,这时进入CLOSE_WAIT状态,回复ACK,                                                      但未必你所有的数据都全部 发送给对方了。
                  当连接中的一方收到对方发过来的FIN时,它将进入CLOSE_WAIT状态。

     LAST_ACK:等待所有分组结束,服务端再次发送FIN,表示自己也发完了,进入LAST_ACK状态 
     
    2.主动方
     FIN_WAIT1:应用已经完成数据传送,发送FIN,进入FIN_WAIT1状态
     FIN_WAIT2:另一边已同意释放发送ACK确认,收到ACK 即进入 FIN_WAIT2状态
     TIME_WAIT:另一边数据发送完毕则发送FIN,收到FIN即进入TIME_WAIT状态
     CLOSING:两边同时尝试关闭






    日志分析:

    日志文本的格式

    1      2 3        4           5    6     7           8     9    10      11

    10.0.7.5 - - [29/Sep/2014:10:45:43 +0800] "GET /images/dlzc.jpg HTTP/1.1" 200 104298 "http://10.0.7.100/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Maxthon/4.4.1.2000 Chrome/30.0.1599.101 Safari/537.36"


    以不同背景色来区分日志中的每个字段


    1、在apachelog中找出访问次数最多的10IP:
    awk '{print $1}' access_log | sort | uniq -c | sort -nr | head -n 10

    awk 首先将每条日志中的IP抓出来,如日志格式被自定义过,可以 -F 定义分隔符和 print指定列;
    sort
    进行初次排序,为的使相同的记录排列到一起;
    upiq -c 
    合并重复的行,并记录重复次数。
    sort -nr按照数字进行倒叙排序。
    head进行前十名筛选;


    2、在apache日志中找到访问最多的页面:
    awk '{print $11}' access_log | sed 's/^.*cn(.*)"/1/g' | sort | uniq -c | sort -rn | head

    awk 首先将每条日志中的访问页面抓出来,如日志格式被自定义过,可以 -F 定义分隔符和 print指定列;
    sed 's/^.*cn(.*)"/1/g'     将 .*cn(.*)" 字符串用  1 字符串替代,末端的g表示在行内进行全局替换,即某行                       出现多个要替换字符,则全部替换;
                        
    用sed的替换功能将”http://www.a.cn/common/index.php”替换成括号内的内容                                                                                          ”http://www.a.cn(/common/index.php)”
                sed 's/^.*cn/(.*/)/"//1/g' 

    sort进行初次排序,为的使相同的记录排列到一起;
    upiq -c 
    合并重复的行,并记录重复次数;
    sort -nr按照数字进行倒叙排序;


    3、在apache日志中找出访问次数最多的几个分钟。
    awk '{print  $4}' access_log  | cut -c 14-18 | sort|uniq -c | sort -nr | head
    awk    首先将每条日志中的访问页面抓出来      [29/Sep/2014:10:45:43
    cut -c 14-18   再次将字符串中 14-18值抓出          10:45








    1.查看apache连接数
    [root]#netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

    LAST_ACK 8
    SYN_RECV 1
    ESTABLISHED 1747
    FIN_WAIT1 12
    TIME_WAIT 14208
    123


    2.查看httpd进程数
    (即prefork模式下Apache能够处理的并发请求数)

    ps -ef | grep httpd | wc -l  
     
     返回结果示例:
    1388 
      表示Apache能够处理1388个并发请求,这个值Apache可根据负载情况自动调整

    对连接的IP按连接数量进行排序


    netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
  • 相关阅读:
    (转载)delphi文件流
    一个不敢妄称自己是程序员的半拉子编码员的随想
    Xamarin.iOS使用极光JPush进行推送
    Xamarin.IOS问题记录——项目属性里IOS Bundle Signing 配置文件选项没有对应的配置文件选择
    Xamarin问题记录
    Unity3D笔记
    C#Xml To Class生成器
    WPF Mahapps.Metro 设置主题样式
    WPF画N角芒星,正N角星
    WPFPath素材
  • 原文地址:https://www.cnblogs.com/centos2017/p/7896836.html
Copyright © 2020-2023  润新知